# 使用內建 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
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` 等相關指令。因為在這個環境下，您無需進行任何操作，只要執行 `frida` 即可，無需提供任何其他的連線參數，如 `-U`、`-H` 等。

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

既然您已經看到這裡，那就代表您仍然想在電腦端使用該指令。現在，您需要根據安裝情況整理一些資訊。
如果您的 FIRERPA 啟動時使用了服務憑證，您需要準備好該檔案。此外，您還需要準備好要連線的裝置的 IP 位址和 FIRERPA 服務連接埠（預設為 65000）。請注意，這個連接埠不是 Frida 的 27042 連接埠，而是 FIRERPA 服務的連接埠，您只需要連線到 FIRERPA 即可。

首先，您需要先使用 API 取得目前的 token。該 token 為一個固定的 16 位字串，例如 `czvpyqg82dk0xrnj`。我們了解這個方式可能比較麻煩，後期可能會做一些易用性的變更，這也是為什麼我們前面建議您在遠端桌面中使用 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
```

您可能發現了，其實差別只有三個：`-U` 變成了 `-H`，因為我們需要透過網路而不是 USB 進行連線；多了 `--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 匯出介面` 章節。