[Fuzzer] SeulFuzzer (for Themida)

Posted by push0ebp
2015. 6. 27. 16:52 Project

한 프로그램을 퍼징하려는데 



이런.. 나쁜 더미다 ㅠㅠ pydbg도 걸리고 cdb도 걸리고 attach 해도 프로세스가 죽는다.

window debug api 이용한 디버깅은 모두 탐지하는 것 같다.

그래서 살펴봤다.

콜스택을 보니 0056BE63주소에서 호출하고 있어 따라가봤다.


우웩... fucking themida..


이렇게 isDebuggerPresent API 를 손보면 되긴 하지만 난 멍청해서 퍼저를 수정할줄 모른다 ㅠㅠ

주변분들도 자신만의 퍼저를 하나쯤은 만드셨던데.. 그래서 나도 이참에 그냥 하나 만들어봤다ㅋ



처음엔 이름을 UpFuzzer(엎퍼져)로 지었는데 슬픈일이 많아서 '슬퍼져'로 바꿨다. (아! 슬프다!)


바이너리는 총 3(+1)개

py  ------------------- controller(manager)
exe ------------------- executor
dll  ------------------- debugger & handler & crash reporter

+

radamsa ------------- mutator


py  - 전체적인 흐름을 관리하고 컨트롤하는 매니저 역할 

mutate 된 파일을 넣고 실행, timeout시 프로세스를 종료,  crash 발생시 mutated 파일이나 crash 로그 파일을 정리. 등.

exe - 타겟 프로그램을 실행하고 dll inejection 을 수행한다.

dll - Crash가 발생할 경우 크래시 정보나 레지스터등 로그파일을 저장한다. minidumpwritedump api를 통해 덤프파일 생성이 쉽다.



Themida 2.3.2.0로 타겟 프로그램을 패킹했다.


크래시 파일은 이렇게 저장된다.

disasm 라이브러리를 사용하여 이름에 인스트럭션을 넣었다.


???.... exception이 펑펑 터졌다. 보아하니 더미다 코드에서 발생하는 예외다. delay를 주어서 더미다 initialize 가 끝날때 dll 을 인젝션해야한다. (-d 옵션)


펑펑


그럼 이렇게 깔끔하게 나온다 ㅎ


파일은 "파일이름_퍼징 카운트(몇 번째 퍼징인지).확장자" 형식으로 저장했다. 여기서 카운트는 3이다.





CRASH INFO

REGISTERS

INSTRUCTION

STACK DUMP

아직 구현하지 못한게 많다.


call stack이라던가
module list라던가


이런거 라던가

시험끝나면 짜야지..



[시연 영상]



바빠서 포스팅을 늦게했네요. (근데 다음주가 기말고사인데 바쁜게 맞나?)

디버거가 궁금하신 분은 다음 글을 참조해주세요.

[Fuzzer] Debugger with VEH


아직 Fuzzer를 많이 접해보지 못했고 처음이라 많이 서툴고 부족합니다.

지적, 조언 해주시면 감사하겠습니다.




'Project' 카테고리의 다른 글

[Django] Shodan 커스터마이징(?)  (0) 2015.11.30
[Fuzzer] Debugger with VEH for Themida  (1) 2015.06.27