
[公式] Androidリバースエンジニアリングツール。Fridaを活用した動的インストゥルメンテーション自動化に重点を置いています。dexを逆アセンブルし、静的に解析し、フックを生成し、リフレクションメソッドを発見し、傍受したデータを保存し、そこから新しいことを行います。オールインワンのAndroidリバースエンジニアリングプラットフォームを目指しています。

データキャリバーは、インストルメンテーションの自動化に焦点を当てたAndroidリバースエンジニアリングプラットフォームです。その特徴は、動的解析を使用して静的解析のヒューリスティクスを改善することです。動的インストルメンテーションに関連する退屈なタスクを自動化することを目的としています。例えば:
しかし、それだけではありません。データキャリバーは独自の静的解析エンジンを持ち、smaliの部分的な断片を実行することができます。
何か共有したいことや、助けが必要ですか? 公式チャットに参加してください:
Telegram - 最も迅速に回答を得られる方法
公式ドキュメントはこちらから入手できます こちら (ウェブサイト - 作業中).
最新ニュースはこちらをご覧ください:http://docs.dexcalibur.org/News.html
データキャリバーのデモ動画をご覧ください:デモ: 61のメソッドをフックするのに1分もかからない?問題ありません。(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インストール:データキャリバーがNPMを使用してグローバルにインストールされている場合(-gオプション)、ターミナルから $ dexcalibur で起動できます。それ以外の場合は、$ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js で起動できます。
ソースからのインストール:dexcalibur フォルダから、$ dexcalibur または $ node dexcalibur.js を実行します。
Windowsの場合
NPMインストール:データキャリバーがNPMを使用してグローバルにインストールされている場合でも(-gオプション)、ターミナルから以下のコマンドを実行して起動する必要があります:node <NPM_ROOT>/dexcalibur/dexcalibur.js。
ソースからのインストール:dexcalibur フォルダから、ターミナルで node dexcalibur.js コマンドを実行します。
以前のバージョンのデータキャリバーを使用していますか?
新規インストールと同じ手順に従い、ワークスペースパスを入力する際に、現在のワークスペースの場所を入力してください。
以下のコマンドを実行するだけです:
$ npm install -g dexcalibur
既存の設定とワークスペースが自動的に検出されます。
以下のスクリーンショットは、実行時におけるxrefsの自動更新を示しています。


現在の最大の制限は、データキャリバーがネイティブ関数(JNIライブラリ内)をターゲットとするフックのソースコードを生成できないことです。ただし、フックを編集することで手動でFridaのインターセプターを宣言することは可能です。
データキャリバーは現在、JNIライブラリやJNAなどのネイティブ部分を分析する機能を提供していないため、Java部分に関連する機能と制限のみを詳細に説明します。
分析の精度は、分析の初期段階で使用されるAndroid APIイメージの完全性に依存します。つまり、Android SDKのandroid.jarファイルから生成されたDEXファイルを使用する場合、Android Java APIの内部メソッド、フィールド、クラスへの参照が欠落する可能性があります。予想されるAndroidバージョンを実行している実際のデバイスから直接抽出された "boot.oat" ファイルから分析を開始すると、より良い結果が得られます。
TODO : テキストを書く
TODO : テキストを書く
追跡される動作
"Run smali (VM)" アクションに関与する静的解析ツールは、以下の動作を検出し、受け入れ、追跡することができます:
実際には、そのような不正な命令に対するハンドラー/リスナーはサポートされていませんが、イベントは追跡され、表示されます。
データキャリバーIR
VMはカスタムで簡略化された中間表現(IR)を生成し、これはアナリストが分析を実行するのを助けるためにのみ表示されます。
コールスタックの深さと設定の値に応じて、IRには呼び出された関数内で実行された命令を含めることも含めないこともできます。実行がtryブロックに入り、リターンまで継続したがcatchを実行しなかった場合、catchブロックは表示されません。実際、データキャリバーIRの目的は、VMコンテキスト内で「実行されたもの」または「シンボルの値に応じて実行される可能性があるもの」のみを表示することです。
データキャリバーIRは、不要なgotoや不透明な述語を削除して、バイトコードのクリーンなバージョンを読み取るのに役立ちます。データキャリバーIRは、VMによって2つの簡略化レベルで生成できます。
第1レベルのIR(第2レベルのIRを信頼できない場合に使用可能):
第2レベル:
Android APIモック
TODO
詳細
Smali VMは以下の手順に従います:
VMはinvoke-*命令をどのように処理しますか?
マニフェスト分析(制限あり)
最初の実行前に、アプリケーションのAndroidマニフェストが解析されます。現在、マニフェスト内の安全でない設定などの異常は実際にこのレベルで検出されます。
Androidマニフェスト解析の唯一の目的は、他の種類のアナライザーにデータを提供することです。
パーミッション分析
マニフェストから抽出されたすべてのパーミッションがリストされ、識別され、ターゲットのAndroid APIバージョンのAndroid仕様と比較されます。
データキャリバーは、一部の場合において、パーミッションの目的の説明、最小Android APIバージョンなどを提供します。
アクティビティ分析
プロバイダー分析
サービス分析
レシーバー分析
ネットワークモニタリング
インテントモニタリング
ファイルアクセスモニタリング
マルチユーザーメニューが見つかりませんか?問題ありません。メニューはありませんが、最小限の共同作業が可能です。
データキャリバーはWebサーバーを実行します。そのため、複数の人がこのWebサーバーの同じネットワーク上にいて、ホストのファイアウォールが適切に設定されている場合、複数の人が同じデータキャリバーインスタンスで作業できます。
現在の制限事項は次のとおりです:
コントリビューターの皆様に特別な感謝を捧げます:
詳細に入る前に:
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/"
}
次に、データキャリバーワークスペースの構造が以下のようになっているか確認してください(/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 チェックボックスをオンにしてデータキャリバーに検出させてください。
デバイスを使用する前に、ターゲットデバイスを登録する必要があります。 登録中に、データキャリバーはデバイスのメタデータを収集し、互換性のあるバージョンのFridaサーバーをプッシュします。
このようなメタデータは、適切なfrida-serverとfrida-gadgetのターゲットを選択するために使用されます。
デバイスリストの行に感嘆符 ! が表示されている場合、デスクトップがデバイスによって許可されていません。おそらく確認が必要です。
デバイスがデバイスマネージャーにリストされ、online列がチェックされている場合は、enrollをクリックしてください。
デバイスがデバイスマネージャーにリストされ、online列がチェックされている場合は、enrollをクリックしてください。
バージョン < v0.7 のデータキャリバーは、不完全なADB出力解析のため、エミュレートされたデバイスを自動的に検出して使用することができませんでした。
バージョン >= v0.7 以降では、仮想デバイスが実行されている状態で、/splash.htmlにアクセスするか、ナビゲーションバーのDEXCALIBURをクリックしてください。左メニューのDevice Managerボタンをクリックし、テーブルの上部にあるRefreshボタンをクリックします。
仮想デバイスのADB IDで始まる行が表示されるはずです。
まず、他のターゲットデバイスと同様に、登録する必要があります。
Connect over TCP ...をクリックして、TCP経由で新しいデバイスを追加するか、登録済みのデバイスをTCP経由で接続します。
デバイスがこれまでに登録されたことがない場合、登録はTCP経由で行われます。 場合によっては、TCP経由の接続はUSB経由よりも遅くなります。そのため、登録に追加の時間がかかることがあります。
デバイスがUSB経由で登録されている場合、このデバイスの新しい優先トランスポートタイプはTCPになります。
このリポジトリにプルリクエストを作成するか、Issueを作成してください。
dexcalibur-doc リポジトリにプルリクエストを作成してください。
ドキュメントはこちら(ドキュメントウェブサイト)とこちら(wiki)で入手できます。
![]() |
|---|
| All Productsのライセンスを提供してくださいました <3 |
現在、データキャリバーに関するドキュメントやトレーニングリソースはほとんどありません。データキャリバーをCTFチャレンジの勝利や脆弱性の発見に使用した場合、ぜひ経験を共有することをお勧めします。