반응형
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를 빠르게 찾는 방법
- POPAD 명령어 이후의 JMP 명령어에 BP 설치
- UPX 패커의 EP 코드는 PUSHAD/POPAD 명령어로 둘러싸여 있음
- OEP로 가는 JMP 명령어는 POPAD 바로 뒤에 위치
- JMP 명령어에 BP(Break Point) 설치 후 실행하면 바로 OEP에 도달 가능
- 스택에 하드웨어 브레이크포인트 설치
- 하드웨어 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 |