frida 免 root hook

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com

因为相信, 所以看见

答疑,就是在每周四,把问的比较多的,统一回答下。

写文章也会比私信回复更详细些。

本来应该是昨天发的,昨天睡觉去了,拖到了今天。

0

序言

可能有的大佬并不知道 frida gadget 是个啥。

这里先看看官方对于 gadget 的解释

官方链接

https://frida.re/docs/gadget/

这句英语意思大概意思是:

frida Gadget 是一个动态库,如果注入不适用于当前场景 (一般是被检测 或者没 root),就用程序加载这个库来达到 hook 的效果。

frida gadget 使用场景

  1. 免 root 使用 frida
  2. 反调试 反 root 反 frida 很强,绕不过去的时候
  3. 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.MainActivityaaa 方法

改下返回值就可以了

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 站 / 公众号  :  移动安全王铁头

希望和大佬们一起学习,一起成长

点个

在看

你最好看

上一页
下一页