frida动态调试入门01——定位关键代码

说明

frida是一款Python工具可以方便对内存进行hook修改代码逻辑在移动端安全和逆向过程中常用到。

实战

嘟嘟牛登录页面hook

使用到的工具

1,jadx-gui
2,frida

定位关键代码

使用jadx-gui 进行模糊搜索,例如搜索encyrpt之类的加密关键字

在这里插入图片描述


发现com.dodonew 下面有两个疑似加密的关键代码
在这里插入图片描述

右键复制类名
com.dodonew.online.http.JsonRequest
在这里插入图片描述

编写脚本

//如果是java hook的话代码都要放到java.perform包括起来

Java.perform(function(){

    // 拿到这个类,打印一下确认是否拿到类了
    var JsonRequest = Java.use("com.dodonew.online.http.JsonRequest")
    console.log("JsonRequest:",JsonRequest)

    // 调用类中的方法,实现,也就是将原来的函数修改掉 
    JsonRequest.paraMap.implementation = function(a){
        console.log("params1:", a);
        this.paraMap(a);
    }

    // addRequestMap,可能的另外一个加密函数
    // 参数类型或者是参数数量不同为一个重载函数
    JsonRequest.addRequestMap.implementation = function(a,b){
        console.log("params:", a, b);
        
        this.addRequestMap (a, b);
    }
});

启动手机的frida服务端
在这里插入图片描述

出现报错,报错显示有多个overload也就是有多个重载,修改hook代码指定那个重载。

在这里插入图片描述

修改代码

需要的是int的重载函数
在这里插入图片描述
修改后的代码

//如果是java hook的话代码都要放到java.perform包括起来

Java.perform(function(){

    // 拿到这个类,打印一下确认是否拿到类了
    var JsonRequest = Java.use("com.dodonew.online.http.JsonRequest")
    console.log("JsonRequest:",JsonRequest)

    // 调用类中的方法,实现,也就是将原来的函数修改掉 
    JsonRequest.paraMap.implementation = function(a){
        console.log("params1:", a);
        this.paraMap(a);
    }

    // addRequestMap,可能的另外一个加密函数
    // 参数类型或者是参数数量不同为一个重载函数
    JsonRequest.addRequestMap.overload('java.util.Map', 'int').implementation = function(a,b){
        console.log("params:", a, b);
        console.log("addRequestMap");
        this.addRequestMap (a, b);
    }

    // 确定了加密的关键函数
});

再次运行frida -UF -l hook的js文件

frida -UF -l .hook.js

在这里插入图片描述

说明代码逻辑通过的这个函数。

添加两个这个代码就可以打印输入的参数

var bb =Java.cast(a, Java.use("java.util.HashMap"));
        console.log("addRequestMap params:", bb.toString());

在这里插入图片描述

参考文章
https://www.bilibili.com/video/BV1k3411d7RT