공부해요/리버싱_핵심원리

15. UPX 실행 압축된 notepad 디버깅

yenas0 2024. 10. 9. 02:56
반응형

010073B2: GetModuleHandleA() API 호출 후 notepad.exe 프로세스의 ImageBase구함

010073B4, 010073C0: MZ와 PE 시그니처 비교

 

 

 

 

notepad_upx.exe의 EP Code

01015330 60 PUSHAD
01015331 BE 00100101 MOV ESI, 0101100
01015336 8DBE 0000FFFF LEA EDI, DWORD PTR DS: [ESI+FFFF0000]

 

 

  • PUSHAD 명령어: EAX~EDI 레지스터를 스택에 저장
  • ESI/EDI 설정:
    • ESI: 두 번째 섹션 시작 주소 (01011000)
    • EDI: 첫 번째 섹션 시작 주소 (01001000)
  • 첫 번째 섹션: 메모리에서만 존재, 압축 해제된 원본 파일의 코드가 저장될 장소
  • 예상 동작:
    • ESI가 가리키는 버퍼 → EDI가 가리키는 버퍼로 메모리 복사
    • 압축된 데이터를 ESI에서 읽어 압축 해제 후 EDI에 저장
  • 목표: UPX EP 코드를 추적하여 원본 notepad EP 코드를 찾아냄

 

 

 

UPX 파일 트레이싱

올리디버거 트레이스 명령어

명령어 단축키 설명
Animate Into Ctrl+F7 Step Into 명령 반복 (화면 표시 됨)
Animate Over Ctrl+F8 Step Over 명령 반복 (화면 표시 됨)
Trace Into Ctrl+F11 Step Into 명령 반복 (화면 표시 안됨)
Trace Over Ctrl+F12 Step Over 명령 반복 (화면 표시 안됨)

트레이스 명령어는 미리 설정한 트레이스 조건에서 자동으로 멈출 수 있고 로그 남길수도 있음

 

 

 

UPX OEP를 빠르게 찾는 방법

  1. POPAD 명령어 이후의 JMP 명령어에 BP 설치
    • UPX 패커의 EP 코드는 PUSHAD/POPAD 명령어로 둘러싸여 있음
    • OEP로 가는 JMP 명령어는 POPAD 바로 뒤에 위치
    • JMP 명령어에 BP(Break Point) 설치 후 실행하면 바로 OEP에 도달 가능
  2. 스택에 하드웨어 브레이크포인트 설치
    • 하드웨어 BP가 설치된 명령어가 실행된 후, 코드가 압축 해제되며 실행됨
    • POPAD가 호출되는 순간, 하드웨어 BP가 설치된 0006FFA4 주소에 접근, 제어가 멈춤
    • 그 후 바로 아래에 있는 OEP로 가는 JMP 명령어를 발견할 수 있음

 

반응형

'공부해요 > 리버싱_핵심원리' 카테고리의 다른 글

17. 실행 파일에서 .reloc 섹션 제거하기  (0) 2024.10.09
16. Base Relcoation Table  (4) 2024.10.09
14. 실행 압축  (0) 2024.10.08
13. PE File Format  (1) 2024.10.02
11장. Lena's Reversing for Newbies  (0) 2024.09.24