저작권 2011-2020 Google LLC
BinNavi는 이진 분석 IDE입니다. 사용자가 디스어셈블된 코드의 제어 흐름 그래프를 검사, 탐색, 편집 및 주석을 달 수 있고, 실행 파일의 호출 그래프에 대해 동일한 작업을 수행하고, 실행 추적을 수집 및 결합하고, 일반적으로 추적할 수 있는 환경입니다. 분석가 그룹 간의 분석 결과.
참고: BinNavi 프로젝트는 더 이상 활발하게 개발되지 않습니다.
BinNavi는 그래프 표시 및 레이아웃을 위해 상용 타사 그래프 시각화 라이브러리(yFiles)를 사용합니다. 이 라이브러리는 매우 강력하며 쉽게 교체할 수 없습니다.
yFiles를 사용하여 직접 개발을 수행하려면 개발자 라이선스가 필요합니다. 동시에 우리는 커뮤니티가 상용 yFiles 라이센스 없이도 BinNavi에 기여할 수 있기를 원합니다. 이를 수행하고 yFiles 라이센스를 준수하려면 yFiles에 대한 모든 인터페이스를 적절하게 난독화해야 합니다.
이를 달성하기 위해 우리는 다음을 수행했습니다.
com.google.security.zynamics.binnavi
com.google.security.zynamics.binnavi.yfileswrap
com.google.security.zynamics.zylib
com.google.security.zynamics.zylib.yfileswrap
com.google.security.zynamics.reil
com.google.security.zynamics.reil.yfileswrap
우리는 yfileswrap
하위 패키지의 모든 코드가 포함된 사전 빌드된 JAR 파일을 배포하고 있습니다. yFiles에 대해 사전 연결되고 난독화되어 있습니다. BinNavi에서 코드를 변경하거나 추가하고 싶지만 yFiles 라이센스가 없는 경우 yfileswrap이 아닌 패키지에서 원하는 모든 작업을 자유롭게 수행할 수 있습니다. lib/yfileswrap-obfuscated.jar
을 클래스 경로에 넣기만 하면 됩니다. 테스트하고 결과를 확인하세요.
yfileswrap
하위 디렉터리를 변경하려면 유효한 yFiles 라이센스가 필요하며 BinNavi 프로젝트에 대한 기여는 해당 라이센스 계약을 준수해야 한다는 점에 유의하십시오. 이는 단순히 내부 API를 다른 이름 등으로 노출할 수 없다는 것을 의미합니다.
우리는 이를 시행할 것입니다. 우리는 yFiles 종속성을 사용하여 BinNavi를 오픈 소스화하는 방법을 발견하게 되어 매우 기쁩니다. 그리고 우리가 가져오는 모든 코드가 yFiles 라이선스를 준수하는지 확인할 것입니다.
yFiles 래퍼 라이브러리를 다시 빌드하려면 먼저 y.jar
및 ysvg.jar
third_party/java/yfiles
에 복사하세요. 그런 다음 다음을 사용하여 다시 빌드하십시오.
mvn dependency:copy-dependencies
ant build-yfiles-wrapper-jar
mvn install:install-file
-Dfile=target/yfileswrap-obfuscated.jar
-DgroupId=com.google.security.zynamics.binnavi
-DartifactId=yfileswrap-obfuscated
-Dversion=6.1
-Dpackaging=jar
-DlocalRepositoryPath=lib
BinNavi는 종속성 관리를 위해 Maven을 사용하지만 실제 빌드에는 사용하지 않습니다. Java 11은 지원되는 최소 버전입니다.
처음부터 빌드하려면 다음 명령을 사용하십시오.
mvn dependency:copy-dependencies
ant build-binnavi-fat-jar
BinNavi는 디스어셈블리/주석/추적을 저장하기 위해 중앙 PostgreSQL 데이터베이스를 사용한다는 점에 유의하세요. 따라서 이러한 인스턴스가 액세스 가능한 곳에서 실행되도록 해야 합니다. 다음과 같이 BinNavi를 시작할 수 있습니다:
java -jar target/binnavi-all.jar
추가 개발을 위해 코드를 Eclipse에 로드하려면 약간의 구성이 필요합니다.
build.xml
파일을 사용합니다.PROJECT_LOC/src/main/java
java
**/yfileswrap/**
를 추가합니다.CMain
을 검색하세요.여기에서 나갈 준비가 되어 있어야 합니다.
이 프로젝트의 일환으로 우리는 IDA에서 BinNavi가 요구하는 PostgreSQL 데이터베이스 형식으로 디스어셈블리를 내보내는 IDA Pro 플러그인을 배포하고 있습니다. BinNavi를 실행할 때 IDA에 대한 올바른 경로를 구성하고 필요한 경우 "플러그인 설치" 버튼을 클릭하면 됩니다. 이제 디스어셈블리를 가져올 수 있습니다.
지금은 IDA 내보내기 플러그인만 있습니다. 하지만 가까운 시일 내에 누군가가 다른 디스어셈블러용 내보내기 기능을 구축하는 데 도움을 줄 수 있기를 바랍니다.
현재 Maven 빌드는 BinNavi의 권위 있는 빌드 시스템입니다. Gradle은 순전히 실험적이며 변경될 가능성이 높습니다.
다음을 실행하여 Gradle로 BinNavi를 빌드할 수 있습니다.
Linux/OS X의 경우:
$ ./gradlew clean jar
Windows의 경우:
/gradlew.bat clean jar
그러면 build/libs/
아래의 프로젝트 경로에 jar이 생성됩니다.
Linux/OS X의 경우:
$ ./gradlew eclipse
Windows의 경우:
./gradlew.bat eclipse
프로젝트 생성 프로세스의 일부로 종속성을 다운로드합니다. 완료되면 다음을 수행하여 Eclipse에 로드합니다.
이제 BinNavi에 대한 Eclipse 작업공간이 설정되고 완료되었습니다.
Linux/OS X의 경우:
$ ./gradlew idea
Windows의 경우:
./gradlew.bat idea
프로젝트 생성 프로세스의 일부로 종속성을 다운로드합니다. 완료되면 다음을 수행하여 IntelliJ에 로드합니다.
이제 IntelliJ 환경이 IntelliJ에 대해 설정 및 완료되었습니다.