
[공식] Frida를 활용한 동적 계측 자동화에 초점을 맞춘 Android 리버스 엔지니어링 도구입니다. DEX를 디스어셈블하고, 정적으로 분석하며, 후크를 생성하고, 리플렉션 메서드를 발견하고, 가로챈 데이터를 저장하며, 이를 통해 새로운 작업을 수행합니다. 그 목표는 올인원 Android 리버스 엔지니어링 플랫폼이 되는 것입니다.

Dexcalibur는 인스트루멘테이션 자동화에 초점을 맞춘 Android 리버스 엔지니어링 플랫폼입니다. 특이점은 동적 분석을 사용하여 정적 분석 휴리스틱을 개선한다는 점입니다. 다음과 같은 동적 인스트루멘테이션과 관련된 지루한 작업을 자동화하는 것을 목표로 합니다:
무언가를 공유하고 싶거나 도움이 필요하신가요? 공식 채팅에 참여하세요:
Telegram - 가장 빠르게 응답을 받을 수 있는 방법
공식 문서는 여기 (웹사이트 - 작업 중)에서 확인할 수 있습니다.
최신 소식은 여기에서 확인하세요: http://docs.dexcalibur.org/News.html
Dexcalibur 데모 동영상 보기: 데모: 1분도 안 되어 61개 메서드를 훅? 문제 없습니다. (youtube)
기여해 주세요!
망설이지 마세요! 기여할 수 있는 방법은 여러 가지입니다:
설치 문서로 이동하세요.
대안: Docker 사용
adb를 설치하세요 (적절하다면 Android 에뮬레이터도)docker-compose build android-dexcaliburdocker run --rm -it --net=host -v /tmp/dexcalibur:/shared -p 8000:8000 dexcalibur:2023.01 /bin/bashLinux 및 MacOS의 경우
NPM 설치: Dexcalibur가 NPM을 통해 전역으로 설치된 경우(-g 옵션), 터미널에서 $ dexcalibur를 입력하여 실행할 수 있습니다. 그렇지 않은 경우 $ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js로 실행할 수 있습니다.
소스에서 설치: dexcalibur 폴더에서 $ dexcalibur 또는 $ node dexcalibur.js를 실행하세요.
Windows의 경우
NPM 설치: Dexcalibur가 NPM을 통해 전역으로 설치된 경우(-g 옵션)에도 터미널에서 node <NPM_ROOT>/dexcalibur/dexcalibur.js 명령을 실행해야 합니다.
소스에서 설치: dexcalibur 폴더의 터미널에서 node dexcalibur.js 명령을 실행하세요.
이전 버전의 Dexcalibur를 사용 중이신가요?
새로 설치와 동일한 단계를 따르고, 작업 공간(workspace) 경로를 입력해야 할 때 현재 작업 공간 위치를 입력하세요.
다음을 수행하기만 하면 됩니다:
$ npm install -g dexcalibur
기존 구성 및 작업 공간이 자동으로 감지됩니다.
다음 스크린샷은 실행 중 xrefs의 자동 업데이트를 보여줍니다.


현재 가장 큰 제한 사항은 Dexcalibur가 네이티브 함수(JNI 라이브러리 내)를 대상으로 하는 훅의 소스 코드를 생성할 수 없다는 것입니다. 그러나 훅을 편집하여 수동으로 Frida의 Interceptor를 선언할 수 있습니다.
Dexcalibur가 (현재로서는) JNI 라이브러리나 JNA와 같은 네이티브 부분을 분석하는 기능을 제공하지 않는다고 가정할 때, Java 부분과 관련된 기능 및 제한 사항만 자세히 설명했습니다.
분석 정확도는 분석 초기 단계에서 사용된 Android API 이미지의 완전성에 따라 달라집니다. 즉, Android SDK의 Android.jar 파일에서 생성된 DEX 파일을 사용하는 경우 Android Java API의 내부 메서드, 필드 또는 클래스에 대한 일부 참조가 누락될 수 있습니다. 대상 Android 버전을 실행하는 실제 기기에서 직접 추출한 'boot.oat' 파일에서 분석을 시작하면 더 나은 결과를 얻을 수 있습니다.
TODO: 텍스트 작성
TODO: 텍스트 작성
추적되는 동작
'Run smali (VM)' 작업과 관련된 정적 분석기는 다음 동작을 발견하고 수용하며 추적할 수 있습니다:
현재 이러한 잘못된 명령어에 대한 핸들러/리스너는 지원되지 않지만, 이벤트는 추적되고 렌더링됩니다.
Dexcalibur IR
VM은 사용자 정의되고 단순화된 중간 표현(IR)을 생성하며, 이는 분석가의 분석을 돕기 위해서만 표시됩니다.
호출 스택 깊이와 구성 값에 따라 IR은 호출된 함수 내에서 실행된 명령어를 포함하거나 포함하지 않을 수 있습니다. 실행이 try 블록에 진입하여 반환까지 계속되지만 catch를 실행하지 않으면, catch 블록은 렌더링되지 않습니다. 실제로 Dexcalibur IR의 목적은 VM 컨텍스트에서 "실행된 것" 또는 "일부 심볼 값에 따라 실행될 수 있는 것"만 렌더링하는 것입니다.
Dexcalibur IR은 불필요한 goto와 불투명 조건자(opaque predicate)를 제거하여 바이트코드의 정리된 버전을 읽는 데 도움을 줍니다. Dexcalibur IR은 두 가지 단순화 수준으로 VM에 의해 생성될 수 있습니다:
1단계 IR (2단계 IR을 신뢰하지 않는 경우 사용 가능):
2단계:
Android API 모의
TODO
세부 사항
Smali VM은 다음 단계를 따릅니다:
VM이 invoke-* 명령어를 처리하는 방법은 무엇인가요?
매니페스트 분석 (제한됨)
첫 번째 실행 전에 애플리케이션의 Android 매니페스트가 파싱됩니다. 실제로 보안되지 않은 구성과 같은 매니페스트의 이상 징후는 이 수준에서 감지됩니다.
Android 매니페스트 파싱의 유일한 목적은 다른 유형의 분석기를 채우는 것입니다.
권한 분석
매니페스트에서 추출된 모든 권한이 나열되고 식별되며, 대상 Android API 버전의 Android 사양과 비교됩니다.
Dexcalibur는 (일부 경우에만) 권한 목적의 설명, 최소 Android API 버전 등을 제공합니다.
액티비티 분석
프로바이더 분석
서비스 분석
리시버 분석
네트워크 모니터링
인텐트 모니터링
파일 액세스 모니터링
다중 사용자 메뉴를 찾을 수 없으신가요? 문제 없습니다. 메뉴는 없지만 최소한의 협업 작업이 가능합니다.
Dexcalibur는 웹 서버를 실행합니다. 따라서 여러 사람이 이 웹 서버와 동일한 네트워크에 있고 호스트 방화벽이 잘 구성되어 있다면, 여러 명이 동일한 Dexcalibur 인스턴스에서 작업할 수 있습니다.
실제 제한 사항은 다음과 같습니다:
특별히 기여자분들께 감사드립니다:
더 깊이 들어가기 전에:
dexcalibur --reinstall 명령을 사용하여 다시 설치를 시도해 보셨나요? 아직 시도하지 않았다면, 시도해 보세요.먼저, 전역 설정이 <user_directory>/.dexcalibur/에 저장되었는지 확인하세요.
$ ls -la ~/.dexcalibur
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x+ 87 test_user staff 2784 29 avr 11:47 ..
-rw-r--r-- 1 test_user staff 204 29 avr 11:41 config.json
$ cat ~/.dexcalibur/config.json
{
"workspace":"/Users/test_user/dexcaliburWS3",
"registry":"https://github.com/FrenchYeti/dexcalibur-registry/raw/master/",
"registryAPI":"https://api.github.com/repos/FrenchYeti/dexcalibur-registry/contents/"
}
다음으로, Dexcalibur 작업 공간의 구조가 다음과 같은지 확인하세요 (/api 폴더의 내용은 다를 수 있음).
$ ls -la ~/dexcaliburWS/.dxc/*
/Users/test_user/dexcaliburWS/.dxc/api:
total 0
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
drwxr-xr-x 8 test_user staff 256 29 avr 11:41 sdk_androidapi_29_google
/Users/test_user/dexcaliburWS/.dxc/bin:
total 34824
drwxr-xr-x 4 test_user staff 128 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rwxr-xr-x 1 test_user staff 17661172 29 avr 11:41 apktool.jar
drwxr-xr-x 18 test_user staff 576 29 avr 11:41 platform-tools
/Users/test_user/dexcaliburWS/.dxc/cfg:
total 8
drwxr-xr-x 3 test_user staff 96 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
-rw-r--r-- 1 test_user staff 314 29 avr 11:41 config.json
/Users/test_user/dexcaliburWS/.dxc/dev:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
/Users/test_user/dexcaliburWS/.dxc/tmp:
total 0
drwxr-xr-x 2 test_user staff 64 29 avr 11:41 .
drwxr-xr-x 7 test_user staff 224 29 avr 11:41 ..
USB를 통해 연결된 물리적 기기를 사용하는 경우, 개발자 모드와 USB 디버깅이 활성화되어 있는지 확인하세요.
가상 기기를 사용하는 경우 /splash.html로 이동하여 Device Manager를 선택한 후 Connect over TCP ...를 클릭하고 지시를 따르세요. 기기의 IP 주소를 모르는 경우 automatic configuration 체크박스를 선택하여 Dexcalibur가 자동으로 감지하도록 하세요.
대상 기기를 사용하려면 먼저 등록해야 합니다. 등록 중에 Dexcalibur는 기기 메타데이터를 수집하고 호환되는 버전의 Frida 서버를 푸시합니다.
이러한 메타데이터는 올바른 frida-server 및 frida-gadget 대상을 선택하는 데 사용됩니다.
기기 목록의 줄에 빨간색 느낌표 !가 나타나면, 데스크탑이 기기에서 허용되지 않은 것입니다. 아마도 확인이 필요할 것입니다.
기기가 DeviceManager에 나열되고 online 열이 선택되어 있으면 enroll을 클릭하세요.
기기가 DeviceManager에 나열되고 online 열이 선택되어 있으면 enroll을 클릭하세요.
버전 < v0.7의 Dexcalibur는 불완전한 ADB 출력 파싱으로 인해 에뮬레이트된 기기를 자동으로 감지하여 사용할 수 없었습니다.
버전 >= v0.7부터는 가상 기기가 실행 중인 상태에서 /splash.html로 이동하거나 탐색 모음에서 DEXCALIBUR를 클릭하세요. 왼쪽 메뉴에서 Device Manager 버튼을 클릭하고 배열 상단의 Refresh 버튼을 클릭하세요.
가상 기기의 ADB ID로 시작하는 행이 나타나야 합니다.
먼저, 다른 대상 기기와 마찬가지로 등록해야 합니다.
TCP를 통해 새 기기를 추가하거나 등록된 기기를 TCP로 연결하려면 Connect over TCP ...를 클릭하세요.
기기가 이전에 등록된 적이 없다면, TCP를 통해 등록이 수행됩니다. 경우에 따라 TCP 연결이 USB보다 느릴 수 있으므로 등록 시간이 더 걸릴 수 있습니다.
기기가 USB를 통해 등록된 경우, 이 기기의 새로운 선호 전송 유형은 TCP가 됩니다.
이 저장소에 풀 리퀘스트를 생성하거나 이슈를 생성하세요.
dexcalibur-doc 저장소에 풀 리퀘스트를 생성하세요.
문서는 여기 (문서 웹사이트)와 여기 (위키)에서 확인할 수 있습니다.
![]() |
|---|
| All Products 라이선스를 제공해주셨습니다 <3 |
현재 Dexcalibur에 대한 문서와 교육 자료는 거의 없습니다. CTF 챌린지에서 승리하거나 취약점을 찾기 위해 Dexcalibur를 성공적으로 사용하셨다면, 여러분의 경험을 공유해 주시기를 적극 권장합니다.