저작권 2011-2024 Google LLC.
이 저장소에는 BinDiff 소스 코드가 포함되어 있습니다. BinDiff는 디스어셈블된 코드에서 차이점과 유사점을 빠르게 찾을 수 있는 바이너리 파일용 오픈 소스 비교 도구입니다.
BinDiff는 취약점 연구원과 엔지니어가 디스어셈블된 코드에서 차이점과 유사점을 빠르게 찾을 수 있도록 지원하는 바이너리 파일용 오픈 소스 비교 도구입니다.
BinDiff를 사용하면 연구원은 공급업체가 제공한 패치의 취약점에 대한 수정 사항을 식별하고 격리할 수 있습니다. 또한 동일한 바이너리의 여러 버전의 디스어셈블리 간에 기호와 주석을 이식하는 데 사용할 수도 있습니다. 이를 통해 시간 경과에 따른 변경 사항을 더 쉽게 추적할 수 있고 조직이 분석 결과를 유지할 수 있으며 바이너리 분석가 간에 지식을 전달할 수 있습니다.
BinDiff 사용을 시작하려면 릴리스 페이지에서 사전 구축된 설치 패키지를 다운로드하세요.
참고: BinDiff는 별도의 디스어셈블러를 사용합니다. 기본적으로 IDA Pro, Binary Ninja 및 Ghidra에 대한 지원이 함께 제공됩니다. 디스어셈블러 페이지에는 지원되는 구성이 나열되어 있습니다.
기존 매뉴얼의 하위 세트는 docs/
디렉토리에서 사용할 수 있습니다.
BinDiff에는 다음 구성 요소가 포함되어 있습니다.
cmake
- 외부 종속성을 선언하는 CMake 빌드 파일fixtures
- BinDiff 코어 엔진을 실행하기 위한 테스트 파일 모음ida
- IDA Pro 디스어셈블러와 통합java
- 자바 소스 코드. 여기에는 BinDiff 시각적 diff 사용자 인터페이스와 해당 유틸리티 라이브러리가 포함되어 있습니다.match
- BinDiff 코어 엔진의 일치 알고리즘packaging
- 설치 패키지의 패키지 소스tools
- 제품과 함께 제공되는 도우미 실행 파일 아래 지침은 네이티브 코드와 Java 기반 구성 요소를 모두 빌드하는 데 충분합니다.
자세한 빌드 지침은 나중에 추가될 예정입니다. 여기에는 설치 패키지를 빌드하기 위한 미리 만들어진 Dockerfile
및 스크립트가 포함됩니다.
BinDiff는 CMake를 사용하여 네이티브 C++ 코드로 구성된 구성 요소에 대한 빌드 파일을 생성합니다.
다음 빌드 종속성이 필요합니다.
다음 빌드 종속성은 선택 사항입니다.
deps/idasdk
에 압축 풀기)일반적인 빌드 단계는 Windows, Linux 및 macOS에서 동일합니다. 다음은 Linux용 명령을 보여줍니다.
자동으로 다운로드되지 않는 종속성을 다운로드합니다.
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
다음으로 빌드 디렉터리를 구성하고 빌드 파일을 생성합니다.
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
" -DIdaSdk_ROOT_DIR= ${PWD} build/idasdk "
마지막으로 실제 빌드를 호출합니다. 바이너리는 build/out/bindiff-prefix
에 배치됩니다.
cmake --build build/out --config Release
(cd build/out ; ctest --build-config Release --output-on-failure)
cmake --install build/out --config Release
IDA 없이 빌드하려면 위의 구성 단계를 다음으로 변경하면 됩니다.
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
-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을 호출하여 외부 종속성을 다운로드하고 빌드합니다.
윈도우:
set YFILES_DIR=<pathtoyfiles_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 라이센스 조건에 따라 라이센스가 부여됩니다. 자세한 내용은 라이센스를 참조하세요.
기여하고 싶다면 풀 요청을 보내기 전에 CONTRIBUTING.md를 읽어보세요. 버그를 보고하거나 기능 요청을 제출할 수도 있습니다.