frida hook 类所有方法(ZenTracker)
大家好,我是王铁头 一个乙方安全公司搬砖的菜鸡
持续更新移动安全,iot安全,编译原理相关原创视频文章
今天分享的是frida hook 类的所有方法
视频演示:
https://space.bilibili.com/430241559
应用场景
在逆向的时候 有时候想要知道一个类的方法啥时候被调用,假设我们要分析的类有10个方法,那么10个方法用frida一个一个写hook方法也比较麻烦 这时候有三种方法
- 使用frida 写个十几行代码
- 用Objection命令行工具 一行代码
- 使用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) 大坑 找不到设备
这里 如果确定设备已经连接,解决方法:点击stop。在我其中一台笔记本上面测试时,点击stop后,成功附加进行了hook.当然正常情况点击stop应该是退出
2) 大坑 绝对路径的问题
解决方法:ZenTracer.py第258行 手动修改路径为绝对路径
测试详情
测试软件界面
测试软件代码
1.方法代码
2.调用代码
效果图
点击按钮后的效果图
视频演示:https://space.bilibili.com/430241559
相关代码资料 关注公众号 [移动安全王铁头] 回复关键字 frida 下载:
持续更新移动安全,iot安全,编译原理相关原创视频文章