【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开发的基础,但总体感觉起来还是比较能接收的,毕竟都是触类旁通的.当然要深入的话还需要对这门语言的细节特性和 ...
随机推荐
- Redislabs的简单使用与benchmark测试结果
Redislabs的简单使用与benchmark测试结果 自己的理解 仅是理解. 没有看过源码 哨兵可以实现高可用, 但是对高吞吐是没有太大帮助的. 虽然可以实现主写从读, 但是在高并发的场景下延迟肯 ...
- K8S 使用loki 监控 应用日志的搭建办法
1. 背景 这几天一直在用k8s部署分SU的测试环境,开发反馈看日志比较麻烦. 昨天晚上在家里本来想搭建ELK 发现比较重, 又说有一个比较轻量级的 loki 可以实现使用grafana进行监控和查看 ...
- js 删除数组中的某一个内容
<script type="text/javascript"> let list=["为","啊发大水","阿斯蒂芬& ...
- 通过dotnet-dump分析生产环境docker容器部署的应用问题
首先找到对应的docker id并exec进去,然后执行命令并更新apt包+下载procps和wget用于等下拉取dotnet-dump和查看线程 sed -i -e "s@deb.debi ...
- 【解决了一个小问题】es query返回数据中, int64类型精度丢失的问题
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 首先定义了一个简单的结构体来接收es query返回的数据 ...
- 【CSDN浏览器插件测评超详细版】——万能便捷的C功能,直接爱不释手,强烈推荐!更多功能等你探索
我的界面预览: 1.下载安装 下载链接:https://plugin.csdn.net/?utm_source=chajian-contest-1210#/chrome-index-help 说明:若 ...
- Centos8 配置IP地址与阿里YUM源
Centos8 系统中无法找到network.service网络服务,默认已经被nmcli替换了,所以修改方式略微变化,在/etc/sysconfig/network-scripts/里也看不到任何脚 ...
- C++ Boost库 操作字符串与正则
字符串的查找与替换一直是C++的若是,运用Boost这个准标准库,将可以很好的弥补C++的不足,使针对字符串的操作更加容易. 字符串格式转换: #include <iostream> #i ...
- Azure Data Factory(十二)传参调用 Azure Function
一,引言 在实际的项目中,Azure Data Factroy 中的 Data Flow 并不能彻底帮我们完成一系列复制逻辑计算, 比如我们需要针对数据集的每一行数据进行判断计算,Data Flow ...
- 教你用JavaScript实现鼠标特效
案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个鼠标爱心特效.鼠标在页面移动时会出现彩色爱心特效.通过实战我们将学会createEl ...