Armadillo's Debug Blocker & OllyDbg Plug-in (DbgBreaker)



PE Packer 중 Armadillo의 Debug Blocker옵션을 적용하면 아래[그림 -1 ]와 같이 2개의 프로세스로 실행됩니다.


[그림 - 1]

이는 PID 8348을 가진 프로세스가 PID 11384 프로세스를 디버그 모드로 실행시켰기 때문이며,
결국 지금 구조에서는 PID 8348 프로세스가 Debugger,
PID 11384 프로세스가 Debuggee인 상태입니다.

해당 프로그램의 실제 메인 코드는 PID 11384 프로세스가 가지고 있으며, 이를 디버깅하기 위해서는
PID 11384 프로세스를 Attach해야 하지만, PID 8348 프로세스에 의해 이미 디버깅 상태이기 때문에
Attach를 할 수 없습니다.

Debug Blocker 옵션이 적용되어 Packing된 프로그램을 분석해 보신 분들은 이미 PID 8348 프로세스를
떼어내는 방법을 알고 계실 것 입니다.

PID 8348 프로세스의 디버깅을 멈추게 한 뒤 종료 시키는 방법이지요.
디버거를 Detach하는 것과 같다고 생각하시면 될 것 같습니다.

우선 알려진 방법은 간단히 다음[리스트 - 1] 과 같은 순서를 통하여 PID 8348 프로세스를 떼어내지요.

1. PID 8348 프로세스를 디버거로 Attach한다.
2. WaitForDebugEvent에 Breakpoint를 건다.
3. DebugActiveProcessStop에 PID 11384를 인자로 주어 강제 호출한다.
4. PID 8348 프로세스를 종료한다.
5. PID 11384 프로세스만 남게된다.
[리스트 - 1]

이미 [리스트 - 1]에 설명한 것 처럼 Debugger 역할을 하는 프로세스를 떼어버릴 수 있지만,
때에 따라서는 여러번 실행하며 분석할 일도 있고 실행할 때 마다 [리스트 - 1]의 작업을 해야 하니
귀찮기도 하더군요 ㅠ_ㅠ

아무튼 이런 저런 이유와 OllyDbg Plug-in도 한번 만들어 볼까 하는 마음에 겸사겸사 뚝딱거려 보았습니다.
다만, Anti-Debugging 옵션들에 따라서 기본 OllyDbg만으로 Attach가 쉽게 되지 않을 수도 있습니다.
Anti-Anti Debugging 플러그인들을 함께 사용하세요 ㅎ

DbgBreaker Plug-in 1.00
DbgBreaker_1.00.zip

Armadillo's Debug Blocker가 적용된 샘플
UnPackMe_Armadillo 4.66.b.zip
출처 : http://www.tuts4you.com

사용법은 아주 쉽습니다.
해당 플러그인 파일을 압축해제하여 자신의 OllyDbg Plugin 폴더에 넣고 실행합니다.
그리고는 분석 대상의 Debugger 프로세스를 Attach한 뒤에 Run 하시고 해당 Plug-in 메뉴에
Debug Break를 선택하시면 됩니다. (Debug Break먼저 하시고 Run 하셔도 됩니다.)
성공적으로 Debugging을 중지 시켰다면 이제 종료시키세요.
그럼 Debuggee상태였던 프로세스가 Debugger를 벗어 던진채로 둥실둥실 떠있을 것 입니다. ^-^

ps. 아래와 같은 Armadillo Process Detach라는 프로그램도 있네요.
이것은 Armadillo의 Debug-Blocker기능을 실행시점에 무효화시켜 Debugger 프로세스 없이 실행하도록
해주는 프로그램입니다.
Armadillo로 패킹된 파일이 아니면 지원을 안하네요. 참고하시라고 올려드립니다.
최신버전은 아닌 것 같네요 ^-^;;

Armadillo Process Detach
ArmaDetach.v1.2-RES-tool.zip

- ArmaDetach.v1.2-RES-tool.zip는 제대로된 출처를 모르겠네요 ;;;;

ps. 예전에 소개해 드렸던 PESpin이라는 패커도 Debug Blocker 옵션을 제공합니다.
해당 플러그 인으로 테스트해 본 바로는 패킹된 파일에 따라 되는 것도 있고 안 되는 것도 있네요. -_-;;;
연구가 많이 필요하군요 ...

+ Recent posts