【逆向学习记录】Frida-Hook学习笔记

  • A+
所属分类:移动安全

概述

最近接触了很多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')123456

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')12345678910111213141516171819202122232425

3,Hook过程中,同一个包名的PID可能会有多个,没有办法,只能一个一个尝试,一般这种情况下,会有一个主进程,找到那个PID就好了

4,很多时候Hook asset文件会有出其不意的效果,部分代码如下:
使用-U 是不需要进行端口转发的,-R才需要的

frida -U -p xxxxx -l hookA.js1
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)
    }});1234567891011

Hook最重要的还是要了解业务,找到特殊的函数,不然空有技术,找不到入口,也是没有用的
找入口的话,可以尝试AndroidStudio的布局,Trace等进行跟踪,进行辅助测试

关于Native的Hook,这个后面再补充,还没有研究好

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: