首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >安卓Frida Hook进阶

安卓Frida Hook进阶

作者头像
用户1423082
发布于 2024-12-31 12:24:00
发布于 2024-12-31 12:24:00
22200
代码可运行
举报
文章被收录于专栏:giantbranch's bloggiantbranch's blog
运行总次数:0
代码可运行

实验环境

windows 10 vscode frida 16.2.1 jadx-gui jeb

实验

1.Frida写数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//一般写在app的私有目录里,不然会报错:failed to open file (Permission denied)(实际上就是权限不足)
var file_path = "/data/user/0/com.zj.wuaipojie/test.txt";
var file_handle = new File(file_path, "wb");
if (file_handle && file_handle != null) {
        file_handle.write(data); //写入数据
        file_handle.flush(); //刷新
        file_handle.close(); //关闭
}

2.Frida_inlineHook与读写汇编

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function inline_hook() {
    var soAddr = Module.findBaseAddress("lib52pojie.so");
    if (soAddr) {
        var func_addr = soAddr.add(0x10428);
        Java.perform(function () {
            Interceptor.attach(func_addr, {
                onEnter: function (args) {
                    console.log(this.context.x22); //注意此时就没有args概念了
                    this.context.x22 = ptr(1); //赋值方法参考上一节课
                },
                onLeave: function (retval) {
                }
            }
            )
        })
    }
}
  1. 将地址的指令解析成汇编
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var soAddr = Module.findBaseAddress("lib52pojie.so");
var codeAddr = Instruction.parse(soAddr.add(0x10428));
console.log(codeAddr.toString());
  1. Frida Api

arm转hex

直接改写汇编,改机器码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function patchCode(){
    var soAddr = Module.findBaseAddress("lib52pojie.so");
    var codeAddr = soAddr.add(0x10428);
    var codeasm = Instruction.parse(codeAddr);
    console.log(codeasm.toString());
    Memory.patchCode(codeAddr, 4, function(code) {
        const writer = new Arm64Writer(code, { pc: codeAddr });
        writer.putBytes(hexToBytes("20008052")); //     MOV             W0, 1
        // writer.putBytes(hexToBytes("200080D2")); //  MOV             X0, 1
        writer.flush();
    });
}

function hexToBytes(str) {
    var pos = 0;
    var len = str.length;
    if (len % 2 != 0) {
        return null;
    }
    len /= 2;
    var hexA = new Array();
    for (var i = 0; i < len; i++) {
        var s = str.substr(pos, 2);
        var v = parseInt(s, 16);
        hexA.push(v);
        pos += 2;
    }
    return hexA;
}

3.普通函数与jni函数的主动调用

frida关于nativefunction的文档:https://frida.re/docs/javascript-api/#nativefunction

支持的参数类型如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void
pointer
int
uint
long
ulong
char
uchar
size_t
ssize_t
float
double
int8
uint8
int16
uint16
int32
uint32
int64
uint64
bool
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var funcAddr = Module.findBaseAddress("lib52pojie.so").add(0x1054C);
//声明函数指针
//NativeFunction的第一个参数是地址,第二个参数是返回值类型,第三个[]里的是传入的参数类型(有几个就填几个)
var aesAddr = new NativeFunction(funcAddr , 'pointer', ['pointer', 'pointer']);
var encry_text = Memory.allocUtf8String("OOmGYpk6s0qPSXEPp4X31g==");    //开辟一个指针存放字符串       
var key = Memory.allocUtf8String('wuaipojie0123456'); 
console.log(aesAddr(encry_text ,key).readCString());

jni函数还是原来那一套,比如下面输出返回值,并修改返回值为true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function hooktest(){
    Java.perform(function() {
        var securityUtilClass = Java.use("com.zj.wuaipojie.util.SecurityUtil");
        
        // 定义要调用的 JNI 方法
        var checkVipMethod = securityUtilClass.checkVip.overload();
        
        // 在 Frida 中调用 JNI 方法
        checkVipMethod.implementation = function() {
            console.log("Calling Java_com_zj_wuaipojie_util_SecurityUtil_checkVip method...");
            
            // 在这里可以添加自定义逻辑
            
            // 调用原始 JNI 方法
            var result = this.checkVip();
            
            // 输出结果
            console.log("Result: " + result);
            
            // 返回结果
            return true;
        };
    });
}

4.Trace

工具名称

描述

链接

jnitrace

老牌,经典,信息全,携带方便

jnitrace

jnitrace-engine

基于jnitrace,可定制化

jnitrace-engine

jtrace

定制方便,信息全面,直接在_agent.js或者_agent_stable.js 里面加自己的逻辑就行

jtrace

hook_art.js

可提供jni trace,可以灵活的增加你需要hook的函数

hook_art.js

JNI-Frida-Hook

函数名已定义,方便定位

JNI-Frida-Hook

findhash

ida插件,可用于检测加解密函数,也可作为Native Trace库

findhash

Stalker

frida官方提供的代码跟踪引擎,可以在Native层方法级别,块级别,指令级别实现代码修改,代码跟踪

Stalker

sktrace

类似 ida 指令 trace 功能

sktrace

frida-qbdi-tracer

速度比frida stalker快,免补环境

frida-qbdi-tracer

### 4.1 frida-trace

Frida-Trace 是 Frida 框架提供的一个功能强大的工具,用于追踪和监视目标应用程序中的函数调用。通过 Frida-Trace,用户可以轻松地跟踪函数的调用、参数和返回值,并实时查看这些信息。以下是 Frida-Trace 的一些主要特点和用法介绍:

主要特点

  1. 动态追踪:Frida-Trace 可以实时监视目标应用程序中的函数调用,无需重启应用或重新编译代码。
  2. 灵活性:用户可以根据需要选择要追踪的函数,包括系统库函数和自定义函数。
  3. 函数参数和返回值:除了函数调用,Frida-Trace 还可以显示函数的参数和返回值,帮助用户更好地理解函数的执行过程。
  4. 易用性:Frida-Trace 提供了简洁的命令行接口,用户可以通过命令轻松设置和启动函数追踪。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- `-i` / `-a`: 跟踪 C 函数或 so 库中的函数。

PS:-a 包含模块+偏移跟踪,一般用于追踪未导出函数,例子:-a "lib52pojie.so!0x4793c"

包含/排除模块或函数:

- `-I` : 包含指定模块。
- `-X` : 排除指定模块。

Java 方法跟踪:

- `-j JAVA_METHOD`: 包含 Java 方法。
- `-J JAVA_METHOD`: 排除 Java 方法。

附加方式:

- `-f`:通过 spwan 方式启动
- `-F`:通过 attach 方式附加当前进程

日志输出:
`-o`:日志输出到文件

使用案例:

注意下面需要打开相应的app保持在屏幕上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#附加当前进程并追踪lib52pojie.so里的所有Java_开头的jni导出函数
frida-trace -U -F -I "lib52pojie.so" -i "Java_"

4.2 jnitrace

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install jnitrace==3.3.0

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//attach模式附加52pojie.so并输出日志,其中wuaipojie是进程名,可以通过frida-ps -U查看
jnitrace -m attach -l lib52pojie.so wuaipojie -o trace.json 

jnitrace -m spawn -l lib52pojie.so com.zj.wuaipojie
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`-l libnative-lib.so`- 用于指定要跟踪的库

`-m <spawn|attach>`- 用于指定要使用的 Frida 附加机制

`-i <regex>`- 用于指定应跟踪的方法名称,例如,`-i Get -i RegisterNatives`将仅包含名称中包含 Get 或 RegisterNatives 的 JNI 方法

`-e <regex>`- 用于指定跟踪中应忽略的方法名称,例如,`-e ^Find -e GetEnv`将从结果中排除所有以 Find 开头或包含 GetEnv 的 JNI 方法名称

`-I <string>`- 用于指定应跟踪的库的导出

`-E <string>`用于指定不应跟踪的库的导出

`-o path/output.json`- 用于指定`jnitrace`存储所有跟踪数据的输出路径

4.3 sktrace

地址:https://github.com/bmax121/sktrace.git

这个类似 ida 指令 trace 功能,显示每个执行的汇编的寄存器的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python sktrace.py -m attach -l lib52pojie.so -i 0x103B4 wuaipojie

5.控制流混淆对抗新发现

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
安卓Frida Hook之Frida-Native-Hook
Process 对象代表当前被Hook的进程,能获取进程的信息,枚举模块,枚举范围等
用户1423082
2024/12/31
3980
安卓Frida Hook之Frida-Native-Hook
安卓Frida Hook进阶2
libart.so: 在 Android 5.0(Lollipop)及更高版本中,libart.so 是 Android 运行时(ART,Android Runtime)的核心组件,它取代了之前的 Dalvik 虚拟机。可以在 libart.so 里找到 JNI 相关的实现。
用户1423082
2024/12/31
2100
Arcaea的逆向分析
  Insight来源:Arcaea-server,以及之前看到过的一篇文章不修改游戏,不注入内存的修改方法。
大A
2023/02/14
2.6K0
Arcaea的逆向分析
安卓Frida Hook基础
设置环境变量WORKON_HOME为下面自己建立好的路径,当然默认也可以不设置,默认在用户目录下
用户1423082
2024/12/31
1780
安卓Frida Hook基础
Trace大盘点
jnitrace -l libnative-lib.so com.example.myapplication
奋飞安全
2022/03/16
1.6K0
Frida Internal - Part 3: Java Bridge 与 ART hook
前面的文章中介绍了 frida 的基础组件 frida-core,用于实现进程注入、通信和管理等功能。加上 frida-gum 和 gum-js 的核心能力,我们已经可以很方便地使用 JavaScript 脚本来进行代码劫持、动态跟踪等进程分析操作。
evilpan
2023/02/12
1.7K0
[1091]Frida的环境搭建及入门实战
Frida是一款基于python + javascript 的hook框架,可运行在android ios linux windows osx等各平台,主要使用动态二进制插桩技术;由于是基于脚本(javascript)的交互,因此相比xposed和substrace cydia更加便捷
周小董
2022/04/13
3K0
[1091]Frida的环境搭建及入门实战
安卓Frida Hook之objection
Objection 是一种用于移动应用安全测试和逆向工程的开源工具,特别是针对 Android 应用程序。它提供了一套强大的功能和命令行工具,帮助安全研究人员、渗透测试人员和开发人员分析和评估移动应用的安全性。
用户1423082
2024/12/31
3130
安卓Frida Hook之objection
android frida hook介绍
frida 是一个hook工具,可以监控和修改app的行为,相比xposed优势是配置简单和支持主动调用
一只小虾米
2022/10/25
1.2K0
android frida hook介绍
frida小功能点备注(Android)
1.frida命令以启动app的方式注入frida脚本到app,并重定向输出日志到文件中
用户4682003
2025/06/16
1050
frida小功能点备注(Android)
FRIDA-API使用篇:Java、Interceptor、NativePointer
上一篇我们学过了如何对Java层以及内存做处理,在这篇中我们来看看如何拦截SO层函数函数等等。
bosh123
2020/12/10
5K0
ios逆向之frida安装与使用
frida tools主要有Frida CLI、frida-ps、frida-trace、frida-discover、frida-ls-devices、frida-kill等命令工具
用户4682003
2022/05/19
4.9K0
ios逆向之frida安装与使用
hook框架frida的安装以及简单实用案例
This is the recommended way to get started. All you need to do is:
小小咸鱼YwY
2020/06/19
1.2K0
【APP逆向百例】某蜂窝逆向分析
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2025/02/17
2210
【APP逆向百例】某蜂窝逆向分析
一个动态SO文件自解密的修复
题目来源 文章中已经有非常详细的解析,这边我写一下自己操作的过程,并探索了几个自己感兴趣的地方。
大A
2023/02/14
2.3K0
一个动态SO文件自解密的修复
Frida-trace常用命令
转载:https://blog.csdn.net/tslx1020/article/details/128250777
小小咸鱼YwY
2023/02/01
3.2K0
frida- registernatives获取so层动态注册函数
谢谢大佬的无私奉献https://github.com/lasting-yang/frida_hook_libart
小小咸鱼YwY
2020/10/19
2.2K0
Frida爬虫分析流程——以微信视频号下载为例
微信的通信协议没有使用传统的https,而是采用 mmtls 和 quic 协议结合的方案(可能),导致常用的抓包方案完全无效。因此我们考虑使用逆向 hook 的方式,对微信视频号的数据进行获取。
mythsman
2022/11/14
11.5K2
Frida爬虫分析流程——以微信视频号下载为例
rpc、Process、Module、Memory使用方法及示例
大家好,窝又来写文章了,咱们现在在这篇文章中,我们来对其官方的一些非常常用的API进行学习。所谓工欲善其事,必先利其器。想要好好学习FRIDA我们就必须对FRIDA API深入的学习以对其有更深的了解和使用,通常大部分核心原理也在官方API中写着,我们学会来使用一些案例来结合API的使用。
bosh123
2020/12/09
1.2K0
Frida Stalker 是什么?
了解一些调试器原理的同学都知道,Trace和Debug需要修改原始代码加上个int 3,来激活调试器。
奋飞安全
2022/06/17
2K0
相关推荐
安卓Frida Hook之Frida-Native-Hook
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档