天天看點

frida 免root hook 1) frida gadget so注入app

frida免root hook 1) frida gadget嵌入app

可能有的大佬并不知道 frida gadget是個啥。

這裡先看看官方對于gadget的解釋

官方連結 https://frida.re/docs/gadget/

frida 免root hook 1) frida gadget so注入app

這句英語意思大概意思是:

frida Gadget是一個動态庫,如果注入不适用于目前場景 (一般是被檢測 或者沒 root),就用程式加載這個庫來達到hook的效果。

大家好,我是王鐵頭 一個乙方安全公司搬磚的菜雞

持續更新移動安全,iot安全,編譯原理相關原創視訊文章

視訊示範:https://space.bilibili.com/430241559

frida gadget使用場景

  1. 免root 使用 frida
  2. 反調試 反root 反frida 很強,繞不過去的時候
  3. frida 持久化 hook

frida gadget 支援的連接配接方式

官網文檔支援的互動方式有4種

frida 免root hook 1) frida gadget so注入app
  1. Listen: 預設的連接配接方式, 類似frida-server那種,可以指定端口,frida -U gadget 連接配接,電腦端操作
  2. Connect: 我愣是沒看懂 看懂了再過來改
  3. Script: 直接執行注入腳本,js注入腳本要放到手機目錄
  4. ScriptDirectory:腳本目錄,類似全局hook, 可以用libart之類的so 加載 gadget,可以指定哪個腳本注入哪個app (沒測試)

這裡示範第3種 Script 直接執行注入腳本這種連接配接方式

後續有空會把上面的各種方式都寫一下

app一般分為有so庫和無so庫

這篇文章示範有so庫的情況

frida Gadget script腳本連接配接(有so庫) 步驟

  1. 下載下傳 frida gadget.so
  2. app so添加依賴 加入 frida gadget.so
  3. 配置 frida gadget 的config檔案
  4. 編寫注入js
  5. 打包新apk執行

1.下載下傳 frida gadget.so

去哪裡下載下傳呢?

當當當當

當然是全球最大同性交友網站 github

frida 免root hook 1) frida gadget so注入app

直接去frida的github倉,點選 release 找想要的版本去下載下傳就可

連結 https://github.com/frida/frida/releases

frida 免root hook 1) frida gadget so注入app

2.app so添加依賴 加入 frida gadget.so

這一步的原理就是,讓app在執行so的檔案的時候,加載frida-gadget.so

大部分so檔案,在運作的時候,都有一些依賴庫。

這一步就是把 frida gadget.so加入到apk 本身so的依賴庫中。

這一步很多大佬是用 lief實作的。

實際上實作這一步的辦法挺多的。

喜歡用ubuntu的可以安裝 patchelf 然後一行指令就搞定了

patchelf位址:https://github.com/NixOS/patchelf

patchelf --add-needed frida-gadget.so apk.so 
           

so easy ,再也不用擔心你不會添加依賴了。

執行個體示範:

看看這裡的示例apk

frida 免root hook 1) frida gadget so注入app

wtt這個示例apk裡面有一個 so libnative-lib.so

這裡,直接給 libnative-lib.so添加frida-gadget.so 依賴庫

frida 免root hook 1) frida gadget so注入app

為了防止檢測,frida這特征也太大了,很容易被檢測 被針對

最好把這個so改個名字,比如 libcaiji.so 改名後如下圖

frida 免root hook 1) frida gadget so注入app

運作 patchelf 添加依賴庫

frida 免root hook 1) frida gadget so注入app

沒有添加依賴庫之前,依賴庫如下

frida 免root hook 1) frida gadget so注入app

搞完之後 拖進ida看一下 依賴庫,這裡可以看到多了一個依賴so

libcaiji.so 就是 frida-gadget.so改名後的so

frida 免root hook 1) frida gadget so注入app

當然這一步也可以用lief

先安裝

pip install lief
           
frida 免root hook 1) frida gadget so注入app

這裡 很多大佬直接給出了代碼 但是每次都得改代碼就好麻煩

我直接寫了個腳本 直接讀取指令行參數執行

import sys
import lief

str_so_apk = sys.argv[1]
str_so_gadget = sys.argv[2]

libnative = lief.parse(str_so_apk)
libnative.add_library(str_so_gadget) # Injection!
libnative.write(str_so_apk)
           

儲存成 inject.py

指令格式如下

python inject.py apk的so  注入的so名
           

執行

frida 免root hook 1) frida gadget so注入app

執行完之後看一下依賴

frida 免root hook 1) frida gadget so注入app

成功添加

3.配置 frida gadget 的config

這裡這篇文章主要是 執行腳本

關于用gadget.so執行腳本

看看官方文檔的介紹,機器翻譯還是有點問題的,湊合看吧

frida 免root hook 1) frida gadget so注入app

這裡我按照官方的示例,寫了一個配置檔案

配置檔案名 libcaiji.config.so

這裡, 注意配置檔案命名的格式,一定是你改名後的名字 + .config.so

libxxx.so
libxxx.config.so
           

官方文檔是這麼描述的

frida 免root hook 1) frida gadget so注入app

這裡,按照上面的格式

修改後的so名為 libcaiji.so

配置檔案的名字為: libcaiji.config.so

腳本代碼如下

{
  "interaction": {
    "type": "script",
    "path": "/data/local/tmp/hook.js"
  }
}
           
frida 免root hook 1) frida gadget so注入app

這裡雖然字尾名是 .so 内容其實是json配置檔案,這點要注意

4.編寫注入js

原apk的代碼如下

frida 免root hook 1) frida gadget so注入app

apk正常運作是這樣的

frida 免root hook 1) frida gadget so注入app

這裡 編寫一個注入的js

把 彈窗顯示的 aaa 改成 bbb

這裡 直接 hook com.wangtietou.no_root.MainActivity 的 aaa 方法

改下傳回值就可以了

hook代碼如下

var str_name_class = "com.wangtietou.no_root.MainActivity";

Java.perform(function()
{
    var obj = Java.use(str_name_class);

    obj.aaa.implementation = function ()
    {
        return "bbb";
    }
});

           

寫完js 把注入腳本放到之前配置的路徑下

frida 免root hook 1) frida gadget so注入app

這裡 /data/local/tmp/hook.js 是之前配置檔案配置過的路徑

一定要寫對,不然,找不到執行的js, 怎麼hook ,涼涼

5.打包簽名新apk執行

這裡把 改名後的 frida-gadget.so 和 配置檔案放到lib目錄

再壓縮

然後簽名

就可以了

這裡沒有修改 dex檔案 也沒有修改 AndroidManifest.xml 是以并不用使用apktool重新打包

這個例子隻有一個 依賴庫架構 是 armv7a 那麼隻修改這一個架構就可以了

frida 免root hook 1) frida gadget so注入app

如果是多個架構,那就要都改 下面這個例子有2個架構 armv7 armv8

不确定運作平台的前提下 最好兩個都改了 這裡看一下前後的對比

frida 免root hook 1) frida gadget so注入app

把修改後的apk目錄 壓縮一下就可以了

frida 免root hook 1) frida gadget so注入app

搞完後 用 apktoolbox重新簽個名就ojbk了

frida 免root hook 1) frida gadget so注入app
frida 免root hook 1) frida gadget so注入app

安裝app執行 看一下效果

frida 免root hook 1) frida gadget so注入app

上面搞了這麼多,實際上還有更簡單的辦法

有大佬早就寫好了一鍵腳本

文章位址:https://bbs.pediy.com/thread-268175.htm

腳本位址:https://github.com/nszdhd1/UtilScript/

隻不過,腳本用起來不太靈活。

我準備把腳本改改,讓腳本用起來更友善。

搞完會分享給大佬們的。.

這個文章用到的所有檔案,周末會錄個視訊,然後一起發上去。

方案要注意的點

1.簽名校驗

修改apk後,簽名會發生變化,apk如果有簽名校驗的話,要繞過簽名校驗

2.hook時機

這裡導入的so 一定要在 要hook的函數執行之前導入

要不然,要hook的函數都執行完了,你的so才導入,hook個錘子

3.so架構

如果app so支援多個架構,不确定具體執行平台的話,建議每個架構都操作一波

方案優點

1.有效繞過大部分反調試 反root 反frida

在沒有root的手機上運作,反root對你而言就是不存在的

用 gadget去注入,frida的大部分特征也沒了 能繞過大部分 反調試 反frida

2.持久化hook

直接嵌入app 相當于源碼級修改 體驗很好

持續更新移動安全,iot安全,編譯原理相關原創視訊文章

視訊示範:https://space.bilibili.com/430241559

相關資料關注公衆号 回複 frida 下載下傳:

frida 免root hook 1) frida gadget so注入app

繼續閱讀