概述
最近接觸了很多Frida的Hook的東西,沒有時間做詳細筆記,這裏僅僅針對看過的文章做個記錄,以便後續可以翻閱查閱,
僅供自己查閱使用
參考文章
關於SSLpin的hook,這是最全的一篇 https://paper.tuisec.win/detail/e10c553d9c9f0ca
關於Frida 的Hook基本學習的話,這是最全的一篇:http://www.ninoishere.com/frida-learn-by-example/
關於Frida針對的hook詳細動手的案例,這裏有個不錯的案例:https://blog.csdn.net/zouyuanxc/article/details/80492465
Hook常見問題
自己在Hook過程中遇到的問題:
1,interface的接口就不要Hook了,Hook的話需要自己實現一個對象,然後再進行實現
2,關於函數的參數寫錯了,也不用着急,或者不知道怎麼寫也不用着急,Overload使用之後,Frida運行過程中,仔細觀察Log輸出,進行糾正就行了,直接保存,不用重啓,Frida會自動讀取
Error: c(): specified argument types do not match any of:
.overload('com.xxx.IHttpCallback')
.overload('long', 'com.xxxxs.IHttpCallback')
.overload('java.util.Map', 'com.xxxs.IHttpCallback')
.overload('java.lang.String', 'com.xxxs.IHttpCallback')
.overload('java.lang.String', 'java.lang.String', 'int', 'com.xxxs.IHttpCallback')
overload有以下幾種參數類別,沒有必要都記住的,隨時都可以參考
.overload()
.overload('java.lang.String')
.overload('android.app.Activity')
.overload('int')
.overload('[B') // byte array
.overload('float')
.overload('android.content.Context')
.overload('[C')
.overload('android.content.Context', 'android.view.View')
.overload('android.app.Activity', 'com.cherrypicks.hsbcpayme.model.object.PayMeNotification')
.overload('android.content.Context', 'boolean')
.overload('android.content.Context', 'int')
.overload('android.content.Context', 'java.lang.String')
.overload('android.app.Activity', 'int')
.overload('java.lang.String', 'java.lang.String')
.overload('android.content.Context', 'android.graphics.Bitmap')
.overload('java.lang.String', 'java.io.File')
.overload('android.content.Context', 'java.lang.String', 'java.util.List')
.overload('java.lang.String', 'java.lang.String', 'java.lang.String')
.overload('java.lang.String', '[B', '[B')
.overload('java.lang.String', 'java.lang.String', 'android.content.Context')
.overload('android.app.Activity', 'com.cherrypicks.hsbcpayme.model.object.PayMeNotification', 'int')
.overload('[B', '[B', '[B')
.overload('android.content.Context', 'java.lang.String', 'java.lang.String')
.overload('android.app.Activity', 'int', 'int', 'int', 'boolean')
3,Hook過程中,同一個包名的PID可能會有多個,沒有辦法,只能一個一個嘗試,一般這種情況下,會有一個主進程,找到那個PID就好了
4,很多時候Hook asset文件會有出其不意的效果,部分代碼如下:
使用-U 是不需要進行端口轉發的,-R才需要的
frida -U -p xxxxx -l hookA.js
Java.perform(function () {
var AssetManager = Java.use("android.content.res.AssetManager");
var FileInputStream = Java.use("java.io.FileInputStream");
AssetManager.open.overload("java.lang.String").implementation = function(str) {
send("hook asset")
if(str.endsWith(".xxx")){
return FileInputStream.$new("/data/local/tmp/xxxxx");
}
return this.open(str)
}
});
Hook最重要的還是要了解業務,找到特殊的函數,不然空有技術,找不到入口,也是沒有用的
找入口的話,可以嘗試AndroidStudio的佈局,Trace等進行跟蹤,進行輔助測試
關於Native的Hook,這個後面再補充,還沒有研究好