天天看点

frida 免root hook 1) frida gadget so注入app

frida免root hook 1) frida gadget嵌入app

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

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

官方链接 https://frida.re/docs/gadget/

frida 免root hook 1) frida gadget so注入app

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

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

大家好,我是王铁头 一个乙方安全公司搬砖的菜鸡

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

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

frida gadget使用场景

  1. 免root 使用 frida
  2. 反调试 反root 反frida 很强,绕不过去的时候
  3. frida 持久化 hook

frida gadget 支持的连接方式

官网文档支持的交互方式有4种

frida 免root hook 1) frida gadget so注入app
  1. Listen: 默认的连接方式, 类似frida-server那种,可以指定端口,frida -U gadget 连接,电脑端操作
  2. Connect: 我愣是没看懂 看懂了再过来改
  3. Script: 直接执行注入脚本,js注入脚本要放到手机目录
  4. ScriptDirectory:脚本目录,类似全局hook, 可以用libart之类的so 加载 gadget,可以指定哪个脚本注入哪个app (没测试)

这里演示第3种 Script 直接执行注入脚本这种连接方式

后续有空会把上面的各种方式都写一下

app一般分为有so库和无so库

这篇文章演示有so库的情况

frida Gadget script脚本连接(有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 免root hook 1) frida gadget so注入app

直接去frida的github仓,点击 release 找想要的版本去下载就可

链接 https://github.com/frida/frida/releases

frida 免root hook 1) frida gadget so注入app

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

frida 免root hook 1) frida gadget so注入app

wtt这个示例apk里面有一个 so libnative-lib.so

这里,直接给 libnative-lib.so添加frida-gadget.so 依赖库

frida 免root hook 1) frida gadget so注入app

为了防止检测,frida这特征也太大了,很容易被检测 被针对

最好把这个so改个名字,比如 libcaiji.so 改名后如下图

frida 免root hook 1) frida gadget so注入app

运行 patchelf 添加依赖库

frida 免root hook 1) frida gadget so注入app

没有添加依赖库之前,依赖库如下

frida 免root hook 1) frida gadget so注入app

搞完之后 拖进ida看一下 依赖库,这里可以看到多了一个依赖so

libcaiji.so 就是 frida-gadget.so改名后的so

frida 免root hook 1) frida gadget so注入app

当然这一步也可以用lief

先安装

pip install lief
           
frida 免root hook 1) frida gadget so注入app

这里 很多大佬直接给出了代码 但是每次都得改代码就好麻烦

我直接写了个脚本 直接读取命令行参数执行

import sys
import lief

str_so_apk = sys.argv[1]
str_so_gadget = sys.argv[2]

libnative = lief.parse(str_so_apk)
libnative.add_library(str_so_gadget) # Injection!
libnative.write(str_so_apk)
           

保存成 inject.py

命令格式如下

python inject.py apk的so  注入的so名
           

执行

frida 免root hook 1) frida gadget so注入app

执行完之后看一下依赖

frida 免root hook 1) frida gadget so注入app

成功添加

3.配置 frida gadget 的config

这里这篇文章主要是 执行脚本

关于用gadget.so执行脚本

看看官方文档的介绍,机器翻译还是有点问题的,凑合看吧

frida 免root hook 1) frida gadget so注入app

这里我按照官方的示例,写了一个配置文件

配置文件名 libcaiji.config.so

这里, 注意配置文件命名的格式,一定是你改名后的名字 + .config.so

libxxx.so
libxxx.config.so
           

官方文档是这么描述的

frida 免root hook 1) frida gadget so注入app

这里,按照上面的格式

修改后的so名为 libcaiji.so

配置文件的名字为: libcaiji.config.so

脚本代码如下

{
  "interaction": {
    "type": "script",
    "path": "/data/local/tmp/hook.js"
  }
}
           
frida 免root hook 1) frida gadget so注入app

这里虽然后缀名是 .so 内容其实是json配置文件,这点要注意

4.编写注入js

原apk的代码如下

frida 免root hook 1) frida gadget so注入app

apk正常运行是这样的

frida 免root hook 1) frida gadget so注入app

这里 编写一个注入的js

把 弹窗显示的 aaa 改成 bbb

这里 直接 hook com.wangtietou.no_root.MainActivity 的 aaa 方法

改下返回值就可以了

hook代码如下

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 把注入脚本放到之前配置的路径下

frida 免root hook 1) frida gadget so注入app

这里 /data/local/tmp/hook.js 是之前配置文件配置过的路径

一定要写对,不然,找不到执行的js, 怎么hook ,凉凉

5.打包签名新apk执行

这里把 改名后的 frida-gadget.so 和 配置文件放到lib目录

再压缩

然后签名

就可以了

这里没有修改 dex文件 也没有修改 AndroidManifest.xml 所以并不用使用apktool重新打包

这个例子只有一个 依赖库架构 是 armv7a 那么只修改这一个架构就可以了

frida 免root hook 1) frida gadget so注入app

如果是多个架构,那就要都改 下面这个例子有2个架构 armv7 armv8

不确定运行平台的前提下 最好两个都改了 这里看一下前后的对比

frida 免root hook 1) frida gadget so注入app

把修改后的apk目录 压缩一下就可以了

frida 免root hook 1) frida gadget so注入app

搞完后 用 apktoolbox重新签个名就ojbk了

frida 免root hook 1) frida gadget so注入app
frida 免root hook 1) frida gadget so注入app

安装app执行 看一下效果

frida 免root hook 1) frida gadget so注入app

上面搞了这么多,实际上还有更简单的办法

有大佬早就写好了一键脚本

文章地址:https://bbs.pediy.com/thread-268175.htm

脚本地址:https://github.com/nszdhd1/UtilScript/

只不过,脚本用起来不太灵活。

我准备把脚本改改,让脚本用起来更方便。

搞完会分享给大佬们的。.

这个文章用到的所有文件,周末会录个视频,然后一起发上去。

方案要注意的点

1.签名校验

修改apk后,签名会发生变化,apk如果有签名校验的话,要绕过签名校验

2.hook时机

这里导入的so 一定要在 要hook的函数执行之前导入

要不然,要hook的函数都执行完了,你的so才导入,hook个锤子

3.so架构

如果app so支持多个架构,不确定具体执行平台的话,建议每个架构都操作一波

方案优点

1.有效绕过大部分反调试 反root 反frida

在没有root的手机上运行,反root对你而言就是不存在的

用 gadget去注入,frida的大部分特征也没了 能绕过大部分 反调试 反frida

2.持久化hook

直接嵌入app 相当于源码级修改 体验很好

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

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

相关资料关注公众号 回复 frida 下载:

frida 免root hook 1) frida gadget so注入app

继续阅读