먼저 ollydbg를 설치한다.
ollyDbg 파일을 받은 후 HelloWorld.exe 파일을 OllyDbg로 열어보았다.
외계어들이 가득하다....
화면이 4분할 되어있는데 각 화면별로 역할이 있다.
Code Window : disassembly code를 표시하여 각종 comment, label을 보여주며, 코드를 분석하여 loop, jump 위치 등의 정보를 표시한다.
Register Window : CPU regitser 값을 실시간으로 표시하며 특정 regitser들은 수정도 가능하다.
Dump Window : 프로세스에서 원하는 memory 주소 위치를 Hex와 ASCII/유니코드 값으로 표시하고 수정도 가능하다.
Stack window : ESP register가 가리키는 프로세스 stack memory를 실시간으로 표시하고 수정도 가능하다.
간단하게 ollydbg에 대하여 알아보았다.
ollydbg로 HelloWorld.exe를 실행했을 때 항상 같은 곳에서 디버거가 멈춘다.
이때 디버거가 멈춘 곳은 EP 코드로, HellowWorld.exe의 실행 시작 주소이다.
Address : 프로세스의 가상 메모리내의 주소
Instruction : IA32(또는 x86) CPU 명령어
Disassembled code : OP code를 보기 쉽게 어셈블리로 변환한 코드
comment : 디버거에서 추가한 주석(옵션에 따라 약간씩 다르게 보임.)
위 줄의 코드는 security init cookie를 불러오라는 명령어이다.
이제 하나씩 OP code 명령어를 실행해 가면서 Hellow world! 창을 띄워보자
Step Into 명령어를 사용해 따라갈 수 있다.
(따라가다 보면 원본 소스코드에서 사용된적 없는 API들이 호출되는것을 볼 수 있는데 이는 Visual C++에서 프로그램 실행을 위해 추가시킨 Visual C++ Stub Code라고 한다. 실전에서 이 Sub Code를 빠르게 넘겨야 한다는데 아직은 사실 뭐가뭔지 잘 모르겠다....)
내려가다 보니 CALL Hellowor.wamin 이 보인다 들어가본다.
뭔가 딱봐도 main함수처럼 생긴게 나왔다.
MessageBoxW() API를 호출하는 코드와 'Hellow World!" "www.reversecore.com" 파라미터들이 보인다.
따라서 401000이 메인함수임을 알 수 있다.
추가로 MessageBox 함수 내부가 궁금해서 한번 들어가봤다.
또 뭘 CALL 한다 저게 뭘 CALL 하는건지 모르겠다. 저 함수를 실행시키면 메시지박스가 나온다
저 안으로 또 들어가봤지만 뭔소린지 아직 모르겠어서 여기까지 하기로 했다....
여기까지 하면서 느꼈는데 디버거를 재실행 할 때마다 처음코드(EP 코드)부터 새로 시작하게 된다.
함수가 실행되는 포인트를 잡고 다시 그 안으로 들어가려면 처음부터 쭉 다시 와야하니 화가 나지 않을수가 없다.
다행히 이를 해결하기 위해 '베이스캠프' 즉 체크포인트를 설정할 수 있다고 한다.
이는 다음 포스팅에 올리도록 하겠다!
'컴퓨터와 보안 > 리버싱' 카테고리의 다른 글
PE File Format3 (0) | 2021.04.01 |
---|---|
PE File Format (0) | 2021.03.29 |
Hello World! 리버싱3 (0) | 2021.03.28 |
Hello world! 리버싱2 (0) | 2021.03.28 |
리버싱 핵심 원리 (0) | 2021.03.28 |