frida 免 root hook
本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
因为相信, 所以看见
答疑,就是在每周四,把问的比较多的,统一回答下。
写文章也会比私信回复更详细些。
本来应该是昨天发的,昨天睡觉去了,拖到了今天。
0
序言
可能有的大佬并不知道 frida gadget 是个啥。
这里先看看官方对于 gadget 的解释
官方链接
这句英语意思大概意思是:
frida Gadget 是一个动态库,如果注入不适用于当前场景 (一般是被检测 或者没 root),就用程序加载这个库来达到 hook 的效果。
frida gadget 使用场景
- 免 root 使用 frida
- 反调试 反 root 反 frida 很强,绕不过去的时候
- frida 持久化,frida gadget 直接嵌入 app 不用每次打开 frida_server 了
这里用一个案例演示 frida 免 root 注入
app 一般分为有 so 库和无 so 库,这篇文章演示有 so 库的情况。
连接方式一般分为等待连接 和 直接执行脚本,**这篇文章演示****直接执行脚本**。
主要分为以下几个步骤
1
下载 frida gadget.so
2
app so 添加依赖 加入 frida gadget.so
3
编写 frida gadget config 配置文件
4
编写注入 js
5
打包新 apk 执行
1
下载 frida gadget.so
去哪里下载呢?
当当当当
当然是全球最大同性交友网站 ** github**
直接去 frida 的 github 仓,点击 release 找想要的版本 去下载就可
链接 https://github.com/frida/frida/releases
2
app so 添加依赖 加入 frida gadget.so
这一步的原理是,让 app 在执行 so 的文件的时候,加载 frida-gadget.so
大部分 so 文件,在运行的时候,都有一些依赖库。
这一步就是把 frida gadget.so 加入到 apk 本身 so 的依赖库中。
这一步很多大佬是用 lief 实现的。
实际上实现这一步的办法挺多的。
喜欢用 ubuntu 的,可以安装 patchelf 然后一行命令就搞定了
patchelf 地址:https://github.com/NixOS/patchelf
patchelf --add-needed frida-gadget.so apk.so
so easy , 再也不用担心你不会添加依赖了。
实例演示:
看看这里的示例 apk
apk 只有 armv7 的 so 文件 其他都没有
wtt.apk 里面有一个 so libnative-lib.so
这里,直接给 libnative-lib.so 添加 frida-gadget.so 依赖库
为了防止检测,frida 这特征也太明显了,很容易被检测 被针对
最好把这个 so 改个名字,比如 libcaiji.so 改名后如下图
运行 patchelf 添加依赖库
没有添加 frida-gadget.so 依赖库之前, libnative-lib.so 的依赖库如下
搞完之后 拖进 ida 看一下 libnative-lib.so 的依赖库
这里可以看到多了一个依赖 so
libcaiji.so 就是 frida-gadget.so 改名后的 so
3
编写 frida gadget config 配置文件
关于用 gadget.so 直接执行脚本
官方文章是有介绍的,机器翻译还是有点问题的,凑合看吧
这里我按照官方的示例,写了一个配置文件
配置文件名 libcaiji.config.so
这里, 注意配置文件命名的格式,一定是你改名后的名字 + .config.so
libxxx.so
libxxx.config.so
关于命名规则,官方文档是这么描述的
这里,按照上面的格式
修改后的 so 名为:libcaiji.so
配置文件的名字为:libcaiji.config.so
配置文件代码如下
{
"interaction": {
"type": "script",
"path": "/data/local/tmp/hook.js"
}
}
这里虽然后缀名是 .so 内容其实是 json 配置文件,这点要注意
4
编写注入 js
原 apk 的代码如下
apk 正常运行是这样的
这里 编写一个注入的 js
把 弹窗显示的 aaa 改成 bbb
这里 直接 hook com.wangtietou.no_root.MainActivity 的 aaa 方法
改下返回值就可以了
hook.js 代码如下
var str_name_class = "com.wangtietou.no_root.MainActivity";
Java.perform(function()
{
var obj = Java.use(str_name_class);
obj.aaa.implementation = function ()
{
return "bbb";
}
});
写完 js 把注入脚本放到之前配置的路径下
这里 /data/local/tmp/hook.js
是之前配置文件配置过的路径
一定要写对,不然,找不到执行的 js, 怎么 hook ,凉凉
5
打包签名新 apk 执行
这里把 改名后的 frida-gadget.so 和 配置文件, 放到 lib 下面 libnative-lib.so 同级目录
再压缩
然后签名
就可以了
这里没有修改 dex 文件 也没有修改 AndroidManifest.xml 所以并不用使用 apktool 重新打包
把修改后的 apk 目录 压缩一下就可以了
搞完后 用 apktoolbox 重新签个名就 ojbk 了
安装 app 执行 看一下效果
bingo, 成功在没有 root 的手机上用 frida 进行了 hook
6
结束语
上面搞了这么多,实际上还有更简单的办法
有大佬早就写好了一键脚本
文章地址:https://bbs.pediy.com/thread-268175.htm
脚本地址:https://github.com/nszdhd1/UtilScript/
只不过,脚本用起来不太灵活。
我准备把脚本改改,让脚本用起来更方便。
搞完会分享给大佬们的。
这个文章用到的所有文件,周末会录个视频,然后一起发上去。
以上。
王某某 2021.0903 于十平米出租屋。
关于作者:
一个乙方安全公司搬砖的菜鸡,移动安全从业者。
最近忙着找女票,忙着在 b 站当扑街 up 主。
b 站 / 公众号 : 移动安全王铁头
希望和大佬们一起学习,一起成长
点个
在看
你最好看