直接说场景,这个套路适合用于Hook某个调用太频繁的方法时,无法找到相应的入参和返回值对应关系的场景,用本文的套路可以相对轻松的找到目标方法的入参和返回值对应关系。
问题描述:
在研究同程旅行这个apk的登陆协议时,经过一顿操作,我发现发包时在headers内的关键参数只有reqdata,算法很容易,我已经抠出来了,但是呢我需要知道这个方法入参,可是这个方法入参很复杂,回溯起来麻烦的不行,如下:
入参为某个请求的body和一个字符串拼接,本来想着直接Hook看参数是啥,但是呢,这个方法调用极度频繁,我用Frida进行Hook时候发现:
一页都容不下,满满登登整个屏幕都是字符串,大概有三五页,看的人热血沸腾...这个方法调用的实在是太频繁了,导致我完全不知道哪一个入参是我想要的东西,所以,我的想法是使用Frida重写这个方法,将入参和返回值一起打印出来,这样就有对应关系了,有了对应关系我就可以愉快的分析参数了,抓包如下:
红箭头是我想要的参数,Hook的全部代码如下(为了方便抓包,我把绕过SSL Pinning的脚本也集成进来了):
Java.perform(function () {
var myHookSxx = Java.use("com.tongcheng.netframe.serv.a.d"); myHookSxx.a.overload('android.content.Context').implementation = function (a) {
return ""; } var myHooksecsign = Java.use('com.tongcheng.security.sign.SecuritySign'); myHooksecsign.a.implementation =