R136A1

[codeEngn] Basic RCE L06 (수동언패킹) 본문

REVERSING/codeEngn

[codeEngn] Basic RCE L06 (수동언패킹)

r136a1x27 2021. 2. 20. 20:57

Unpack 후 Serial 찾기

OEP+Serial이 정답

파일

 

일단 패킹되어있는 파일인지 체크하기

PEid 또는 ExeinfoPE 또는 DIE(Detect It Easy)

UPX로 패킹되어있음

1. 수동 언패킹 (manual unpacking)

UPX 패킹

PUSHAD 정상적인 실행값을 가진 레지스터를 스택에 백업해놓고 이 레지스터를 이용해 패킹작업을 한 뒤

POPAD하여 정상적인 실행값을 가져와 OEP를 실행시키기 위함

 

teamsign.tistory.com/12

PEviewer

[정상적인 PE파일] 전체적인 PE구조 및 IAT가 쉽게 확인되어 어떤 API 사용하는지 한눈에 보임

[UPX로 패킹 진행] SECTION .text → SECTION UPX0 형식으로 모두 패킹됨

                                    IAT를 살펴봐도 사용되는 API 목록들이 가려져있음

 

1. Ollydbg의 dump를 이용하기

bbolmin.tistory.com/47

UPX패킹에서 나타나는 코드 구조

Entry Point에서 PUSHAD

NOP NOP NOP NOP......

아래쪽에서 POPAD와 JMP [프로그램명].00401360 (→OEP) 를 볼 수 있음

DB 00 DB 00 DB 00......

 

프로그램 실행 시 정상 동작을 위한 언패킹 알고리즘

(PUSHAD로 이전 레지스트리를 스택에 저장(백업)해놓고, 패킹을 푼 후에 POPAD로 레지스터 상태 복구)

 

그냥 현재 00401360(OEP)로 가봐도 언패킹 알고리즘이 수행되지 않아 암호화되어있음

중단점 JMP나 OEP에 설정한 뒤 프로그램을 실행시키면 언패킹 알고리즘이 수행되어 확인 가능

언패킹해보기

OllyDump.dll
0.08MB

OllyDump.dll 플러그인을 다운받고 경로에 넣고 재시작

실행 후 00403160에서 복호화된 것 확인하고 아무데서나  Dump debugged process

Entry Point에 대한 언급이 없음 - 저 블로그 글 필자는 Entry Point를 1360으로 뒀음.

나는 처음 뜬 그대로 하니까 PE파일 인식이 안됨(근데 1360 써도 복구 안됨, 403160도 안됨)

애초에 값 자체가 각 프로그램마다 다를텐데 기본 설정을 쓴다는 것 자체가 이해 안가긴 했음

PE파일 구조를 모를때였어서... Ollydump의 Start Address==Image Base

Entry Point를 바꿔줄 때 Modify 값에 403160이면 3160을 써줘야함

Base of Code 등은 그대로 둬도 됨

그리고 dump뜰 때 jmp까지 진행해서 복호화 진행한 상태여야 함!!

 

드디어 성공...

 

+구버전의 경우 안정화가 되지 않아서 Rebuild import해제하고 dump후

따로 ImportREC나 LoadPE툴로 IAT를 복구한다고 함

 

c.f) 잘 된 언패킹 파일

2. X32Dbg의 Scylla 플러그인

liveyourit.tistory.com/71

수동으로 언패킹하기 위해서는 OEP, IAT, Imports를 맞춰줘야 함, 이것을 자동으로 해주는 플러그인

 

맨 마지막에 나오는 분기 그림은 IDA 에서 지원하는 기능. 가볍게는 Freeware로도 열람가능

 

 

2. 언패커 사용 upx.exe

Ollydbg로 들어가면 자동으로 Entry Point에 위치함 또는 F7로 따라가보기

(잘 안뜨면 Options - Debugging Options - Entry point of main module 로 설정)

 

Entry Point는 00401360

 

일단 어떤 프로그램인지 보기

단순하게 Check Serial 뜨고 틀리면 Wrong serial!!! 뜨는 프로그램

Search for text strings에서 바로 뜸

AD46DFS547

또는 MessageBox 뜨는 걸 알았으니 API(함수)검색하기

→ intermodular calls에서 MessageBoxA 찾아서 이동해보기

'REVERSING > codeEngn' 카테고리의 다른 글

[codeEngn] Basic RCE L03  (0) 2021.02.24
[codeEngn] Basic RCE L02  (0) 2021.02.23
[abex] crack me #2  (0) 2021.02.19
[xcz.kr] PROB.9 Easy Reversing [codeEngn] Basic RCE L15  (0) 2021.02.18
[abex] crack me #3  (0) 2021.02.17
Comments