본문 바로가기

컴퓨터와 보안/리버싱

Hello World! 리버싱

먼저 ollydbg를 설치한다.

 

 

ollydbg 다운로드

ollyDbg 파일을 받은 후 HelloWorld.exe 파일을 OllyDbg로 열어보았다.

ollydbg 실행 화면

외계어들이 가득하다....

화면이 4분할 되어있는데 각 화면별로 역할이 있다.

Code Window

Code Window : disassembly code를 표시하여 각종 comment, label을 보여주며, 코드를 분석하여 loop, jump 위치 등의 정보를 표시한다.

 

Register Window

Register Window : CPU regitser 값을 실시간으로 표시하며 특정 regitser들은 수정도 가능하다.

 

Dump Window

Dump Window : 프로세스에서 원하는 memory 주소 위치를 Hex와 ASCII/유니코드 값으로 표시하고 수정도 가능하다.

 

stack window

Stack window : ESP register가 가리키는 프로세스 stack memory를 실시간으로 표시하고 수정도 가능하다.

 

간단하게 ollydbg에 대하여 알아보았다. 

ollydbg로 HelloWorld.exe를 실행했을 때 항상 같은 곳에서 디버거가 멈춘다.

이때 디버거가 멈춘 곳은 EP 코드로, HellowWorld.exe의 실행 시작 주소이다.

 

왼쪽부터 Address, Instruction, Disassembled code, comment 이다.

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