[해킹] 소프트 아이스의 사용법

소프트 아이스의 사용법

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

이번강좌에서는
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:소아의 버젼을 알려줍니다.

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Leave a Reply