Wargame/Lena’s Reversing for Newbies

Lena's Reversing for Newbie 21 Write-Up

0xe82de_ 2019. 8. 16. 20:01
728x90
728x90
728x90

파일 링크: https://tuts4you.com/e107_plugins/download/download.php?list.17

 

Downloads / Lenas Reversing for Newbies - Tuts 4 You

 

tuts4you.com

Tutorials Index: 21. Imports rebuilding

사용도구: 올리디버거 2.01, LordPE, Import REC

 

Lena's Reversing for Newbie 21(이하 원본파일) 분석해보자.

 

21단계는 분석할 파일이 4개이다.

 

1. UnPackMe_FSG2.0.exe

2. UnPackMe_UPX.exe

3. PCGuard4.06C_UnpackmeAll.exe

4. UnPackMe_WinUpack0.39.exe

 

첫 번째 UnPackMe_FSG2.0.exe 파일을 분석해보자.

 

[사진 1-1]

오류로 생략..

 

 

두 번째 UnPackMe_UPX.exe 파일을 분석해보자.

 

[사진 2-1]

원본파일을 실행하면 위와 같다.

 

[사진 2-2]

올리디버거에 원본파일을 올리면 PUSHAD 명령어로 레지스터를 스택에 저장한다. 이후에 언패킹이 진행되고 OEP로 점프하기 전에 POPAD 명령어로 레지스터를 복구할 것이다.

 

 

[사진 2-3]
[사진 3-4]

따라서 PUSHAD 명령어가 수행된 후의 ESP 레지스터에 메모리 브레이크 포인트를 설정해두고 실행하면 위와 같이 POPAD 명령어가 수행되기 전에 중지된다. 즉, 다음 명령어인 JMP로 점프하는 지점이 OEP다.

 

 

[사진 3-5]

이 곳이 OEP이므로 덤프하면 된다.

 

 

[사진 3-6]

언패킹한 코드를 덤프하기 위해 OllyDumpEx 플러그인을 이용한다. Entry Point에 ImageBase를 뺀 값인 0x00001000을 입력하자.

 

 

[사진 3-7]

위와 같이 Entry Point가 0x00401000인 것을 확인할 수 있다.

 

 

[사진 3-8]

덤프한 파일을 실행하면 정상적으로 실행되지 않는다. 덤프하는 과정에서 IAT가 깨졌기 때문이다.

 

 

사진 3-9]

따라서 LordPE 도구로 손상된 IAT를 복구하면 된다. Rebuild PE 버튼을 클릭하여 덤프 파일의 PE 헤더를 리빌드해주자.

 

[사진 3-11]

그럼 위와 같이 올리디버거로 실행하면 OEP부터 디버깅할 수 있다.

 

 

세 번째 PCGuard4.06C_UnpackmeAll.exe 파일을 분석해보자.

 

실행이 안되서 생략..

 

 

네 번째 UnPackMe_WinUpack0.39.exe 파일을 분석해보자.

 

[사진 4-1]

원본파일을 실행하면 언팩하라고 한다.

 

 

[사진 4-2]

올리디버거로 실행하면 위와 같이 언패킹을 하는 코드들이 나온다.

 

 

[사진 4-3]

메모리 맵을 보면 text, data 등의 영역이 구별되어 있지 않다. 언패킹 코드와 OEP가 같은 영역에 있는 것 같다.

 

 

[사진 4-4]

언패킹을 진행하다 보면 RETN 명령어를 만나서 어딘가로 점프한다.

 

 

[사진 4-5]

함수 프롤로그가 나오는 것을 보니 이 곳이 OEP임을 추측할 수 있다.

 

 

[사진 4-6]

덤프하기 위해 Import REC 도구를 사용하자. 원본파일을 실행하고 Attach하면 된다. 그리고 우클릭 - Advanced Commands - Select Code Section(s) 기능을 클릭하자.

 

 

[사진 4-7]

그럼 위와 같이 사용되는 영역이 나오는데 첫 번재 영역만 선택하고 Full Dump 버튼을 클릭한다.

 

 

[사진 4-8]

OEP에 0x00271B0 주소를 입력하고 AutoSearch 버튼을 클릭하면 RVA와 Size가 자동으로 설정된다. 그리고 Get Imports 버튼을 클릭하면 사용되는 dll들이 나오는데 valid가 NO 값인 것들을 수정해줘야 한다. Show Invalid 버튼을 클릭하자.

 

 

[사진 4-9]

그럼 위와 같이 Invalid 값을 가지는 부분이 표시된다. 우클릭 - Cut thunk(s) 기능을 클릭하자.

 

 

[사진 4-10]

그럼 위와 같이 모든 dll의 valid 값이 YES 값이 된다. Fix Dump 버튼을 클릭하여 저장해주자.

 

 

[사진 4-11]

LordPE 도구로 불필요한 섹션을 정리하고 리빌드해주자.

 

 

[사진 4-12]

PE Editor - Sections 버튼을 클릭하자.

 

 

[사진 4-13]

2~3번 째 섹션을 우클릭 - wipe section header 기능으로 지워주고 Save 버튼으로 저장하자.

 

 

[사진 4-14]

Rebuild PE 버튼을 클릭하여 리빌드하면 된다. 하지만 덤프가 제대로 되지 않는다.

 

 

[사진 4-15]

올리디버거로 수정한 파일을 실행하면 OEP부터 디버깅을 진행할 수 있지만 섹션, IAT가 제대로 복구되지 않은 것인지 완전히 실행되지는 않았다. 다른 도구를 사용해서 덤프를 해봐야 한다.

728x90
728x90