一、目标
我们来分析某生鲜App的签名问题,先看看抓包结果:
signKeyV1 就是我们的目标,这么长,应该不是md5。
二、步骤
- 先用jadx全局搜索下 signKeyV1
不是吧,这么好运,直接就找到了?赶紧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里面的实现。
最后打印出结果:
入参差不多就是请求url中的数据,比较恐怖的是,App通过地理位置定位,能精准的定位你所在的小区……
三、总结
这次找签名这么顺利,可以奋飞还是花了大半天时间,为什么呢?因为在打印String的时候代码有点问题,所以一挂上frida进程就崩溃了。我还以为是App有啥牛x的反调试错误。七搞八搞一大通才发现原来是打印String有问题。
所以做分析还得 戒骄戒躁,不要钻牛角尖 ,实在搞不定,放一放,说不定明天就发现原来是犯了一个低级错误。
关注微信公众号,最新技术干货实时推送