'패킹'에 해당되는 글 1건

  1. 2010.03.18 Ollydump와 ImportREC를 이용한 리빌딩
0x03 Reversing/Reversing2010.03.18 21:38

1. 개 요
개발자들은 프로그램의 용량 축소와 디어셈블 방지를 위하여 패킹(Packing)을 하게 된다. 패킹된 프로그램은 언패킹 툴을 이용하여 언패킹(Unpacking)하거나  디버거를 이용하여 수동으로 프로그램의 OEP(Original Entry Point)를 찾아서 메모리 덤프를 추출하게 된다.

하지만 메모리 상의 실행 파일 코드를 추출하였다고 하더라도 원래의 실행 파일에 저장되어 있는 IAT(Import Address Table)는 복원이 되지 않기 때문에 IAT를 리빌드 해주는 툴을 사용하여 리빌딩을 하게 된다.

2. 사용 툴
여기서는 Ollydbg의 Ollydump 플로그인을 이용하여 메모리 덤프를 추출한 뒤, ImpRec 툴을 이용하여 리빌딩을 진행하는 과정을 설명한다. 모두 http://www.tuts4you.com에서 쉽게 구할 수 있다.

3. 바이너리 분석
샘플 프로그램의 바이너리 분석을 통해 패킹 여부와 어떤 종류로 패킹이 되어 있는지 어떤 프로그램을 이용하여 작성한 것인지 살펴보자. 일단 PEiD를 이용하여 샘플 프로그램을 로딩해 보자.

UPX를 이용하여 패킹이 되어 있는 것을 알 수 있다. upx.sf.net에서 구할 수 있는 upx 명령어를 이용하여 언패킹을 시도해 보면 아래와 같이 exception이 발생하는 것을 알 수 있다. 일반적인 upx가 아닌 변형된 방법으로 패킹된 것을 알 수 있다.

4. 수동 언패킹
upx 프로그램을 이용하여 언패킹이 되지 않으므로 Ollydbg를 이용하여 수동으로 언패킹을 진행해보자. 일단 Ollydbg를 이용하여 프로그램을 로딩한 뒤 스크롤을 내려보면 "DB 00"이 연속적으로 보이는 부분을 찾을 수 있다. 그 바로 윗부분에 JMP 구문이 있는 것을 알 수 있다.


JMP 구문에서 분기하는 곳의 주소가 실제 OEP가 있는 곳으로 JMP 구문에 BP(Break Point)를 설정하고 프로그램을 실행한 뒤 Step-Over를 한 번 실행하면 OEP로 이동할 수 있다. OEP 주소 456840을 기억해 둔다.

OllyDump를 이용하여 메모리 덤프를 실행한다. Plugins -> OllyDump -> Dump debugged process를 이용하여 OllyDump 플러그인을 실행한다. Ollydump에서도 "Rebuild Import"를 체크하게 되면 리빌딩 과정까지 진행되지만 ImpRec 사용법을 연습해 볼 겸 해제한 뒤 Dump를 눌러 저장한다.

5. ImpRec를 이용한 리빌딩
ImpRec를 실행한 후 언패킹 한 프로그램을 실행한 뒤 "Attach to an Active Process"에서 선택해 준다. "AutoSearch" 버튼을 누르면 자동으로 IAT 정보를 로딩하는 것을 볼 수 있다. 이 후 "Get Imports"를 눌러주면 리빌딩이 진행된다.


Imported Functions Found에 import할 목록들이 나타나게 되고 메모리 상에서 리빌딩된 프로그램을 저장하기 위해서 "Fix Dump" 버튼을 클릭하여 샘플 프로그램을 선택해 준다.

6. 결 론
패킹과 리빌딩! 깊게 들어갈 수록 어렵지만 재미있는 분야인 듯 하다. 대부분의 악성코드들은 기발한 패킹 방법으로 언패커들을 더욱 괴롭힌다고 한다. 다양한 패킹에 대한 경험과 언패킹과 리빌딩을 통한 코드 분석의 기반을 만드는 것 또한 무엇보다 중요한 듯 하다.

출처 : 리버스엔지니어링 역분석 구조와 원리 / 3. 11 리빌더
                                                                +---------------------------------+
                                                                | Infinite Flow..                              |
                                                                | mail : geekspark@gmail.com         |
                                                                | Blog : http://sinun.tistory.com       |
                                                                | CISSP                                        |
                                                                +----------------------------------+

저작자 표시 비영리 변경 금지
신고
Posted by By. PHR34K

티스토리 툴바