예제 및 소스코드 사이트

여기서 1강인 HelloWorld.exe를 받아주고

https://www.ollydbg.de/

여기서 ollydbg를 다운받아 준 뒤 디버그 툴을 이용해 분석을 시작하면 된다.

ollydbg의 단축키는 다음과 같다.


Restart : [Ctrl + F2] : 다시 처음부터 디버깅 시작
Step Into : [F7] : 하나의 OP code 실행 (CALL 명령을 만나면 그 함수 코드 내부로 따라 들어감)
Step Over : [F8] : 하나의 OP code 실행 (CALL 명령을 만나면 따라 들어가지 않고 그냥 함수 자체를 실행)
Execute till Return : [Ctrl + F9] : 함수 코드 내에서 RETN 명령어까지 실행(함수 탈출 목적)
Go to : [Ctrl + G] : 원하는 주소로 이동 (실행되는 건 아님)
Execute till Cursor : [F4] : cursor 위치까지 실행(디버깅하고 싶은 주소까지 바로 갈 수 있음)
Comment : [ ; ] : 주석 달기
Set/Reset BreakPoint : [F2] : BP 설정/해제
Run : [f9] : 실행(BP가 걸려있으면 그곳에서 실행이 정지됨)
Preview CALL/JMP address : [Enter] : 커서가 CALL/JMP 등의 명령어에 위치해 있다면 해당 주소를 따라가서 보여줌 (실행되는 것이 아님. 간단히 함수 내용을 확인할 때 유용함)


저기서 주로 쓰는 건 F2, F4, F7, F8, F9, 정도인거 같다.

예제의 프로그램을 F7과 F8, Ctrl + F9로 적절히 CALL을 따라가다 보면 00401000이 main()의 시작주소임을 알 수 있다.

그리고 PUSH HelloWor.004092A0 부분에서 004092A0이 메세지박스의 Hello World!라는 문자열을 담은 메모리 주소임을 알 수 있다. 아래의 dump window에 마우스를 가져간 후 Ctrl + G 를 치면 주소창이 나오는데 거기에 해당 주소를 치면

H.e.l.l.o. .W.o.r.l.d.!. 이라는 문자열을 찾을 수 있다. 알파벳은 2바이트를 차지하기 때문에 표현될 때 48 00 , 65 00 이런 식으로 쓰이는 것 같다. 마우스 드래그로 범위를 정해주고 Ctrl + E 를 누르면 편집창이 열린다.

여기를 수정해 주면 된다.

그럼 문자열이 패치되어 F9를 통해 실행 해 보면 Hello Reversing! 이라는 문자열이 나온다. 그런데 한글로 바꾸고 싶은데 어떻게 해야 할지 모르겠다. 찾아봐야겠다.