frida动态插桩初探

前言

近期碰到了分析app的需求,就学习了一下 frida 的动态插桩技术。frida 是一款轻量级HOOK框架,可用于多平台上,例如android、windows、ios等。frida 分为两部分,服务端运行在目标机上,通过注入进程的方式来实现劫持应用函数,另一部分运行在我们自己的控制机上。frida上层接口支持js、python、c等。

环境配置

安装frida模块

shell 复制代码
pip install frida

安装frida-tools模块

shell 复制代码
pip install frida-tools

通过如下命令查看模拟器架构。从 https://github.com/frida/frida/releases 可下载对应架构的 frida-server,并上传到模拟器/手机中。

shell 复制代码
getprop ro.product.cpu.abi

frida hook java层 实操

这里拿的是一个别人写的 demo文件进行练手。实现的功能是,按了按钮就会返回一个随机数。

用jadx反编译apk可以很容易找到如下代码,我们知道如果我们可以控制 Jniint的返回值,便可以控制打印出来的数据。

通过如下代码便可hook其返回值为 6666。

javascript 复制代码
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://xz.aliyun.com/t/8211

https://erev0s.com/blog/how-hook-android-native-methods-frida-noob-friendly/