
디스어셈블된 코드에서 차이점과 유사점을 빠르게 찾아보세요.

Copyright 2011-2026 Google LLC.
이 저장소에는 BinDiff 소스 코드가 포함되어 있습니다. BinDiff는 디스어셈블된 코드에서 차이점과 유사점을 빠르게 찾을 수 있는 오픈소스 바이너리 파일 비교 도구입니다.
BinDiff는 바이너리 파일용 오픈소스 비교 도구로, 보안 취약점 연구자와 엔지니어가 디스어셈블된 코드에서 차이점과 유사점을 빠르게 찾을 수 있도록 지원합니다.
BinDiff를 사용하면 연구자는 공급업체가 제공한 패치에서 취약점에 대한 수정 사항을 식별하고 격리할 수 있습니다. 또한 동일한 바이너리의 여러 버전 디스어셈블리 간에 심볼과 주석을 이식하는 데 사용할 수도 있습니다. 이를 통해 시간에 따른 변경 사항을 더 쉽게 추적할 수 있고, 조직이 분석 결과를 유지하며 바이너리 분석가 간 지식 전수를 가능하게 합니다.
BinDiff 사용을 바로 시작하려면 릴리스 페이지에서 사전 빌드된 설치 패키지를 다운로드하세요.
참고: BinDiff는 별도의 디스어셈블러에 의존합니다. 기본적으로 IDA Pro, Binary Ninja 및 Ghidra를 지원하며, 디스어셈블러 페이지에서 지원되는 구성을 확인할 수 있습니다.
기존 매뉴얼의 일부가 docs/ 디렉터리에 제공됩니다.
BinDiff는 다음 구성 요소를 포함합니다:
아래 지침은 네이티브 코드와 Java 기반 구성 요소를 모두 빌드하기에 충분합니다.
더 자세한 빌드 지침은 추후 추가될 예정입니다. 여기에는 설치 패키지 빌드를 위한 준비된 Dockerfile과 스크립트가 포함됩니다.
BinDiff는 네이티브 C++ 코드로 구성된 구성 요소의 빌드 파일을 생성하기 위해 CMake를 사용합니다.
다음 빌드 종속성이 필요합니다:
일반적인 빌드 단계는 Windows, Linux, macOS에서 동일합니다. 다음은 Linux용 명령입니다.
다음으로 빌드 디렉터리를 구성하고 빌드 파일을 생성합니다:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
마지막으로 실제 빌드를 실행합니다. 바이너리는 build/에 배치됩니다:
cmake --build build --config Release
(cd build; ctest --build-config Release --output-on-failure)
cmake --install build --config Release
IDA 없이 빌드하려면 위 구성 단계를 다음과 같이 변경하기만 하면 됩니다.
cmake -S . -B build/out -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DBINEXPORT_ENABLE_IDAPRO=OFF
Java 기반 GUI를 빌드하려면 그래프 표시 및 레이아웃을 위한 상용 타사 그래프 시각화 라이브러리인 yFiles가 필요합니다. 이 라이브러리는 매우 강력하며 쉽게 대체할 수 없습니다.
빌드를 위해 BinDiff는 Gradle 6.x와 Java 11 LTS를 사용합니다. 설치 방법은 설치 가이드를 참조하세요.
yFiles 라이선스 보유자라면 YFILES_DIR 환경 변수를 yFiles y.jar 및 ysvg.jar가 포함된 디렉터리로 설정하세요.
참고: BinDiff는 여전히 이전 버전인 yFiles 2.x 분기를 사용합니다.
그런 다음 Gradle을 호출하여 외부 종속성을 다운로드하고 빌드합니다:
Windows:
set YFILES_DIR=<path\to\yfiles_2.17>
cd java
gradle shadowJar
Linux 또는 macOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
이후 java 하위 디렉터리의 ui/build/libs 디렉터리에는 표준 java -jar 명령으로 실행할 수 있는 자체 포함 bindiff-ui-all.jar 아티팩트가 포함됩니다.
BinDiff의 일반적인 아이디어를 설명하는 원본 논문:
동일한 문제 영역의 다른 도구:
BinDiff를 사용하는 프로젝트:
BinDiff는 Apache 라이선스 조건에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE를 참조하세요.
기여하려면 풀 리퀘스트를 보내기 전에 CONTRIBUTING.md를 읽어주세요. 버그를 신고하거나 기능 요청을 제출할 수도 있습니다.