>


EXE 바이너리 하나가 주어집니다. unpackme 라는 이름 답게 패킹이 되어있는 것을 확인할 수 있는데요. 언패킹 루틴은 단순 XOR로 그리 복잡하지 않습니다. 언패킹 과정 후에는 다음과 같은 주소로 뜁니다. 


위 함수에서 더 타고타고 들어가다 보면 main격의 함수가 호출되고 그 함수 내에서 아래와 같은 루틴을 실행합니다.

저 루틴이 실행되기 전에 프로세스 검색같은거 체크를 거치는데 결국에는 변수 하나를 검사하는거라 그 부분 우회하고, Sleep도 인자 조종해주고 나면 unpackme_unpackme.tmp를 드랍하는 부분으로 갈 수 있습니다.

드랍하는 부분 보면 한 공간을 RtlDecompressBuffer 함수를 이용해 압축해제를 하는 것을 볼 수 있습니다. 압축해제한 후의 메모리를 덤프해서 파일로 저장하면 tmp 파일을 확인 가능합니다. 

푼 파일을 분석하다보면 0x401410 함수를 호출하는 게 보입니다. 이 루틴은 정상적으로는 갈 수 없고 직접 EIP 변경을 해주거나 패치를 해야만 도달할 수 있습니다. 이 루틴을 거치기 전에 자기 자신을 삭제하는 함수로 뛰게 되는데, 저는 그런 식으로 분기하는 루틴을 모두 NOP 처리 해주었습니다.

0x401410에서는 0x401310 함수를 부르는데 이 함수는 주어진 인자를 디코딩해서 출력해주는 함수입니다. 이 부분에서도 자기자신을 삭제하는 곳으로 뛰는 트랩이 몇몇개 있는데 그거 다 NOP 처리해주고 실행하면 문자열이 주르륵 출력됩니다. 그 중에 Flag가 섞여있습니다.


'CTF' 카테고리의 다른 글

[codegate2016] bugbug  (2) 2016.03.19
[HackIM] sandman  (0) 2016.03.03
[hitcon2015] blinkroot  (0) 2015.10.20
[Layer7 2015] Reverse Me, Easy Rerversing  (0) 2015.09.01
Codegate 2015 bookstore  (0) 2015.03.17
Posted by Mungsul
,