Wargame/Lena’s Reversing for Newbies

Lena's Reversing for Newbie 22 Write-Up

0xe82de_ 2019. 8. 16. 22:19
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: 22. API Redirection

사용도구: 올리디버거 2.01

 

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

 

[사진 1]

원본파일을 실행하면 위와 같다. Name, Key 값을 입력하여 등록하는 프로그램인데 패킹되어 있다.

 

 

[사진 2]
[사진 3]
[사진 4]
[사진 5]

프로그램 결과 값들은 위와 같다.

 

 

[사진 6]

올리디버거로 실행하면 PUSHAD 명령어로 레지스터를 백업하기 때문에 언패킹이 진행된 후에 레지스터 값을 복구할 것이다.

 

 

[사진 7]

따라서 PUSHAD 명령어를 수행하고 ESP 값에 하드웨어 브레이크 포인트를 설정하자.

 

 

[사진 8]

그럼 위와 같이 OEP로 점프하기 전에 중지된다.

 

 

[사진 9]

OEP로 추정되는 곳을 보면 함수 프롤로그가 있다.

 

 

[사진 10]
[사진 11]

언패킹한 코드를 덤프하기 위해 OllyDumpEx 플러그인을 이용한다.

 

 

[사진 12]

IAT를 복구하기 위해 Import REC 도구로 원본파일을 올리고 OEP 331B8 주소를 입력한다. 그리고 AutoSearch 버튼을 클릭하고 Get Imports 버튼을 클릭하면 사용되는 dll들을 확인할 수 있다. 일부 dll의 valid 값이 NO 값이기 때문에 정확한 주소를 복구해야 한다.

 

 

[사진 13]

첫 번째 NO 값을 가지는 dll 함수의 값은 0x00458C35이다.

 

 

[사진 14]

해당 주소는 SFX 영역이다.

 

 

[사진 15]

원본파일을 실행하고 해당 주소를 보면 위와 같은 함수가 있다.

 

 

[사진 16]

원본파일을 실행하지 않고 다시 확인해보면 아무 값들이 없는 것으로 보아 언패킹이 진행되면서 설정되는 것 같다.

 

 

[사진 17]

0x00438040 주소의 값이 어떻게 설정되는지 확인하기 위해 하드웨어 브레이크 포인트를 설정한다.

 

 

[사진 18]

그리고 실행하면 0x004536A6 주소에서 중지된다. 점프한 후에 EDX 레지스터의 값에 따라서 0x004536F8 주소로 점프한다.

 

 

[사진 19]

0x00438040 주소의 값일 때는 0x004536F8 주소로 점프하지 않고 0x004536F0 주소의 CALL 명령어에 의해 0x00453E90 함수가 호출된다.

 

 

[사진 20]
[사진 21]

0x00453E90 함수를 호출하면 0x00438040 주소의 데이터가 바뀌게 되는 것을 확인할 수 있다. 패커에 의해 IAT가 정상적으로 복구되지 않는 것이다.

 

 

[사진 22]

따라서 위와 같이 호출 부분을 NOP 명령어로 패치하면 된다.

 

 

[사진 23]

그리고 실행하면 IAT가 정상적으로 복구되는 것을 확인할 수 있다.

 

 

[사진 24]

라고 생각했지만 Import REC 도구로 확인해보니 몇 가지 함수의 주소가 정상적으로 복구되지 않았다. 복구되지 않는 함수들이 어떤 것들인지 알아냈지만 IAT를 복구하는 과정에서 패커에 의해서 복구되지 않는 것인지 아니면 실습 환경에 의해 복구되지 않는 것인지는 알아내지 못했다.

 

*이 문제에 대해 아시는 분은 댓글로 알려주시면 감사합니다.

728x90
728x90