【Android逆向】frida hook so 函数
1. apk来自52pojie
链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ 密码:u1an
2.apktool反编译apk,拿到so文件
java -jar ../apktool_2.2.4.jar d app-debug.apk
3. 用jadx 打开apk文件,观察到apk调用了一个native方法com.jwxdxnx06.myJNI.sayHello
4. ida 打开so文件,在导出函数表中可以看到这个对应的静态注册的函数
jstring __fastcall Java_com_jwxdxnx06_myJNI_sayHello(JNIEnv *env)
{
return (*env)->NewStringUTF(env, "hello 52pojie!");
}
5. 编写frida脚本,主动调用这个函数
function main() {
Java.perform(function () {
var libJniTest_addr = Module.findBaseAddress("libJniTest.so")
console.log("libJniTest 地址:", libJniTest_addr);
if (libJniTest_addr) {
var func_sayHello_addr = Module.findExportByName("libJniTest.so", "Java_com_jwxdxnx06_myJNI_sayHello");
console.log("Java_com_jwxdxnx06_myJNI_sayHello 地址:", func_sayHello_addr);
// 主动调用
//创建新函数,参数1:函数地址,参数2:返回值类型,参数3:函数参数类型
var func = new NativeFunction(func_sayHello_addr, 'pointer', ['pointer'])
// 通过Java.vm获得env
var retVal = func(Java.vm.getEnv())
var ret = Java.vm.getEnv().getStringUtfChars(retVal, null).readCString();
console.log(ret)
}
})
}
setTimeout(main)
5. 尝试hook函数,改变函数的输出
function main() {
Java.perform(function () {
var libJniTest_addr = Module.findBaseAddress("libJniTest.so")
console.log("libJniTest 地址:", libJniTest_addr);
if (libJniTest_addr) {
var func_sayHello_addr = Module.findExportByName("libJniTest.so", "Java_com_jwxdxnx06_myJNI_sayHello");
console.log("Java_com_jwxdxnx06_myJNI_sayHello 地址:", func_sayHello_addr);
//hook
Interceptor.attach(func_sayHello_addr, {
onEnter: function(args) {
var env = args[0];
console.log("=== env: " + env)
},
onLeave: function(retVal) {
console.log("=== retVal: " + retVal)
var j_str = Java.vm.getEnv().newStringUtf("helloworld123")
retVal.replace(ptr(j_str))
}
})
// 主动调用
//创建新函数,参数1:函数地址,参数2:返回值类型,参数3:函数参数类型
var func = new NativeFunction(func_sayHello_addr, 'pointer', ['pointer'])
var retVal = func(Java.vm.getEnv())
var ret = Java.vm.getEnv().getStringUtfChars(retVal, null).readCString();
console.log(ret)
}
})
}
setTimeout(main)
6. 执行命令
frida -UF com.jwxdxnx06 -l lesson04.js --no-pause
日志
libJniTest 地址: 0xc73c3000
Java_com_jwxdxnx06_myJNI_sayHello 地址: 0xc73c3c5d
=== env: 0xdc411c40
=== retVal: 0x9
helloworld123
【Android逆向】frida hook so 函数的更多相关文章
- Android逆向进阶(7)——揭开Hook的神秘面纱
本文作者:i春秋作家——HAI_ 0×00 前言 HAI_逆向使用手册(想尝试一下新的写法) 其他 Android逆向进阶 系列课程 <<<<<<< 人物说明 ...
- Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解
一.前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点.需要逆向分析app即可.不 ...
- 史上最全面 Android逆向培训之__实战(hook微信)
我的CSDN博客:https://blog.csdn.net/gfg156196 by--qihao 书接上文,上回说到了xposed,接下来就用一下,体验一下商业项目的赶脚…… 上一篇:史上最全 ...
- Android 安全研究 hook 神器frida学习(一)
在进行安卓安全研究时,hook技术是不可或缺的,常用的有Xposed:Java层的HOOK框架,由于要修改Zgote进程,需要Root,体验过Xposed,整个过程还是很繁琐的,并且无法hook,na ...
- android免root hook框架legend
一.前言 Android中hook框架已经非常多了,最优秀的当属Xposed和Substrate了,这两个框架我在之前的文章都详细介绍过了,不了解的同学,可以转战这里:http://www.wjdia ...
- Frida用法之函数操作
Frida接口功能介绍 Frida是个so级别的hook框架,它可以帮助开发.安全人员对指定的进程的so模块进行分析.它主要提供了功能简单的Python接口和功能丰富的JS接口,使得hook函数和 ...
- Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)
一.前言 今天我们继续来讲述逆向的知识,今天我们来讲什么呢?我们在前一篇文章中介绍了关于SO文件的格式,今天我们继续这个话题来看看如何修改SO文件中的内容,看一下我们研究的主题: 需求:想汉化一个Ap ...
- 2021年正确的Android逆向开发学习之路
2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...
- [转]Android逆向之动态调试总结
一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...
- android逆向学习小结--CrackMe_1
断断续续的总算的把android开发和逆向的这两本书看完了,虽然没有java,和android开发的基础,但总体感觉起来还是比较能接收的,毕竟都是触类旁通的.当然要深入的话还需要对这门语言的细节特性和 ...
随机推荐
- [转帖]renice和nice
https://www.cnblogs.com/qiynet/p/17555881.html 将行程 id 为 987 及 32 的行程与行程拥有者为 daemon 及 root 的优先序号码加 1 ...
- [转帖]Jmeter连接InfluxDB2.0.4
Jmeter连接InfluxDB2.0.4 问题描述:在用Jmeter+InfluxDB构建监控时,因为docker构建的InfluxDB的版本是2.0.4,按照网上的教程进行后端监听器的填写,但是一 ...
- 阿里的AIGC数据库工具: Chat2DB的学习与使用
阿里的AIGC数据库工具: Chat2DB的学习与使用 背景 今天陪家中老人去完医院后, 继续回来学习时发现 阿里巴巴的 chat2DB已经发布的 2.0.1的版本. 想着下载下来试试. 主要也是备忘 ...
- 【转帖】PyCharm---Django简单例子--基础1
https://www.cnblogs.com/kllay/p/7286701.html 环境: python 2.7 Django 1.11.2 查看版本:python -m django - ...
- adb基础指令
1.查看连接的设备 adb.exe devices/adb devices device表示连接成功,offline表示设备未连接或未响应 2.进入命令模式,指定哪台设备 adb -s 序列号 ...
- echarts显示地图
<template> <div class="managingPatientSize"> <div id="china-map"& ...
- flutter项目目录介绍
1 flutter项目目录介绍 android 安卓平台的的相关代理 build 编译后的 ios ios 平台的的相关代理 lib 自己写代码的目录 包好自己的代码 资源 test 放测试文件的 p ...
- 【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理
什么是 WebRTC ? WebRTC(Web Real-Time Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并于20 ...
- Jmeter报错权限不够
Jmeter报错权限不够 解决办法: chmod +x jmeter
- C/C++ 常用开发代码片段
由于内容较少,所以,不想把它放在我的本地博客中了,暂时保存在这里,代码有一部分来源于网络,比较经典的案例,同样收藏起来. Stack 栈容器 Stack容器适配器中的数据是以LIFO的方式组织的,它是 ...