# 内蔵Fridaの使用

FIRERPAには最新バージョンのFridaが内蔵されているため、ご自身でfrida-serverを起動する必要はありません。内蔵のFridaには、様々なオープンソースの隠蔽パッチや、私たちが独自に追加した様々な隠蔽機能がすでに組み込まれているため、Fridaが検出される心配はありません。もし内蔵のFridaが検出されるようなことがあれば、それは、一般に入手可能なほぼすべてのfrida-serverも同様に検出を免れないということです。ですので、安心してご利用ください。これらの雑多な事柄について心配する必要はありません。

```{hint}
FIRERPAはバージョン7.18から、内蔵FRIDAへの接続にtokenパラメータが必要になりました。もちろん、クライアントライブラリがすべてを処理してくれるのでご安心ください。7.18より前のバージョンを使用している場合は、[旧バージョンのドキュメント](https://github.com/firerpa/lamda/tree/5.0#连接内置的-frida)で使用方法を確認してください。
```

```{attention}
バージョン9.0以降、内蔵されているfrida 17.xを使用する場合、frida-java-bridgeをスクリプトに自身でパッケージングする必要があります。そうしないと、`Java not defined`関連のエラーが発生します。この変更はfrida公式の変更によるもので、公式の変更説明に基づき、nodejsプロジェクトを新規作成してjava bridgeを導入する必要があります。詳細は https://github.com/oleavr/frida-agent-example を参照するか、私たちが提供する `tools/frida_script_generate.py` を使用して元のjsスクリプトを再度ラップしてください。
```

## コードからの使用

FIRERPAクライアントAPIを使用する場合、以下のように`d.frida`を使用するだけで、frida-serverに接続されたインスタンスを取得できます。fridaライブラリを使用して接続を自前で構築する必要はありません。

```python
conn = d.frida
conn.enumerate_processes()
```

もちろん、その内部実装について知りたい場合は、以下のコードを参考にすることもできます。

```python
# 動的トークンを取得
token = d._get_session_token()

manager = frida.get_device_manager()
conn = manager.add_remote_device("192.168.0.2:65000", token=token)
conn.enumerate_processes()
```

残りの作業は、ご自身の使い方次第です。これで、正常にインスタンスを取得できました。

## コマンドラインからの使用

コマンドラインからの使用は、デバイスのセキュリティを確保する必要があるため、操作が少し複雑になる場合があります。また、他の記事で紹介されているコマンドに思考を限定されないよう、ご注意ください。多くの記事ではfridaコマンドに`-U`パラメータが含まれていますが、ここでは使用しません。接続できない場合は、コマンドがサンプル通りに厳密に使用されていることを確認してください。

始める前に、リモートデスクトップ経由で`frida`、`frida-itrace`、`frida-trace`、`frida-ps`などの関連コマンドを使用することを強くお勧めします。この環境では、`-U`や`-H`などの接続パラメータを提供する必要がなく、単に`frida`を実行するだけで済みます。

![Frida](/assets/images/frida-remote-desktop.png)

ここまで読み進めたということは、引き続きPCでコマンドを使用したいということでしょう。まず、インストール状況に応じていくつかの情報を整理する必要があります。
FIRERPAの起動時にサービス証明書を使用した場合は、そのファイルを用意する必要があります。また、接続するデバイスのIPアドレスとFIRERPAのサービスポート（デフォルトは65000）も必要です。注意点として、このポートはFridaの27042ポートではなく、FIRERPAのサービスポートです。FIRERPAに接続するだけで問題ありません。

まず、APIを使用して現在のtokenを取得する必要があります。このtokenは`czvpyqg82dk0xrnj`のような固定16桁の文字列です。この方法が少し面倒であることは承知しており、将来的には使いやすさを改善する可能性があります。これが、上記でリモートデスクトップでfrida関連コマンドを使用することをお勧めした理由です。

```python
token = d._get_session_token()
print (token)
```

さて、上記のインターフェースからtokenを取得したとします。仮にそれが`czvpyqg82dk0xrnj`だとしましょう。これからfridaコマンドを作成していきます。
すべてのfrida公式コマンドラインツールでは、デフォルトで`-H 192.168.0.2:65000`と`--token xxxxxxxxxxxxxxxx`のパラメータを追加するだけで済みます。例えば以下のようになります。**特に、特に、特に注意**してほしいのは、ここには`-U`パラメータがないことです。

```bash
frida -H 192.168.0.2:65000 -f com.android.settings --token xxxxxxxxxxxxxxxx
```

FIRERPAサーバーの起動時にサービス証明書も使用した場合は、コマンドに`--certificate`パラメータを追加する必要があります。

```bash
frida -H 192.168.0.2:65000 -f com.android.settings --certificate /path/to/lamda.pem --token xxxxxxxxxxxxxxxx
```

お気づきかもしれませんが、違いは3つだけです。USBではなくネットワーク経由で接続するため、`-U`が`-H`に変わりました。そして、`--token`パラメータが追加されました。さらに、サーバーサイドでサービス証明書が有効になっている場合は、不正なアクセスからデバイスのセキュリティを確保するために、`--certificate`パラメータも追加されます。

## コマンドラインからの使用（objection）

objectionなどの他のツールでも、通常は上記のようなパラメータが提供されています。しかし、多くの非標準ツールではこれらのパラメータが完全に追加されているわけではありません。現在、私たちはobjectionに対してのみパッチを適用しており、元の使用方法には影響しません。しかし、objectionは長期間更新されていないため、このパッチは本家には送られていません。私たちが提供する [objection-1.11.0-command-patch.diff](https://github.com/firerpa/lamda/blob/8.0/tools/objection-1.11.0-command-patch.diff) をご自身でダウンロードし、インストール済みのobjectionのコードディレクトリに適用してください（インストールパスは`pip3 show objection`コマンドで確認できます）。

その後、以下のように使用できます。`--token`パラメータが追加されただけであることがわかります。

```bash
objection -N -h 192.168.0.2 -p 65000 --token xxxxxxxxxxxxxxxx explore
```

または、サーバーサイドでサービス証明書を使用して起動した場合は、コマンドに`--certificate`を追加する必要があります。

```bash
objection -N -h 192.168.0.2 -p 65000 --certificate /path/to/lamda.pem --token xxxxxxxxxxxxxxxx explore
```

## アプリケーションインターフェースの公開

このセクションは `Fridaを使用してインターフェースをエクスポートする` の章に移動しました。