frida hook 類所有方法(ZenTracker)
大家好,我是王鐵頭 一個乙方安全公司搬磚的菜雞
持續更新移動安全,iot安全,編譯原理相關原創視頻文章
今天分享的是frida hook 類的所有方法
視頻演示:
https://space.bilibili.com/430241559
應用場景
在逆向的時候 有時候想要知道一個類的方法啥時候被調用,假設我們要分析的類有10個方法,那么10個方法用frida一個一個寫hook方法也比較麻煩 這時候有三種方法
- 使用frida 寫個十幾行代碼
- 用Objection命令行工具 一行代碼
- 使用ZenTracker這個圖形化工具 點幾下完事
1 frida hook所有方法代碼
Java.perform(function(){
//hook 類所有方法
var str_cls_name = "com.example.test_tracker.Test"; //類名
//獲取類的所有方法
var cls = Java.use(str_cls_name);
var mhd_array = cls.class.getDeclaredMethods();
//hook 類所有方法 (所有重載方法也要hook)
for (var i = 0; i < mhd_array.length; i++)
{
var mhd_cur = mhd_array[i]; //當前方法
var str_mhd_name = mhd_cur.getName(); //當前方法名
//console.log(str_mhd_name);
//當前方法重載方法的個數
var n_overload_cnt = cls[str_mhd_name].overloads.length;
//console.log(n_overload_cnt);
for (var index = 0; index < n_overload_cnt; index++)
{
cls[str_mhd_name].overloads[index].implementation = function ()
{
//參數個數
var n_arg_cnt = arguments.length;
/*
for (var idx_arg = 0; idx_arg < n_arg_cnt; n_arg_cnt++)
{
console.log(arguments[idx_arg]);
}
*/
console.log(str_mhd_name + '--' + n_arg_cnt);
return this[str_mhd_name].apply(this, arguments);
}
}
}
});
.
2 Objection命令 hook所有方法
//com.xx.xx 是你要hook的類
android hooking watch class com.xxx.xxx
.
3 ZenTracker圖形化工具 hook所有方法
雖然作者的原意並不是hook一個類的所有方法,但是工具這東西還是活學活用比較好。
項目地址
https://github.com/hluwa/ZenTracer
圖形界面
可以看到效果還是比較直觀的
容易忘記的一點:
啟動frida_server
既然是一個封裝了frida的工具 那肯定手機要啟動frida-server才能工作
踩坑記錄
這里雖然工具確實比較好用,在很多文章里面大佬們確實也沒遇到什么問題 這里可能因為他們比較有錢用的是 Mac吧
我這種底層菜雞當然買不起Mac,只能用辣雞筆記本維持生活,用的也是windows系統, 所以這里就出了一些吊詭問題
1) 大坑 找不到設備
這里 如果確定設備已經連接,解決方法:點擊stop。在我其中一台筆記本上面測試時,點擊stop后,成功附加進行了hook.當然正常情況點擊stop應該是退出
2) 大坑 絕對路徑的問題
解決方法:ZenTracer.py第258行 手動修改路徑為絕對路徑
測試詳情
測試軟件界面
測試軟件代碼
1.方法代碼
2.調用代碼
效果圖
點擊按鈕后的效果圖
視頻演示:https://space.bilibili.com/430241559
相關代碼資料 關注公眾號 [移動安全王鐵頭] 回復關鍵字 frida 下載:
持續更新移動安全,iot安全,編譯原理相關原創視頻文章