오브의 빛나는 별

1부 2장 Hello World! 리버싱(1) 본문

리버싱

1부 2장 Hello World! 리버싱(1)

오브의 별 2022. 4. 21. 17:13
반응형

안녕하세요, 오브입니다. 

오늘은 HelloWorld.exe 실행 파일을 디버깅하여 어셈블리 언어로 변환된 main() 함수를 찾아보겠습니다.

 

Hello World! 리버싱

2.2.1. 디버깅 목표

  • main() 함수 찾기

 

2.2.2. 디버깅 시작

  • OllyDbg 관리자 모드로 실행 후 [File]-[Open]-’HelloWorld.exe’ 파일 열기
  • 메인 화면 구성  
    • Code Window: 기본적으로 disassembly code를 하여 각종 comment, abel 을 보여주며, 코드를 분석하여 loop, jump 위치 등의 정보 표시
    • Register Window: CPU register 값을 실시간으로 표시하며 특정 register들 수정 가능
    • DumpWindow: 프로세스에서 원하는 memory 주소 위치를 Hex와 ASCII 유니코드 값으로 표시하고 수정 가능
    • Stack Window: ESP register가 가리키는 프로세스 stack memory를 실시간 표시 및 수정 가능

 

2.2.3. EP

  • EP: 실행 파일(exe, dll, sys 등)의 코드 시작점. CPU에 의해 가장 먼저 실행되는 코드 시작 위치

 

2.2.4. 40270C 함수 따라가기

명령어 단축키 설명

명령어 단축키 설명
Restart [Ctrl+F2] 다시 처음부터 디버깅 시작(디버깅을 당하는 프로세스를 종료하고 재실행)
Step Into [F7] 하나의 OP code 실행(CALL 명령을 만나면, 그 함수 코드 내부로 따라 들어감)
Step Over [F8] 하나의 OPcode 실행(CALL 명령을 만나면, 따라 들어가지 않고 그냥 함수 자체를실행)
Execute till Return [Ctrl+F9] 함수 코드 내에서 RETN 명령어까지 실행(함수 틸출 목적)
  • 주석: 가장 오른쪽 빨간색 글씨로 코드에서 호출되는 API 함수 이름
  • RETN: 함수의 끝에서 사용되며 이 함수가 호출된 원래 주소로 되돌아감

 

<실습 순서>

  • 4011A0 주소에서 [F7]하여 call 함수 내부로 들어가기
  • RETN 명령어까지 [F8] or [Ctrl+F9]
  • [F7/F8]하여 call 함수에서 나오기

 

  • 4011A5 주소에서 [F7]하여 40104F 주소로 가기
  • 401056 주소에서 [F7]하여 call 함수 내부로 들어가기
    • CALL 함수 호출 명령어가 보이면 [F7]하여 call 함수 내부로 들어가 보기
  • MessageBox() API 호출 코드가 있는지 확인 후 없으면 [F8] or [Ctrl+F9]하여 RETN 명령어로 가기
  • [F7/F8]하여 call 함수에서 나오기

 

  • 이런 식으로 call 함수 내부로 들어가서 MessageBox() API 호출 코드가 있는지 확인

 

  • 4010E4 주소의 CALL Kernel32. GetCommandLineW 명령어는 들어갈 필요x [F8]
    • 함수 내부에 반복문이 존재해서 함수 탈출할 때 오래걸림

 

  • 401144 주소에서 [F7]
  • MessageBoxW() API 파라미터에 문자열 있음. 따라서 401000 함수가 main() 함수

 

 

반응형

'리버싱' 카테고리의 다른 글

1부 3장 리틀 엔디언 표기법  (0) 2022.04.23
1부 2장 Hello World! 리버싱(3)  (0) 2022.04.23
1부 2장 Hello World! 리버싱(3)  (0) 2022.04.23
1부 2장 Hello World! 리버싱(2)  (0) 2022.04.22
1부 1장 리버싱 스토리  (0) 2022.03.28