상세 컨텐츠

본문 제목

Lena Reversing Tutorial 20 (x32dbg, OEP 찾기, 메모리 덤프)

REVERSING/Reversing Study

by koharin 2021. 5. 11. 00:05

본문

728x90
반응형

OEP 찾기

  • F9로 프로그램을 실행하면 '004650BE' 주소에서 실행이 멈추는데, EntryPoint에 해당한다.

 

  • 그리고 F7로 들어가면 함수 프롤로그를 만날 수 있다.

 

ESP 레지스터 값이 EBP 레지스터에 저장된다.

 

스택 top(ESP 레지스터가 가리키는 곳)에는 EBP 레지스터 값이 저장되어 있다. 현재 EBP 레지스터에는 EBP 값이 저장된 스택의 주소를 가진다.

언패킹이 끝나면 다시 이전 루틴의 EBP 값을 ESP 레지스터에 가져와서 EBP 레지스터에 저장해야 하므로, ESP 레지스터 값이 가리키는 메모리 주소에 BP를 설정하면 OEP로 이동하는 지점을 확인할 수 있다.

스택 top에 저장된 이전 루틴의 EBP 값에 hardware breakpoint를 설정한다.

 

x32dbg에서 이전 루틴의 EBP 값이 저장된 스택 top 주소 0019FF70에서 우클릭→ 덤프에서 따라가기 를 선택하면 덤프를 확인할 수 있다.

스택 top에 저장된 EBP 값에 우클릭 → 중단점 → Access(R/W) (데이터를 읽어야 하므로) → Dword (32bit에서 4byte 단위로 데이터 읽으므로)

 

  • 중단점 창에서 중단점이 설정된 것을 확인할 수 있다.

 

 

  • F9를 하면 jmp eax에서 멈추고, 이전에 mov esp, ebp와 pop ebp 명령어가 실행되어 EBP 레지스터에 기존 루틴의 EBP 레지스터가 복구되고 스택에서 19FF80이 pop 된 것을 확인할 수 있다.
  • JMP EAX로 EAX 레지스터에 원래 코드가 들어있는 것을 추측할 수 있다.

 

  • F8로 step over(건너서 단계 진행)을 하면, 0x004271B0으로 점프하고 스택 프레임을 생성하는 함수 프롤로그가 보인다.
  • 이것으로 004271B0이 OEP임을 알 수 있다.

 

메모리 덤프

EIP가 OEP(004271B0)를 가리키고 있을 때, 플러그인 ->  Scylla 선택한다.

따로 OEP 설정하지 않아도 EIP가 가리키는 값으로 자동 설정된다.

 

IAT Autosearch를 누르면 위와 같은 창이 뜨고 IAT Info가 업데이트된다.

그리고 Get Imports 버튼을 누른다.

 

 

이후 Dump를 누르면 덤프한 파일을 저장할 수 있다. 디폴트로 원본파일_dump.exe로 설정된다.

Fix Dump를 눌러서 저장한 dump 파일을 불러온다.

그럼 _SCY가 붙은 파일이 생성되고, 최종 실행파일에 해당한다.

 

이 프로그램의 경우, IAT 복구 없이 프로그램을 실행할 수 있다.

 

UnPackMe_EZIP1.0_dump.exe를 F9로 실행시키면, OEP인 004271B0에서 실행이 멈추고 EntryPoint라고 표시되는 것을 확인할 수 있다.

728x90
반응형

'REVERSING > Reversing Study' 카테고리의 다른 글

리버싱 입문 1.7 리버싱에 필요한 도구  (0) 2021.05.17
리버싱 입문 5. 리버싱의 어려운 문제들  (0) 2021.05.11
CodeEngn Basic RCE L10  (0) 2021.05.10
CodeEngn Basic RCE L08  (0) 2021.05.09
CodeEngn Basic RCE L06  (0) 2021.05.09

관련글 더보기