【逆向學習記錄】Frida-Hook學習筆記

概述

最近接觸了很多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,這個後面再補充,還沒有研究好

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章