frida hook 类所有方法(ZenTracker)


frida hook 类所有方法(ZenTracker)

大家好,我是王铁头 一个乙方安全公司搬砖的菜鸡
持续更新移动安全,iot安全,编译原理相关原创视频文章

今天分享的是frida hook 类的所有方法

视频演示:
https://space.bilibili.com/430241559

应用场景

在逆向的时候 有时候想要知道一个类的方法啥时候被调用,假设我们要分析的类有10个方法,那么10个方法用frida一个一个写hook方法也比较麻烦 这时候有三种方法

  1. 使用frida 写个十几行代码
  2. 用Objection命令行工具 一行代码
  3. 使用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) 大坑 找不到设备

frida hook所有方法

这里 如果确定设备已经连接,解决方法:点击stop。在我其中一台笔记本上面测试时,点击stop后,成功附加进行了hook.当然正常情况点击stop应该是退出

2) 大坑 绝对路径的问题

解决方法:ZenTracer.py第258行 手动修改路径为绝对路径

测试详情

测试软件界面

测试软件代码

1.方法代码

2.调用代码

效果图

点击按钮后的效果图

视频演示:https://space.bilibili.com/430241559

相关代码资料 关注公众号 [移动安全王铁头] 回复关键字 frida 下载:

持续更新移动安全,iot安全,编译原理相关原创视频文章