
멀티툴 리버스 엔지니어링 협업 솔루션.

CollaRE는 협업 리버스 엔지니어링을 위한 도구로, 프로젝트 중에 두 개 이상의 도구를 사용해야 하는 팀이 별도의 위치에 파일을 공유할 필요 없이 협업할 수 있도록 하는 것을 목표로 합니다. 또한 매우 간단한 사용자 관리를 포함하므로 서로 다른 팀이 서로 다른 프로젝트에서 작업하는 다중 프로젝트 서버로 사용할 수 있습니다.
이 도구의 백엔드는 Docker에서 실행되는 nginx 앞단을 둔 간단한 Flask app으로, 관련 데이터를 담고 있는 파일 및 JSON 기반 매니페스트와 함께 동작합니다. 프런트엔드는 프로젝트 관리와 바이너리 파일 및 해당 리버스 엔지니어링 데이터베이스 작업을 할 수 있는 간단한 인터페이스를 갖춘 PyQT 기반 GUI 도구입니다. 현재 이 도구는 Binary Ninja, Cutter (Rizin), Ghidra, Hopper Dissassembler, IDA, JEB 및 Android Studio (Decompiled by JADX)를 지원합니다. 구현은 API 변경으로 인한 문제를 피하기 위해 가능한 한 이러한 도구의 내부 동작으로부터 추상화되어 있으므로 플러그인 형태로 해당 도구에 직접 통합되지는 않습니다(아래에 설명된 데이터 마이그레이션 플러그인 제외). 작업은 순전히 이들 도구가 생성한 파일을 관리하는 것(말 그대로 잘 알려진 파일 확장자만 기반)과 간단한 SVN 스타일의 check-out 및 check-in 작업에 기반합니다.
이 저장소에서 최신 바이너리 릴리스를 받거나 저장소를 클론한 후 Linux에서는 sudo python3 setup.py install을 실행하고 Windows에서는 명령줄에서 python3 setup.py install을 실행하세요. Linux에서는 이 도구가 PATH에 설치되어 collare 명령으로 간단히 실행할 수 있습니다. Windows에서는 Python 설치 방식에 따라 파일이 C:\Users\<USERNAME>\AppData\Local\Programs\Python\<PYTHON_VERSION>\Scripts\collare.exe에 배치됩니다.
Gnome 기반 데스크톱 UI의 경우 다음 데스크톱 파일을 사용할 수 있습니다(파일 경로는 CollaRE 및 Python 버전에 따라 다를 수 있음):
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=CollaRE
Exec=/usr/local/bin/collare
Icon=/usr/local/lib/python3.8/dist-packages/collare-1.2-py3.8.egg/collare/icons/collare.png
Terminal=false
Cutter 지원을 활성화하려면 Cutter 파일을 PATH에 추가하세요(cmd/terminal에서 Cutter를 입력하면 애플리케이션이 시작되어야 합니다).
Cutter(rizin) 프로젝트를 저장할 때는 수동으로 .rzdb를 추가해야 합니다. 이미 파일에 있는 확장자(exe 또는 so 등)는 제거하지 마세요.
Binary Ninja 지원을 활성화하려면 binaryninja 파일을 PATH에 추가하세요(cmd/terminal에서 binaryninja를 입력하면 애플리케이션이 시작되어야 합니다).
Binary Ninja는 기본적으로 파일 확장자를 제거하지만 이 도구가 이를 처리하므로 원래 파일 확장자를 수동으로 다시 추가할 필요가 없습니다. 기본 경로에 프로젝트를 그대로 저장하는 것만으로도 로컬 bndb 데이터베이스를 성공적으로 푸시할 수 있습니다.
Hopper Disassembler 지원을 활성화하려면 Hopper 파일을 PATH에 추가하세요(cmd/terminal에서 Hopper를 입력하면 애플리케이션이 시작되어야 합니다).
Hopper는 기본적으로 파일 확장자를 제거하지만 이 도구가 이를 처리하므로 원래 파일 확장자를 수동으로 다시 추가할 필요가 없습니다. Ctrl+S로 프로젝트를 저장하는 것만으로도 로컬 hop 데이터베이스를 성공적으로 푸시할 수 있습니다.
JEB 지원을 활성화하려면 jeb 파일을 PATH에 추가하세요(cmd/terminal에서 jeb를 입력하면 애플리케이션이 시작되어야 합니다). 이 작업은 OS에 맞는 기본 실행 스크립트 파일의 이름을 jeb로 바꾸면 됩니다(Windows의 경우 실제로는 jeb.bat).
IDA 도구 지원을 활성화하려면 ida64 및 ida 파일을 PATH에 추가하세요(cmd/terminal에서 ida64/ida를 입력하면 애플리케이션이 시작되어야 합니다).
이 도구 지원을 활성화하려면 ghidraRun 및 analyzeHeadless(Windows의 경우 .bat) 파일을 PATH에 추가하세요(cmd/terminal에서 ghidraRun을 입력하면 애플리케이션이 시작되어야 합니다). analyzeHeadless는 Ghidra 루트 디렉터리의 support 폴더에 있으므로 두 파일 모두를 포함하도록 PATH를 조정해야 합니다.
Ghidra로 데이터베이스를 초기화하는 과정은 프로젝트를 만들지 않고는 파일을 처리할 수 없기 때문에 조금 더 복잡합니다. 따라서 Ghidra 데이터베이스(ghdb라고 함)를 푸시하려면 자동 처리가 실패할 때마다(기본적으로 처리하는 파일이 ELF/PE가 아닐 때) 프로젝트를 수동으로 생성하라는 메시지가 표시되며, 그런 다음 gpr 파일의 경로를 지정해야 합니다(죄송합니다).
리버스 엔지니어링 작업 중 APK 및 JAR 파일을 자주 접하게 되므로 CollaRE 도구는 이러한 유형의 파일 작업도 지원합니다. 이러한 도구 지원을 활성화하려면 android-studio 및 jadx 파일이 모두 PATH에 있는지 확인해야 합니다(cmd/terminal에서 android-studio/jadx를 입력하면 애플리케이션이 시작되어야 합니다). JADX 도구는 JAR/APK 파일의 디컴파일을 수행하는 데 사용되며, Android Studio는 결과 파일을 여는 데 사용됩니다. Android Studio 사용은 선택 사항입니다. Gradle 프로젝트를 처리하는 다른 도구(예: IntelliJ IDEA)를 android-studio 명령으로 별칭 지정할 수 있기 때문입니다.
서버 측을 자체 readme 파일에 설명된 대로 배포한 후에는 사용된 인증서 파일을 애플리케이션의 모든 사용자에게 배포하고 기본 admin 계정과 admin 비밀번호를 사용하여 Admin 탭을 통해 다른 사용자 계정을 생성해야 합니다(admin 사용자의 비밀번호를 변경하는 것을 잊지 마세요). 사용자가 구성되면 누구나 자신의 프로젝트를 만들고 도구 자체로 작업을 시작할 수 있습니다.
프로젝트를 만들려면 사용자가 먼저 URL과 자격 증명을 입력하고 서버 ID를 검증할 인증서를 제공하여 원격 서버에 인증해야 합니다. 그 후 상태가 Connected로 변경되고 기존 프로젝트를 선택하거나 삭제하거나 이름(영숫자 문자 및 _만 허용)을 입력하고 프로젝트에 참여할 사용자를 선택하여 새 프로젝트를 만들 수 있습니다(나중에 Admin 탭에서 변경 가능). 프로젝트를 만드는 사용자는 자동으로 사용자 목록에 추가되므로 자신을 선택할 필요는 없습니다.

Project View 탭에 들어가면 새 폴더(영숫자 문자 및 _만 허용, 죄송합니다)를 만들고 드래그 앤 드롭으로 파일(또는 폴더)을 업로드할 수 있습니다.

현재 이 도구에는 프로젝트 저장 시 자동 업로드를 허용하는 플러그인이나 네이티브 후크가 없으므로 원하는 데이터베이스를 만든 후 로컬 DB 파일 푸시를 수동으로 트리거해야 합니다. 이 작업은 업로드된 바이너리 파일을 마우스 오른쪽 버튼으로 클릭하고 바이너리를 처리할 도구를 선택하여 수행할 수 있습니다. 기본적인 분석을 수행할 수는 있지만, 아무것도 변경하지 않고 파일을 저장하는 것을 강력히 권장합니다(Cutter에서 rzdb를 추가하는 것과 Ghidra에서 완전히 다른 프로세스를 제외하고). 경로와 파일 이름을 변경하지 마십시오. 이 작업을 수행하고 디스어셈블러를 닫은 후에는 바이너리 이름을 마우스 오른쪽 버튼으로 클릭하고 Push Local DBs 옵션을 선택하면 됩니다. 그러면 로컬 데이터베이스가 업로드되며, 이제부터 DB 파일로 작업하려면 Check-out을 수행해야 합니다. 각 바이너리는 모든 도구에서 별도로 처리할 수 있지만 바이너리 및 도구별로 DB 파일은 하나만 존재할 수 있습니다.

파일을 단순히 검사하려면 원하는 DB 파일을 마우스 오른쪽 버튼으로 클릭하고 Open File 옵션을 선택하면 됩니다(또는 더블 클릭). 파일이 사용자에게 체크아웃된 경우 로컬 파일이 열리며 DB 파일을 자유롭게 변경할 수 있습니다. 작업이 끝나면(또는 변경 사항을 푸시하려면) Check-in 옵션을 선택할 수 있습니다. 그러면 변경 사항이 서버에 업로드되고 추가 변경을 위해 파일을 체크아웃 상태로 유지할지 묻는 메시지가 표시됩니다. 로컬 변경 사항을 버리려면 상황에 맞는 메뉴에서 Undo Check-out 옵션을 선택하세요. 그러면 변경 사항이 버려지고 서버의 파일로 계속 작업할 수 있습니다. 먼저 Check-out 작업을 수행하지 않고 파일을 열면 가짜 읽기 전용 모드로 열립니다(DB 파일을 변경할 수는 있지만 다음에 체크아웃하거나 파일을 열 때 해당 변경 사항은 손실됩니다).

이 도구는 모든 Check-in 작업이 DB 파일의 새 버전으로 간주되는 방식으로 DB 파일 버전 관리를 지원합니다. 해당 버전에 적용된 변경 사항에 더 많은 맥락을 제공하기 위해 버전에 대한 주석을 입력하라는 메시지가 표시됩니다. 그런 다음 이전 버전의 파일을 열거나 체크아웃하고 해당 버전에서 작업할 수 있습니다.

이 저장소의 plugins 폴더에는 지원되는 도구용 플러그인이 포함되어 있으며, 하나의 바이너리에서 여러 도구로 작업할 때 도구 간에 주석과 함수 이름을 공유할 수 있습니다. 관심 있는 도구의 표준 플러그인 설치 지침을 따르세요. 각 플러그인은 Import 및 Export 기능을 제공합니다. 도구 간에 데이터를 공유할 계획이라면 다른 사람이 이미 이름을 바꾼 함수를 다시 이름 짓지 않도록 항상 먼저 Import를 수행해야 합니다. 플러그인에 주의사항이 있는 경우 해당 플러그인의 README 파일에 언급되어 있습니다. 플러그인은 여러 사람의 동시 협업보다는 다른 도구로 데이터를 마이그레이션하기 위한 것임에 유의하세요.
