frida动态插桩初探
前言
近期碰到了分析app的需求,就学习了一下
frida
的动态插桩技术。
frida
是一款轻量级HOOK框架,可用于多平台上,例如android、windows、ios等。
frida
分为两部分,服务端运行在目标机上,通过注入进程的方式来实现劫持应用函数,另一部分运行在我们自己的控制机上。
frida
上层接口支持js、python、c等。
环境配置
安装frida模块
pip install frida
安装frida-tools模块
pip install frida-tools
通过如下命令查看模拟器架构。从
https://github.com/frida/frida/releases
可下载对应架构的
frida-server
,并上传到模拟器/手机中。
getprop ro.product.cpu.abi
frida hook java层 实操
这里拿的是一个别人写的 demo文件进行练手。实现的功能是,按了按钮就会返回一个随机数。
用jadx反编译apk可以很容易找到如下代码,我们知道如果我们可以控制
Jniint
的返回值,便可以控制打印出来的数据。
通过如下代码便可hook其返回值为 6666。
Java.perform(function () {
// we create a javascript wrapper for MainActivity
var Activity = Java.use('com.erev0s.jniapp.MainActivity');
// replace the Jniint implementation
Activity.Jniint.implementation = function () {
// console.log is used to report information back to us
console.log("[+] Hook Jniint success!");
// return this number of our choice
return 6666
};
});
参考连接
https://erev0s.com/blog/how-hook-android-native-methods-frida-noob-friendly/