# Fridaチュートリアル
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
**バグバウンティのヒント**:ハッカーによって作成されたプレミアムな**バグバウンティプラットフォームであるIntigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう! {% embed url="https://go.intigriti.com/hacktricks" %} ## インストール **fridaツール**をインストールします: ```bash pip install frida-tools pip install frida ``` **frida server**をAndroidに**ダウンロードしてインストール**します([最新リリースをダウンロード](https://github.com/frida/frida/releases))。\ ルートモードでadbを再起動し、接続し、frida-serverをアップロードし、実行権限を与えてバックグラウンドで実行するためのワンライナー: ```bash adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &" ``` **動作を確認する**: ```bash frida-ps -U #List packages and processes frida-ps -U | grep -i #Get all the package name ``` ## チュートリアル ### [チュートリアル 1](frida-tutorial-1.md) **元記事**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ **APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\ **ソースコード**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) [リンクをクリックして読む](frida-tutorial-1.md)。 ### [チュートリアル 2](frida-tutorial-2.md) **元記事**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (パート 2, 3, 4)\ **APK とソースコード**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) [リンクをクリックして読む](frida-tutorial-2.md)。 ### [チュートリアル 3](owaspuncrackable-1.md) **元記事**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk) [リンクをクリックして読む](owaspuncrackable-1.md)。\ **ここで素晴らしい Frida スクリプトを見つけることができます:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) ## 早い例 ここでは、Fridaの基本的で興味深い機能を使ったクイックスクリプトを見つけることができます。 ### コマンドラインからFridaを呼び出す ```bash frida-ps -U #Basic frida hooking frida -l disableRoot.js -f owasp.mstg.uncrackable1 #Hooking before starting the app frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1 #The --no-pause and -f options allow the app to be spawned automatically, #frozen so that the instrumentation can occur, and the automatically #continue execution with our modified code. ``` ### 基本的なPythonスクリプト ```python import frida # Attach to the target process session = frida.attach("com.example.app") # Define the JavaScript code to be injected js_code = """ Java.perform(function () { // Hook the target method var targetClass = Java.use("com.example.app.TargetClass"); targetClass.targetMethod.implementation = function () { // Modify the behavior of the target method console.log("Target method hooked!"); // Call the original method this.targetMethod(); }; }); """ # Create a script from the JavaScript code script = session.create_script(js_code) # Load the script into the target process script.load() # Detach from the target process session.detach() ``` このPythonスクリプトは、Fridaを使用してターゲットプロセスにアタッチし、JavaScriptコードを注入するための基本的なスクリプトです。 ```python import frida # ターゲットプロセスにアタッチする session = frida.attach("com.example.app") # 注入するJavaScriptコードを定義する js_code = """ Java.perform(function () { // ターゲットメソッドをフックする var targetClass = Java.use("com.example.app.TargetClass"); targetClass.targetMethod.implementation = function () { // ターゲットメソッドの動作を変更する console.log("ターゲットメソッドがフックされました!"); // オリジナルのメソッドを呼び出す this.targetMethod(); }; }); """ # JavaScriptコードからスクリプトを作成する script = session.create_script(js_code) # スクリプトをターゲットプロセスにロードする script.load() # ターゲットプロセスからデタッチする session.detach() ``` このスクリプトでは、Fridaを使用してAndroidアプリのターゲットプロセスにアタッチし、指定したクラスのメソッドをフックして動作を変更します。フックしたメソッド内で、コンソールにメッセージを出力し、オリジナルのメソッドを呼び出します。 ```python import frida, sys jscode = open(sys.argv[0]).read() process = frida.get_usb_device().attach('infosecadventures.fridademo') script = process.create_script(jscode) print('[ * ] Running Frida Demo application') script.load() sys.stdin.read() ``` ### パラメータのない関数のフック クラス `sg.vantagepoint.a.c` の関数 `a()` をフックします。 ```javascript Java.perform(function () { ; rootcheck1.a.overload().implementation = function() { rootcheck1.a.overload().implementation = function() { send("sg.vantagepoint.a.c.a()Z Root check 1 HIT! su.exists()"); return false; }; }); ``` # Frida Tutorial: Hooking `exit()` in Java In this tutorial, we will learn how to use Frida to hook the `exit()` function in Java. By hooking this function, we can intercept the program's exit and perform additional actions before the application terminates. ## Prerequisites Before we begin, make sure you have the following: - A rooted Android device or an emulator - Frida installed on your machine - Basic knowledge of JavaScript and Java ## Steps 1. Start by creating a new JavaScript file, for example `hook_exit.js`, and open it in a text editor. 2. Import the necessary Frida modules: ```javascript const { Java } = require('frida'); ``` 3. Attach to the target process using Frida: ```javascript Java.perform(function () { // Code goes here }); ``` 4. Find the class and method that contains the `exit()` function. You can use the `Java.use()` function to obtain a reference to the class: ```javascript const System = Java.use('java.lang.System'); ``` 5. Hook the `exit()` method using the `System.exit.implementation` property: ```javascript System.exit.implementation = function (code) { // Code goes here this.exit(code); }; ``` 6. Inside the hook, you can add your custom logic. For example, you can log the exit code before the application terminates: ```javascript System.exit.implementation = function (code) { console.log('Exit code:', code); this.exit(code); }; ``` 7. Save the JavaScript file. 8. Launch the target application on your Android device or emulator. 9. Use Frida to inject the JavaScript code into the target process: ```bash frida -U -l hook_exit.js -f ``` Replace `` with the package name of the target application. 10. You should see the exit code being logged in the console whenever the `exit()` function is called. ## Conclusion By hooking the `exit()` function in Java using Frida, we can intercept the program's exit and perform additional actions. This technique can be useful for debugging or analyzing the behavior of an application during its termination process. ```javascript var sysexit = Java.use("java.lang.System"); sysexit.exit.overload("int").implementation = function(var_0) { send("java.lang.System.exit(I)V // We avoid exiting the application :)"); }; ``` # Frida Tutorial: メインアクティビティの `.onStart()` と `.onCreate()` をフックする このチュートリアルでは、Fridaを使用してAndroidアプリのメインアクティビティの `.onStart()` と `.onCreate()` メソッドをフックする方法を学びます。 ## 前提条件 - Fridaがインストールされていること - ターゲットとなるAndroidデバイスが接続されていること ## ステップ1: Fridaスクリプトの作成 まず、Fridaスクリプトを作成します。以下のコードを使用して、メインアクティビティの `.onStart()` と `.onCreate()` メソッドをフックするスクリプトを作成します。 ```javascript Java.perform(function() { var MainActivity = Java.use('com.example.MainActivity'); MainActivity.onStart.implementation = function() { console.log('MainActivity.onStart() メソッドが呼び出されました'); this.onStart(); }; MainActivity.onCreate.implementation = function() { console.log('MainActivity.onCreate() メソッドが呼び出されました'); this.onCreate(); }; }); ``` ## ステップ2: Fridaスクリプトの実行 次に、作成したFridaスクリプトを実行します。以下のコマンドを使用して、スクリプトを実行します。 ```bash frida -U -l script.js -f com.example.app ``` - `-U` フラグは、USB接続されたデバイスを使用することを指定します。 - `-l` フラグは、実行するFridaスクリプトのパスを指定します。 - `-f` フラグは、ターゲットとなるアプリのパッケージ名を指定します。 ## ステップ3: フックされたメソッドの確認 Fridaスクリプトが正常に実行されると、メインアクティビティの `.onStart()` と `.onCreate()` メソッドがフックされ、ログにメッセージが表示されます。 これで、Androidアプリのメインアクティビティの `.onStart()` と `.onCreate()` メソッドをフックすることができました。 ```javascript var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity"); mainactivity.onStart.overload().implementation = function() { send("MainActivity.onStart() HIT!!!"); var ret = this.onStart.overload().call(this); }; mainactivity.onCreate.overload("android.os.Bundle").implementation = function(var_0) { send("MainActivity.onCreate() HIT!!!"); var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0); }; ``` # Frida Tutorial: フック Android の `.onCreate()` このチュートリアルでは、Frida を使用して Android アプリの `.onCreate()` メソッドをフックする方法について説明します。 ## 1. Frida のセットアップ まず、Frida をセットアップする必要があります。Frida をインストールするには、以下のコマンドを実行します。 ```bash $ pip install frida-tools ``` ## 2. デバイスへの接続 Frida を使用するためには、デバイスに接続する必要があります。以下のコマンドを使用して、デバイスに接続します。 ```bash $ adb devices ``` ## 3. フックの実装 Frida を使用して `.onCreate()` メソッドをフックするために、以下のスクリプトを作成します。 ```javascript Java.perform(function() { var MainActivity = Java.use('com.example.MainActivity'); MainActivity.onCreate.implementation = function() { console.log('onCreate() メソッドがフックされました!'); // ここにフック後の処理を追加します // 元のメソッドを呼び出します this.onCreate(); }; }); ``` ## 4. フックの実行 作成したスクリプトを実行するために、以下のコマンドを使用します。 ```bash $ frida -U -f com.example.app -l script.js --no-pause ``` `com.example.app` の部分をターゲットアプリのパッケージ名に置き換えてください。`script.js` の部分を作成したスクリプトのファイル名に置き換えてください。 ## 5. 結果の確認 スクリプトが正常に実行されると、`.onCreate()` メソッドがフックされたことを示すメッセージが表示されます。フック後の処理を追加することで、必要な操作を実行することができます。 以上で、Android アプリの `.onCreate()` メソッドをフックする方法が完了です。 ```javascript var activity = Java.use("android.app.Activity"); activity.onCreate.overload("android.os.Bundle").implementation = function(var_0) { send("Activity HIT!!!"); var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0); }; ``` ### パラメータを持つ関数のフックと値の取得 復号化関数のフック。入力を表示し、元の関数を呼び出して入力を復号化し、最後に平文データを表示します。 ```javascript function getString(data){ var ret = ""; for (var i=0; i < data.length; i++){ ret += data[i].toString(); } return ret } var aes_decrypt = Java.use("sg.vantagepoint.a.a"); aes_decrypt.a.overload("[B","[B").implementation = function(var_0,var_1) { send("sg.vantagepoint.a.a.a([B[B)[B doFinal(enc) // AES/ECB/PKCS7Padding"); send("Key : " + getString(var_0)); send("Encrypted : " + getString(var_1)); var ret = this.a.overload("[B","[B").call(this,var_0,var_1); send("Decrypted : " + ret); var flag = ""; for (var i=0; i < ret.length; i++){ flag += String.fromCharCode(ret[i]); } send("Decrypted flag: " + flag); return ret; //[B }; ``` ### ファンクションのフックと入力を使用した呼び出し 関数をフックして、文字列を受け取り、他の文字列で呼び出します([こちら](https://11x256.github.io/Frida-hooking-android-part-2/)から)。 ```javascript var string_class = Java.use("java.lang.String"); // get a JS wrapper for java's String class my_class.fun.overload("java.lang.String").implementation = function(x){ //hooking the new function var my_string = string_class.$new("My TeSt String#####"); //creating a new String by using `new` operator console.log("Original arg: " +x ); var ret = this.fun(my_string); // calling the original function with the new String, and putting its return value in ret variable console.log("Return value: "+ret); return ret; }; ``` ### クラスの既存オブジェクトの取得 作成済みのオブジェクトの属性を抽出したい場合は、これを使用できます。 この例では、クラスmy\_activityのオブジェクトを取得し、オブジェクトのプライベート属性を表示する関数.secret()を呼び出す方法を示します。 ```javascript Java.choose("com.example.a11x256.frida_test.my_activity" , { onMatch : function(instance){ //This function will be called for every instance found by frida console.log("Found instance: "+instance); console.log("Result of secret func: " + instance.secret()); }, onComplete:function(){} }); ``` **バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これはハッカーによって作成されたプレミアムな**バグバウンティプラットフォーム**です!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**の報酬を獲得しましょう! {% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。これは私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**。