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

时间:2024-02-24 09:06:06

frida免root hook 1) frida gadget嵌入app

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

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

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

frida gadget官网 frida gadget替换so

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

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 gadget 4种连接方式

  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 gadget github下载

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

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

frida gadget so

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

image-20210903201324395

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

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

frida gadget避免检测改名

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

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

frida gadget so 改名后

运行 patchelf 添加依赖库

patcheld so注入

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

so注入之前 so相关依赖项

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

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

elf注入之后 相关依赖


当然这一步也可以用lief

先安装

 pip install lief

so注入工具 lief安装

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

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

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名

执行

注入 gadget so

执行完之后看一下依赖

gadget so 注入之后 依赖项

成功添加

3.配置 frida gadget 的config

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

关于用gadget.so执行脚本

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

frida免root hook script配置

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

配置文件名 libcaiji.config.so

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

libxxx.so
libxxx.config.so

官方文档是这么描述的

frida gadget so config命名

这里,按照上面的格式

修改后的so名为 libcaiji.so

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

脚本代码如下

{
  "interaction": {
    "type": "script",
    "path": "/data/local/tmp/hook.js"
  }
}

frida 免root 注入 js

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

4.编写注入js

原apk的代码如下

frida gadget要注入的app

apk正常运行是这样的

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

要注入的js

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

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

5.打包签名新apk执行

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

再压缩

然后签名

就可以了

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

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

frida gadget嵌入app

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

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

frida gadget嵌入app多个架构

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

frida gadget重打包app

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

apk重新签名

frida 免root hook app

安装app执行 看一下效果

frida gadget执行


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

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

文章地址: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安全,编译原理相关原创视频文章

相关资料关注公众号回复 关键字 frida 进行下载

移动安全王铁头