『The IDA Pro Book (2nd Edition)』을 쓰는 일은 내게 굉장히 도전이 되는 일이었다. IDA Pro는 사람들이 언급한 것보다 매우 복잡한 소프트웨어였고, 한 권의 책에 어느 정도의 내용을 담을 것인지 결정하는 어려운 문제도 쉬운 축에 속할 정도였으니…… IDA의 새 버전이 나와도 기존에 출간된 초판 내용으로도 충분했으며, 그렇지 않더라도 보통 여러 군데서 정보를 얻을 수 있어서 크게 문제가 되지 않았다.
IDA 5.3 버전의 내용을 다룬 초판을 출간한 후에 IDA는 계속해서 새로운 버전이 출시됐다. Qt 기반 그래프 사용자 인터페이스를 도입한 IDA 6.0 버전을 봤을 때 나는 책 내용을 업데이트해야 할 필요성을 느꼈다. 물론 여러 신규 기능을 추가해야 할 필요도 있었다. 책을 집필하는 도중 6.1 버전이 나오면서 책의 집필 방향에 대해 또 고민했다.
개정판의 목적은 IDA를 다뤄보려는 사람들을 위한 가이드를 제공하며 리버스 엔지니어링에 대한 관심을 높이는 데 있다. 리버스 엔지니어링에 관심 있는 사람이라면 프로그램 개발에 아주 능숙해야 한다고 강조할 생각은 없다. 사실, 코드를 사랑하고 어쩌면 코드를 먹기 좋아하고, 코드와 같이 잠자고, 코드와 함께 숨 쉬는 정도면 되지 않을까 생각한다. 프로그래밍하는 데 겁을 먹는 사람에게 리버스 엔지니어링은 약간 맞지 않을 수도 있다. 리버스 엔지니어링은 다른 사람이 짜놓은 코드의 부분 부분을 보는 것이기 때문에 프로그래밍과는 관련이 없다고 말하는 사람도 있을지 모른다. 하지만 스크립트를 개발하고 작업을 수월하게 하고자 플러그인을 개발하지 않는다면 효과적인 리버스 엔지니어링은 어려울 것이다. 내 경우에는 프로그래밍과 리버스 엔지니어링은 마치 일요판 「뉴욕타임스」에 실린 단어 맞추기 퍼즐과 같은 어려운 과제였다. 물론 재미는 있었다.
이 책의 또 다른 목적은, 초판의 전체적인 골격을 유지하면서 적합한 위치에 재미있는 내용을 추가로 넣는 것이다. 이 책을 읽는 방법은 여러 가지가 있다. 리버스 엔지니어링에 대한 배경 지식이 부족하다면 1, 2장에서부터 리버스 엔지니어링에 대한 기본 지식과 디스어셈블러에 대해 살펴보기를 바란다. IDA를 많이 사용해 보지 않았다면 IDA 설치 기본을 다룬 3장, IDA 시작과 분석할 파일을 로딩하는 방법을 다룬 4장, 5장부터 7장에 나온 IDA 사용자 인터페이스와 기본 기능을 살펴보길 추천한다.
기본적으로 IDA를 다룰 수 있다면, 복합 데이터 구조(C++의 클래스 포함)를 다룬 8장, 그리고 IDA의 상호 참조와 IDA 그래프 기반 디스플레이를 다룬 9장을 살펴보길 바란다. 10장에서 다룬 비윈도우 기반 플랫폼(리눅스, OS X)에서 IDA를 구동하는 다양한 방식도 살펴보기 바란다.
고급 IDA 사용자라면 11~14장부터 시작해도 좋다. 이 장들에서는 IDA의 고급 기능과 연동하는 툴을 다룬다. IDA의 환경설정은 11장에서 다루고, 12장은 IDA의 FLIRT/FLAIR 기술과 관련 툴, 그리고 애플리케이션 코드에서 라이브러리 코드를 구별하기 위한 시그니처의 활용 방법과 개발에 사용된 툴을 다룬다. 13장에서는 IDA의 타입 라이브러리를 설명하고 확장하는 방법을 다룬다. 14장의 내용은 IDA로 바이너리 파일을 패치할 때 생길 수 있는 궁금한 사항에 대한 답이 될 것이다.
IDA는 발군의 툴일 뿐만 아니라 확장성도 뛰어나다. 수년 동안 개발됐기 때문에 사용자들에게 유용하고 재미난 기능도 많이 볼 수 있다. IDA의 확장 기능은 15장에서 19장까지 다룬다. 여기에는 스크립트 기능과 IDAPython, IDA 프로그래밍 API(SDK로 제공)로 반복적인 작업을 쉽게 할 수 있는 방법도 언급한다. 16장은 SDK 개요, 17에서 19장까지는 플러그인, 파일 로더, 프로세서 모듈을 다룬다.
IDA의 여타 풍부한 기능은 20장에서 23장까지 하나씩 다룬다. 실제적인 예를 들면서 리버스 엔지니어링을 한다. 20장에서는 컴파일러들이 어떻게 다른지 설명한다. IDA로 난독화 코드를 어떻게 분석하는지 21장에서 멀웨어 분석 방법을 다루고, 22장에서는 취약점 분석과 프로세스 분석도 다룬다. 23장에서는 수년간 개발돼온 IDA의 확장 기능(플러그인)을 다룬다.
24~26장은 IDA의 내장 디버그 기능을 다룬다. 24장은 디버거의 기본 기능을 다루며, 25장은 디버거로 난독화 코드 분석, 현존하는 안티 디버깅 기능을 다루는 방법 등 어려운 과제에 도전해본다. 26장은 IDA의 원격 디버깅 기능과 통합된 디버깅 플랫폼으로 Bochs 에뮬레이터 사용 방법을 다룬다.
이 책을 쓸 시점에 IDA는 6.1 버전이 최신 버전이었기 때문에 6.1까지 다뤘다. 헥스레이즈(Hex-Rays) 사는 IDA의 구 버전을 무료로 제공한다. IDA의 무료 버전은 IDA 5.0의 기능을 축소한 것이다. 책에서 다룬 대부분의 기능은 무료 버전에서도 쓸 수 있다. 부록 A에서는 무료 버전과 상용 버전의 차이도 언급한다.
마지막으로 IDA 스크립트에서 컴파일 플러그인을 만들 정도로 단계를 밟는 편이 좋다. 부록 B에서는 IDC 함수와 대응되는 SDK를 다룬다. IDC와 SDK 함수(물론 이름은 다른 경우가 많지만)가 일대일로 대응되는 경우도 있지만, SDK에서 여러 개를 호출해야 하는 IDC 함수도 있다. 부록 B는 IDC에서 할 수 있는 작업을 플러그인에서는 어떻게 처리하는지에 대한 답이 될 것이다. 부록 B의 정보는 IDA의 커널을 리버스 엔지니어링해 얻은 정보이고, 이에 대해서는 IDA의 라이선스 정책에 부합된 방법임을 밝힌다.
책에서는 코드 중에서 중요한 부분에 집중하고자 긴 코드를 모두 다루지는 않았다. 방대한 예제 코드와 예제를 만드는 데 사용한 바이너리 파일은 책의 공식 웹사이트 http://www.idabook.com에 있고, 책에서 다루지 않은 풍부한 예제를 만날 수 있다. 또 책에서 언급한 참조 정보(보통 각주에 담은 URL 링크 정보 등)보다 더 많은 참조 정보를 얻을 수 있다.
에이콘출판사의 도서정보 페이지 http://www.acornpub.co.kr/book/ida-pro에서도 예제 코드와 바이너리 파일을 다운로드할 수 있다.---저자 서문 중에서
프로그램이 발전함에 따라 리버스 엔지니어링에 대한 관심도 높아지고, “이 프로그램은 내부적으로 어떻게 돼 있을까”라는 관심을 갖고 분석을 시도하려는 사람 또한 많아지고 있습니다. 그리고 무엇보다도 보안 시장의 발달과 멀웨어 대응을 위해 리버스 엔지니어링의 필요성도 높아지고 있습니다. 리버스 엔지니어링을 하려면 운영체제에 대한 지식, 개발 언어에 대한 지식, OPCode에 대한 지식 등이 필요합니다. 하지만 지식과 더불어 이를 활용할 수 있는 툴도 매우 중요합니다. IDA Pro는 리버스 엔지니어링 툴로서 많은 도움을 줄 수 있습니다. IDA Pro는 기본적으로 어셈블리 코드를 보여줄 뿐 아니라, 사용된 컴파일러 분석, 라이브러리 분석까지 가능하게 해줍니다. 더 나아가 사용자가 플러그인을 개발할 수 있어 좀 더 수월하게 리버스 엔지니어링을 할 수 있습니다.
『The IDA Pro Book (2nd Edition) 한국어판』은 IDA Pro에 대한 훌륭한 안내서입니다. 이 책을 통해 IDA Pro의 사용법이나 리버스 엔지니어링에 필요한 지식을 빠르게 얻을 수 있습니다. IDA Pro에 대한 지식과 기능을 쉽고 빠르게 설명해주며, 문제 해결을 위한 접근법을 제시해줍니다. 리버스 엔지니어링을 시작하거나 문제를 해결하고자 하는 사람들에게 이 책은 많은 도움이 될 것입니다.
---옮긴이의 말 중에서