https://www.python.org/ftp/python/3.9.7/python-3.9.7-amd64.exe
python 3.9.7
https://github.com/frida/frida/
frida-server
https://codechina.csdn.net/explore
國內GitHub鏡像庫,更新速度有點慢,新版的frida向下兼容frida-server。
本機安裝工具版本為:
- Python 3.9.7
- frida 15.1.8
- 雷電模擬器3.114.0(模擬器測試失敗)
- pixel 3 XL Android 10
啟動frida-server提示未開啟,通過排查,使用adb shell連接模擬器getprop ro.product.cpu.abi命令查看后,模擬器為X86架構,非X86-64,所以造成啟動失敗。
使用命令修改權限為755並啟動frida-server
adb shellcd /data/local/tmp/chmod 777 frida-server
./frida-server
端口映射
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
更換frida-server后,通過frida-ps -R指令可以連接。
安裝編寫的測試demo程序,輸入值相加。
hook獲取其add參數值,得到參數值,改變其提示結果。
學習編寫frida hook腳本:
https://blog.csdn.net/zhy025907/article/details/89512096
java代碼相關hook代碼中相關部分,達成獲取其輸入值,改變其提示結果。
com.example.myapplication.MainActivity.add
編寫frida hook腳本達成目的,進程名與包名不同,hook一直失敗,嘗試編譯apk
if(Java.available){
Java.perform(function(){
var Class = Java.use("com.example.myapplication.MainActivity");
if (Class != undefined){
console.log('開始hook app');
Class.add.implementation=function(){
var JavaString =Java.use("java.lang.String");
var ret = this.add.apply(this, arguments);
console.log("a1=" + arguments[0]);
console.log("a2=" + arguments[1]);
var ret=this.add(123,123);
console.log("result=",ret);
return ret;
}
}
});
}
通過firda運行 hook腳本,達成hook結果,通過console.log("a1=" + arguments[0]);
console.log("a2=" + arguments[1]);獲取輸入的值,通過修改var ret=this.add()傳入的值,達成修改計算結果。
- frida工具Objection
- 只是提供了各種供我們調用,在此基礎之上可以實現具體的功能,比如禁用證書綁定之類的腳本,就是使用的各種來組合編寫而成。於是有大佬將各種常見、常用的功能整合進一個工具,供我們直接在命令行中使用,這個工具便是。
- 功能強大,命令眾多,而且不用寫一行代碼,便可實現諸如內存搜索、類和模塊搜索、方法打印參數返回值調用棧等常用功能,是一個非常方便的,逆向必備、內存漫游神器。
- 使用pip指令進行安裝 python -m pip install objection
- https://blog.csdn.net/song_lee/article/details/108993169https://www.anquanke.com/post/id/197657
幾個基本操作:
help指令:在當前命令前加比如,,回車之后會出現當前命令的解釋信息;
空格:不知道輸入什么就按空格,會有提示出來,上下選擇之后再按空格選中,又會有新的提示出來;
jobs:作業系統很好用,建議一定要掌握,可以同時運行多項作業;
使用objection需要在手機上啟動frida-sesver,再使用objection注入需要hook的應用
objection -g <包名> explore
Memory 指令
memory list modules //枚舉當前進程模塊
memory list exports [lib_name] //查看指定模塊的導出函數
memory list exports libart.so --json /root/libart.json //將結果保存到json文件中
memory search --string --offsets-only //搜索內存
android heap 指令
//堆內存中搜索指定類的實例, 可以獲取該類的實例id
search instances search instances com.xx.xx.class
//直接調用指定實例下的方法
android heap execute [ins_id] [func_name]
//自定義frida腳本, 執行實例的方法
android heap execute [ins_id]
android 指令
android root disable //嘗試關閉app的root檢測
android root simulate //嘗試模擬root環境
android ui screenshot [image.png] //截圖
android ui FLAG_SECURE false //設置FLAG_SECURE權限
內存漫游
android hooking list classes //列出內存中所有的類
//在內存中所有已加載的類中搜索包含特定關鍵詞的類
android hooking search classes [search_name]
//在內存中所有已加載的方法中搜索包含特定關鍵詞的方法
android hooking search methods [search_name]
//直接生成hook代碼
android hooking generate simple [class_name]
hook 方式
/*
hook指定方法, 如果有重載會hook所有重載,如果有疑問可以看
--dump-args : 打印參數
--dump-backtrace : 打印調用棧
--dump-return : 打印返回值
*/
android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return
//hook指定類, 會打印該類下的所有調用
android hooking watch class com.xxx.xxx
//設置返回值(只支持bool類型)
android hooking set return_value com.xxx.xxx.methodName false
Spawn 方式 Hook
objection -g packageName explore --startup-command '[obejection_command]'
activity 和 service 操作
android hooking list activities //枚舉activity
android intent launch_activity [activity_class] //啟動activity
android hooking list services //枚舉services
android intent launch_service [services_class] //啟動services
任務管理器
jobs list // 查看任務列表
jobs kill [task_id] // 關閉任務
關閉 app 的 ssl 校驗
android sslpinning disable
監控系統剪貼板
// 獲取Android剪貼板服務上的句柄並每5秒輪詢一次用於數據。
// 如果發現新數據,與之前的調查不同,則該數據將被轉儲到屏幕上。
help android clipboard
執行命令行
help android shell_exec [command]
https://www.jianshu.com/p/c443ad5ace9bhttps://blog.csdn.net/freeking101/article/details/107749541
查看當前可用的activity或者service
android hooking list activities/services
直接啟動activity或者服務
android intent launch_activity com.android.settings.DisplaySettings
這個命令比較有趣的是用在如果有些設計的不好,可能就直接繞過了密碼鎖屏等直接進去。