디버거 혁명: Immunity Debugger

@codemaru · November 19, 2007 · 6 min read

다소 낚시성 제목일 수도 있겠습니다. 지난 주에 window31님 블로그를 보다가 POC란 행사에 대해서 알게 되었습니다. '그런것도 모르고 보안 업체에서 밥벌어 먹다뉘'라고 말씀하신다면 할말이 없습니다. 하여튼 관련 소식을 꽤나 자세하게 적어주셔서 어떤 강의 내용이 진행되었는지 개략적으로나마 알 수 있게 되었습니다.

첫 날 후기를 보면 Immunity Debugger라는게 나옵니다. 또한 그 내용에 window31님이 가장 관심을 가졌다니 더욱 관심이 가더군요. 그런데 전 그 글을 읽기 전까지 Immunity Debugger가 뭔지도 몰랐습니다. 점점 부끄러워지는군요. ㅠㅠ 그래서 구글을 검색해 봤습니다. 그랬더니 그 디버거를 만든 회사 홈페이지가 뜨더군요. 아래 페이지에서 디버거의 소개를 보실 수 있고 다운로드도 받을 수 있습니다. 무료입니다.

http://www.immunityinc.com/products-immdbg.shtml

소개글도 영어고, 화면은 대충보니 ollydbg랑 비슷해 보입니다. 일단 다운로드를 받고 설치를 하고 실행을 시켰죠. 그리곤 실행 파일 하나를 올려놓고 디버거를 수행해 봤습니다. 완전 ollydbg 붕어빵입니다. UI며 커맨드며, 뜨는 메뉴까지, 헐... 그리곤 왜 똑같은 놈을 만들었을까란 생각을 잠시했습니다. 물론 ollydbg보단 뭔가 정돈된 느낌이 들긴 했습니다. 툴바 아이콘이 조금 그랬습니다. 도움말을 열어봤습니다. 그것도 ollydbg 붕어빵이더군요. 디버거를 끄고는 회사 홈페이지를 좀 탐험했습니다. "August 10, 2007: Damian Gomez - Intelligent Debugging"이런 좋은 문서가 있더군요. 물론 읽지는 않고 쭉쭉 넘겼습니다. 그냥 대충 글에서 보이는 느낌이 파이썬으로 뭔가를 할 수 있다. 이런 것을 전하고 있다는 것을 알 수 있었습니다.

그 느낌은 맞았습니다. 그것도 정말 토할것 같은 기능이더군요. 보통 IsDebuggerPresent 함수로 디버깅 중이면 프로그램을 종료하거나 익셉션을 발생 시키는 놈들을 디버깅 할 때, IsDebuggerPresent 함수를 패치하거나 그 함수를 호출하는 부분을 패치시키고 디버깅을 합니다. 후훗. 그걸 Immunity Debugger로 어떻게 하는지 한 번 살펴볼까요? 파이썬입니다. 아래 코드가 그것이죠.

import immlib  
def main(args):  
    imm = immlib.Debugger()  
    idp = imm.getAddress("kernel32.IsDebuggerPresent")  
    imm.writeMemory(idp, imm.Assemble("xor eax, eax\n ret"))

저걸 실행하는 방법은 간단합니다. 위의 코드를 Immunity Debugger가 설치된 폴더에 있는 PyCommands 폴더에 passidp.py로 저장합니다. 그리고 Immunity Debugger에서 실행 파일을 열고 밑에 커맨드 창에 !passidp라고 치면 IsDebuggerPresent 함수가 무력화 됩니다.

정말 디버깅이 아트가 되는 순간이 아니겠습니까? 이럴때는 정말 마음껏 토해줘야 합니다. 현기증 날 정도로 아찔하더군요. "어떻게 저 따위로 돌아가게 만들어 놨을까? 파이썬으로 저런 짓을 할 생각을 했을까?"란 생각을 한참을 했습니다. 그리곤 결론을 내렸습니다. 걔네는 천재임에 틀림없다고 말이죠. 적어도 저에게는 그랬습니다.

그들의 참신함은 거기가 끝이 아닙니다. 메뉴를 보면 마지막 풀다운 메뉴가 Jobs 입니다. 기부를 어떻게 하는지 사람을 뽑고 있는지, 인턴쉽 기회가 있는지에 대한 메뉴더군요. 아마 이 툴을 써본 많은 디버거들에게 꼭 들어가고 싶은 회사로 찜하지 않을까하는 생각을 해봤습니다. 물론 요즘 이스트소프트도 이런 식의 구인 광고를 많이 하더군요.

이 글을 읽고 난다면 아마 느끼실 겁니다. 아, 파이썬 배워야 겠군나. 그렇습니다. 파이썬은 이제 선택 언어가 아니라 필수 언어가 되었습니다. 파이썬을 아는 개발자, 그렇지 않은 개발자로 나뉠지도 모르겠다는 생각을 해봅니다. 파이썬을 배우고 싶으시다면 아래 튜토리얼을 참고하세요. 왠만한 파이썬 책보다 괜찮은 것 같습니다. 사실 책입니다. ㅋ

http://www.diveintopython.org/toc/index.html

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중