一、目标

一、目标

我们来分析某生鲜App的签名问题,先看看抓包结果:

main
1:main

signKeyV1 就是我们的目标,这么长,应该不是md5。

二、步骤

  • 先用jadx全局搜索下 signKeyV1
show
1:show

不是吧,这么好运,直接就找到了?赶紧Hook之

var signKeyV1Cls= Java.use('xx.net.z');
signKeyV1Cls.k2.implementation = function(a){
    var retval = this.k2(a);
    var StrCls = Java.use('java.lang.String');
    var OutStr = StrCls.$new(a);

    console.log(">>> signKeyV1 inBuf=" + OutStr + ",rc=" + retval);

    return retval;
}
  • 这里需要说明的是 String和byte[]的转换
    • String转byte[],只需要调用String类的getBytes()方法
    • byte[]转String 就需要调用String的构造方法了
public static String byteArrayToStr(byte[] byteArray) {
    if (byteArray == null) {
        return null;
    }
    String str = new String(byteArray);
    return str;
}

大家可以对比下在frida里面的实现。

最后打印出结果:

rc
1:rc

入参差不多就是请求url中的数据,比较恐怖的是,App通过地理位置定位,能精准的定位你所在的小区……

三、总结

这次找签名这么顺利,可以奋飞还是花了大半天时间,为什么呢?因为在打印String的时候代码有点问题,所以一挂上frida进程就崩溃了。我还以为是App有啥牛x的反调试错误。七搞八搞一大通才发现原来是打印String有问题。

所以做分析还得 戒骄戒躁,不要钻牛角尖 ,实在搞不定,放一放,说不定明天就发现原来是犯了一个低级错误。

100

关注微信公众号,最新技术干货实时推送

100