책을 읽다보니 내가 몰랐던 도구들이 많이 소개되어 있어 정리해 둡니다.
>> 출처 <<
<실전 바이너리 분석> 데니스 앤드리스, 에이콘출판사
부록C 바이너리 분석 도구 추천
책에 나온 내용을 요약하고 일부는 추가확인해 정리함
-----
◆ 디스어셈블 도구 ◆
▶ IDA Pro (윈도우, 리눅스, 맥OS)
www.hex-rays.com
명실상부한 최고의 도구이자 실무에서 표준처럼 사용되는 재귀적 디스어셈블 도구다.
파이썬이나 IDC같은 스크립트 API를 제공하며 디컴파일 도구도 제공한다.
현재 구버전은 커뮤니티 버전으로 무료 배포되고 있다.
무료버전은 x86-64 아키텍처만 지원되며 디컴파일 기능은 포함되어 있지 않다.
▶ Hopper (리눅스, 맥OS)
www.hopperapp.com
IDA Pro를 모델로 단순화하여 개발 중인 도구로 상대적으로 저렴하지만 아직 개발이 진행형이다.
▶ ODA (모든 플랫폼)
http://onlinedisassembler.com
온라인 디스어셈블 도구이며 무료로 제공되고 있다.
다양한 플랫폼에 대해 디스어셈블이 가능하고 제귀적 디스어셈블을 진행한다.
바이너리를 업로드하거나 바이트 코드를 콘솔에 입력하는 방식으로 사용가능하다.
▶ Binary Ninja (윈도우, 리눅스, 맥OS)
http://binary.ninja
책에서는 기대되는 신흥강자로 표현되어 있다.
인터랙티브 방식의 재귀적 디스어셈블을 지원하고 있으며 다수의 아키텍처 환경을 제공한다.
C/C++ 또는 파이썬 언어로 스크립팅이 가능하다.
향후 디컴파일러 기능을 추가할 예정이다.
무료는 아니지만 체험판을 제공하고 있으며 개인이 사용할때는 비교적 저렴한 편이다.
▶ Relyze (윈도우)
www.relyze.com
인터랙티브한 재귀적 디스어셉블 도구다.
바이너리 차분 분석 기능을 제공하는 것이 강점이며 Ruby 언어로 스크립팅을 지원한다.
상용이지만 IDA pro에 비해 저렴하다.
▶ Medusa (윈도우, 리눅스)
https://github.com/wisk/medusa
인터렉티브 환경을 제공하는 재귀적 디스어셈블 도구이다.
파이썬 스크립트 기능도 제공하고 있으며 오픈소스에 무료라는 것이 가장 큰 강점이다.
단, 2014년이 마지막 Release 이다.
▶ radare (윈동, 리눅스, 맥OS)
www.radare.org
커맨드라인 기반의 역공학 프레임워크로 여러 개의 도구들의 모음집이다.
모든 도구들은 무료이며 오픈소스이다.
다양한 도구들이 개발되어 있으며 기본적으로는 커맨드라인 기반이 맞지만
아래 사이트에서 iaito를 분기하여 인터랙티브한 개발 환경을 따로 제공하고 있다.
https://cutter.re/
▶ objdump (리눅스)
https://www.gnu.org/software/binutils/
이 도구는 가장 널리 알려진 선형 디스어셈블 도구이며 무료에 오픈소스이다.
GNU의 binutils 내부에 GNU 버전이 포함되어 있으며 모든 종류의 리눅스 배포판에 기본으로 탑재되어 있다.
====================================
◆ 디버거 ◆
▶ gdb (리눅스)
GNU 디버거로 리눅스 표준 디버거라서 추가 설명은 생략
▶OllyDbg (윈도우)
https://www.ollydbg.de/
윈도우 환경에서 가장 인기있는 디버거로 플러그인을 통해 다양한 확장이 가능하다는 장점이 있다.
무료이지만 오픈소스는 아니다.
현재시점에서 2014년 2월이 마지막 업데이트다.
▶WinDbg (윈도우)
마이크로소프트가 제공하는 윈도우용 디버거로 유저모드와 커널모드 코드에 대해 디버깅을 할 수 있으며 크래시덤프에 대한 분석이 가능하다.
▶Bochs (윈도우, 리눅스, 맥OS)
http://bochs.sourceforge.net
대부분의 플랫폼에서 실행되는 휴대용 PC 에뮬레이터이며 에뮬레이트된 코드 디버깅에도 사용할 수 있다.
오픈소스이며 GNU LGPL에 따라 배포된다.
====================================
◆ 디스어셈블 프레임워크 ◆
▶ Capstone (윈도우, 리눅스, 맥OS)
https://www.capstone-engine.org/
캡스톤은 자체로 사용할 수 있는 도구는 아니며 디스어셈블 도구를 구현하고자 할 때 엔진 기능으로써 적용할 수 있다.
무료이고 오픈소스이다.
성능이 좋고 다양한 아키텍처 환경에 대한 API를 제공한다.
(현 시점 사이트에 표시된 지원 아키텍처 : Arm, Arm64 (Armv8), BPF, Ethereum Virtual Machine, M68K, M680X, Mips, MOS65XX, PowerPC, RISCV, Sparc, SystemZ, TMS320C64X, Web Assembly, XCore & X86 (include X86_64))
C/C++, Ruby, Python, Lua 등 여러 프로그래밍 언어로 연동할 수 있다.
최근까지 지속적인 기능 개선이 있었으며 이 엔진을 확장해 사업을 하는 기업들의 후원을 받고 있어 지속적인 성장 가능성이 높다.
▶ distorm3 (윈도우, 리눅스, 맥OS)
https://github.com/gdabah/distorm
x86 아키텍처 코드에 대한 오픈 소스 디스어셈블 API를 제공하는 프레임워크다.
빠른 처리 속도를 자랑하며 C, Ruby, Python 등의 언어를 지원한다.
최근까지 지속적인 업데이트와 릴리즈가 제공되고 있다.
▶ udis86 (리눅스, 맥OS)
https://github.com/vmt/udis86
x86코드에 대한 디스어셈블 라이브러리로 쉽고 간결하며 최소한의 기능만 제공한다.
오픈 소스이며 잘 정리된 문서를 제공한다.
C언어를 사용해 디스어셈블 도구를 제작하고 싶을 때 사용할 수 있다.
현 시점에서 2013년이 마지막 릴리즈배포일이다.
====================================
◆ 바이너리 분석 프레임워크 ◆
▶ angr (윈도우, 리눅스, 맥OS)
https://angr.io/
angr은 파이썬 기반의 역공학 플랫폼이다.
직접 바이너리 분석 도구를 개발하고자 할 때 API를 통해 적용할 수 있다.
백워드 슬라이싱이나 기호 실행과 같은 심화적인 기능을 제공한다.
아직 연구가 진행 중인 플랫폼이지만 개발이 활발하게 진척 중이며, 문서화 역시 잘되어 있는 편이다.
(2021년 6월 릴리즈 버전이 존재한다.)
무료이며 오픈소스이다.
https://github.com/angr/angr
▶ Pin (윈도우, 리눅스, 맥OS)
www.intel.com/software/pintool/
같은 링크지만 리다이렉트 되길래 최신 링크도 같이 걸어둔다.
https://software.intel.com/content/www/us/en/develop/articles/pin-a-dynamic-binary-instrumentation-tool.html
Pin은 동적 바이너리 계측 엔진으로 실행 중인 바이너리에 대해 코드를 추가하거나 수정하기 위한 도구를 만들 때 활용할 수 있다.
무료이지만 오픈소스는 아니다.
인텔(Intel)에서 개발했으며, x86을 포함한 인텔 계열의 CPU에 대해서만 동작한다.
▶ Dyninst (윈도우, 리눅스)
https://www.dyninst.org/
Dyninst는 동적 바이너리 계측을 위한 API를 제공한다.
Pin보다는 디스어셈블 기능에만 초점을 맞추고 있다.
무료이고 오픈소스이다.
Pin에 비해 연구 목적 성격이 강하다.
▶ Unicorn (윈도우, 리눅스, 맥OS)
https://www.unicorn-engine.org/
다양한 플랫폼 및 아키텍처를 지원하기 위한 경량화된 CPU 에뮬레이터다.
Capstone을 개발한 사람들이 함께 관리하고 있으며, C, Python 등의 프로그래밍 언어로 연동할 수 있다.
유니콘은 그 자체로 사용하는 디스어셈블 도구라기보다는 에뮬레이팅 기반의 분석 도구를 구현할 때 사용하기 위한 프레임워크다.
▶ libdft (리눅스)
https://www.cs.columbia.edu/~vpk/research/libdft/
무료 오염 분석 라이브러리이며 오픈소스다.
빠른 동작과 쉬운 사용성을 위해 쉐도우 메모리의 바이트 단위를 1개 혹은 8개의 두 가지 모드를 제공한다.
▶ Triton (윈도우, 리눅스, 맥OS)
https://triton.quarkslab.com/
Triton은 동적 바이너리 분석 프레임워크로 기호 실행 및 오염 분석 등을 추가적인 기능으로 제공한다.
무료이며 오픈소스이다.
2020년 4월 0.8.1 버전까지 릴리즈되어 있다.
https://github.com/JonathanSalwan/Triton/
▶ B2R2 (윈도우, 리눅스, 맥OS)
https://github.com/B2R2-org/B2R2
B2R2는 바이너리 분석에 사용되는 다양한 알고리즘, 함수, 도구들의 결합체이며, F#언어로 개발되어있다.
.Net Core기반으로 특정 운영체제에 구애받지 않고 실행할 수 있다.
속도가 빠르고 CLI가 지원되는 모든 언어에 대해 API연동이 가능하다.
ROP 체인 컴파일, 제어 흐름 그래프 작성 등의 기능을 제공한다.
2020년 0.40 버전까지 릴리즈되어있다.