IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> frida 免root hook 1) frida gadget so注入app -> 正文阅读

[嵌入式]frida 免root hook 1) frida gadget so注入app

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安全,编译原理相关原创视频文章
视频演示:https://space.bilibili.com/430241559

相关资料关注公众号 回复 frida 下载:
移动安全王铁头

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:25:42  更:2021-09-13 09:26:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:33:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码