Hello there, ('ω')ノ
🧪 Fridaとは?
Frida は「動いているアプリにフックして、内部処理を監視・変更できる」ダイナミック・インストゥルメンテーションツールです。
📌 一言でいうと、「アプリを改造せずに“中身をいじれる”ツール」です。
しかもアプリのソースコードや署名解除は不要。 Javaコードやネイティブコード(C/C++)の関数にその場で割り込んで値を書き換えたり、処理を止めたりできます。
🛠 Fridaを使う準備
✅ インストール(ホストPC側)
pip install frida-tools
✅ Android端末(Root推奨)にFridaサーバーを配置
adb push frida-server /data/local/tmp/ adb shell "chmod 755 /data/local/tmp/frida-server" adb shell "/data/local/tmp/frida-server &"
※ Root化していない場合でも一部のアプリには使えますが、自由度は大きく下がります。
🔍 Fridaでできること
| 機能 | 内容 |
|---|---|
| Javaメソッドのフック | 任意のメソッドを監視・上書きできる |
| ネイティブ関数の監視 | C/C++のライブラリ内関数にフック可能 |
| 引数・戻り値の書き換え | メソッドの出力を偽装したり、条件分岐を変更できる |
| 内部情報の取得 | クラス名、メソッド一覧、フィールド値などを取得できる |
🧪 実例:パスワードチェックをバイパスする
想定アプリ:
public boolean checkPassword(String input) { return input.equals("Secret123"); }
このようなチェックがある場合でも、Fridaで以下のようにフックできます:
📝 スクリプト例(Javaメソッド書き換え)
Java.perform(function () {
var TargetClass = Java.use("com.example.app.AuthManager");
TargetClass.checkPassword.implementation = function (input) {
console.log("checkPassword() called with: " + input);
return true; // 常に認証成功に書き換え
};
});
▶️ 実行
frida -U -n com.example.app -l bypass.js
→ この状態でアプリを操作すると、どんな文字列を入れても認証が通る状態になります!
📦 他にもこんな活用例
✔️ API通信内容のログ出力
Java.perform(function () {
var OkHttp = Java.use("okhttp3.Request");
OkHttp.toString.implementation = function () {
var result = this.toString();
console.log("HTTP Request: " + result);
return result;
};
});
✔️ 暗号化関数の戻り値を偽装
var AESClass = Java.use("com.example.crypto.AESUtil");
AESClass.encrypt.implementation = function (plainText) {
console.log("Encrypt called with: " + plainText);
return "fixedEncryptedValue"; // 結果を上書き
};
🧠 Fridaの強みと注意点
🌟 強み
- アプリを再ビルドしなくても動作をいじれる
- 一度に複数の関数やネイティブコードにも対応
- Javaとネイティブをまたがった攻撃が可能
⚠️ 注意点
- 不正利用(ゲーム改ざんやライセンス回避)は絶対NG!
- 業務アプリやテスト目的でのみ使用しましょう
- Root端末の利用は診断端末に限るべきです
✅ まとめ
- Fridaは「動作中のアプリにリアルタイムで割り込む」強力な診断ツール
- Javaの関数フック、戻り値変更、APIログ取得など多彩な操作が可能
- パスワードチェックや暗号化処理、SSLピンニング回避などでも活躍
- ソースコード不要で動作を書き換えられるため、脆弱性の再現や影響調査に最適
Best regards, (^^ゞ