[해킹] 소프트 아이스의 사용법
June 30, 2006 — Digital Angel Master소프트 아이스의 사용법
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
이번강좌에서는
NuMega의 Softice[소프트아이스]를 사용하는 방법을 한번 써볼게요.
저도 잘아는편은 아니지만 기본적으로 다루는 방법을 써보도록 하겠습니다.
우선 소프트아이스란 무엇인가? 시작 -> 실행 에서 DEBUG.EXE라고 쓰신후
확인 버튼을 눌러보세요 ^-^ 윈도우의 기본적으로 설치되어있는 DEBUG라는
프로그램입니다. 소프트아이스도 이것과 같은종류입니다만 훨씬 기능이 쌔죠.
우리가 흔히 쓰는 유틸의 장르로는 HexEditor[핵스에디터],
Resource Editor[리소스 에디터],Dissasmbler[역어셈블러],Debuger[디버거]
등이있습니다. 그중 우리가 지금부터 볼건 디버거에 속하는 소아입니다.
소프트아이스는 인터넷에서 어렵지않게(?) 구하실수 있을겁니다.
각OS의 버젼에 맞게 설치해주셔야 됩니다 XP유저분꼐서도 NT버젼을 받으신후
XP패치를 다시설치하시면 정상적으로 작동할겁니다.[4.05 기준] 저같은 경우는
driver suite 를 안쓰지만 ^-^; dive2code님께서 XP 유저 분께는 driver suite 를
권장 하신다는군요. 하지만 WinMain 지정에 문제가 있어서
kayaker 라는 분의 패치를 해주심이 좋다고 하는군요. 설치모드는 …
저는 오토매틱 모드로 설치 했습니다. 자신이 생각하기에 자기가 쓰기 편할꺼
같은 모드로 설치하세요. 그후 윈도우를 재부팅 합니다.[자동으로 될겁니다.]
오토매틱이나 그위의 상태를 체크 하셨다면 윈도우를 가동하고 나서 Ctrl + D 를
눌러주시면 소아가 팝업됩니다. 오토매틱의 아래것을 체크하셨다면 시작-> 프로그램 ->
NumegaSoftice->StartSoftice 를 클릭해주신다음 Ctrl + D 를 눌러주시면 소아가
팝업됩니다. ^-^ 팝업된 모습을 보니 마우스가 안움직여지신다는걸 느끼셨을거에요
마우스를 쓰실려면 따로 설정해줘야 한답니다. (그냥 키보드 만으로 하심이 더 편합니다.)
그다음은 화면을 설정해 주실필요가 있는데요. 커맨트라인 에서 COLOR 이나 SETFONT
명령으로 설정해줄수도 있지만 Winice.dat 파일을 그냥 수정해주시면 됩니다.
시작->검색에서 winice.dat를 찾으신후 간단한 에디터를 통해서 열어보시면
INIT=”X;” 이 보이실겁니다. 이걸 밑에처럼 수정시키신후 저장하세요.
INIT=”lines 39;set font 2;color f a 4f 1f 1e;wc 20;wd 7;wr;code on;faults off;X;”
그다음 윈도우를 다시시작해 주시면 소아화면 설정끝입니다 ^-^
윈도우를 재부팅 하셨다면 소아를 다시 팝업해보죠. Ctrl + D !
어때요? 화면이 보기쉽고 이뻐졌죠?^-^
이젠 명령어 들에 대해서 알아보죠.
소아의 강력한 기능중의 하나인 브포[Break Point] 부터 알아보도록 하죠 ^-^
브포의 종류로는:
BPE:브포를 수정하여줍니다.[이기능은 브포를 지정한후 지정한 브포를 수정하는 것입니다.]
예:)
BPE 1 [1은 브포번호 ]
BPM:특정 메모리주소에 브포를 걸어줍니다.
페러미터들로는 size,address,acess type 등이 있는데요.
size는 Byte[BPMB],Word[BPMW],Dubble word[BPMD] 등인데요.
바이트 는 헥스에디터로 프로그램을 열었을떄의 한칸입니다. 워드는 2칸 더블워드는 4칸이죠.
그다음은 브포를 걸 주소입니다. 그다음이 중요한 엑세스타입인데요.
종료로는 R[Read(읽기)] , W[Write(쓰기)] , RW[Read & Write(읽기&쓰기)] ,
X[Execute] 등입니다.
예:)
Byte 타입으로 메모리주소를 읽기엑세스 할떄 브포:
BPMB 401F47 R (401F47에 값을 다른데서 읽어갈떄)
Word 타입으로 메모리주소를 쓰기엑세스 할떄 브포:
BPMW 401F47 W (401F47에 값이 바뀔떄 브포)
Dword 타입으로 메모리주소를 읽기&쓰기엑세스 할떄 브포:
BPMD 401F47 RW (401F47의 값이 읽히거나 바뀔떄)
Byte 타입으로 메모리주소가 실행될때 브포:
BPMB 401F47 X (401F47의 주소가 실행될떄)
BPX:API에 브포를 걸떄 써줍니다.
사용방법은 이렇습니다.
BPX ReadFile (ReadFile[파일을 읽어오는 함수] 에 브포를 걸어줍니다.)
BPX GetWindowText
(GetWindowText[창의 글자를 알아오는 함수] 에 브포를 걸어줍니다.)
브포 설정에 있어서 조건적인 브포를 걸수도 있지만
초보들에겐 별로 그런일은 없을겁니다 ^-^
함수들의 뒤에 예들들어서 GetWindowTextA 나 FindWindowA 같이 함수뒤에 A가
붙는것은 32bit 용 함수임을 나타내줍니다. 아무것도 안붙은 것은 16bit 이구요.
Ex 가 붙은 것은 차일드 계념이라고 알고 있습니다.
BPR:지정한 시작주소 지점 부터 지정한 끝주소 지점 까지 브포를 걸떄 씁니다.
좋은 명령어입니다. 시작 어드레스와 끝어드레스로 지정 하는 주소 까지 가운데에 끼
어 있는 모든 어드레스에 브포가 걸린다는 무서운 ^-^; 이거 같은 경우도 브포할
엑세스 타입을 지정해주어야 합니다. R[Read(읽기)],W[Write(쓰기)],
RW[Read & Write(읽기 & 쓰기)] T [Back Trace on Execution],
TW[Back Trace On Memory Writes] 등입니다. 상황에 맞게 잘 써주어야 겠죠 ^-^;
예를 한번 보죠~
예:)
BPR 401F47 4FFFFF RW (401F47~4FFFFF) 까지의 메모리에서 RW시 브포)
라스트 BMSG 입니다. (BPRW 생략)
윈도우의 특정 메시지가 발생하였을 경우 브레이크를 걸어주는 것입니다.
재 입장에선 상당히 좋은데 실제로도 많이 쓰는지는 의문이군요 ^_^;;
만약 버튼의 메시지 발생에 대해 브레이크를 건다고 치면 처음 접하는 분에게는
그 대상 버튼의 핸들을 적는것이 아닐까 라고 하지만 아니라고 하는군요 ^-^;
대상 버튼의 부모창에 핸들을 적어주는 것입니다. 이점 유의 하면서 예를 보죠.
예:)
BMSG 0504 WM_COMMAND (lparam,Wparam 은 생략 하였습니다.)
그다음은 소아의 코드 실행에 대하여 알아 보죠.
StepInto: 한줄씩 실행을 하나 Call 문을 만나면 Call 이 되는 지점으로 들어가 버립니다.
키는:F8 입니다.
StepOver: 한줄씩 실행을 하고 Call 문을 만나도 안으로 들어가지않습니다.
키는:F10입니다.
Trace: Ret을 만날떄까지 실행합니다.
키는:F12 등입니다.
그외의 명령들로는
BL: 브포의 목록들을 보여줍니다.
BC: 브포를 해제할떄 씁니다.
예:)
BC 1 (1번 브포를 해제합니다)
BC 1,3 (1번과3번을 해제 합니다. 이처럼 두개를 쓸수도 있습니다.)
BC * (모든브포를 해제합니다.)
BD: 브포의 적용을 일시중지합니다.
예:)
BD 1 (1번 브포를 일시중지)
BD 1,3 (1번3번 브포를 일시중지)
BD * (모든 브포 일시중지)
BE: 일시중지된 브포를 활성화 시켜줍니다.
예:)
BE 1 (1번 브포를 활성화)
BE 1,3 (1번3번 브포를 활성화)
BE * (모든 브포 활성화)
R: 레지스터에 값을 입력할떄 쓰이거나 플래그를 셋할떄 쓰입니다.
예:)
R EAX=5 (EAX의 값을5로 변경해줍니다.)
R EBX=6 (EBX의 값을6로 변경해줍니다.)
커맨드 라인에 R만 입력하였을 경우 직접 수정 할수 있습니다. 플래그를 셋할때는
Insert 키를 눌러 주시면 Set 됩니다.
A: 명령줄에 치는 명령을 어셈블하여 특정주소에 집어넣는다.
예:)
A 401F47 (401F47에다가 내가원하는 명령어를 집어넣음)
위의 A 401F47 을 치면 커맨드 라인이
XXXX:00401F47 로 바뀌고 명령을 기다릴겁니다. 어셈블 명령을 내려줘야 겠죠.
예를들어 40DFC0으로 점프 하고싶다면 jmp 40DFC0 이라고 적어주시면 되는거죠.
D:메모리의 한영역을 디스플레이 한다.
예:)
D 401F47 (401F47의 헥스값들을 디스플레이 해줍니다)
E:메모리의 특정위치에서 시작하여 데이터를 메모리에 입력한다.
예:)
E 401F47 5 (401F47의 헥스값을 05로 바꾸어줍니다)
U:지정주소의 기계코드를 기호코드로 역어셈블한다.
예:)
U 401F47 (401F47의 기계코드들을 역어셈블 하여보여줍니다.)
H:명령어 및 도움말을 보여줍니다.
VER:소아의 버젼을 알려줍니다.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::