一、目标
60后炒邮票,70后炒股,80后炒房,90后炒币,00后又有新玩法了,鞋也能炒。时代变了,看看鞋吧。
这个 newSign 才是我们的目标。
二、步骤
Jadx搜索 "newSign"
搜出来的结果虽然很多,但是第一条结果 host.addQueryParameter("newSign", RequestUtils.m38208c(hashMap2, currentTimeMillis)); 这个就很可疑。
Frida上
var RequestUtilsCls = Java.use('com.shxxhuang.xxapp.common.utils.RequestUtils');
RequestUtilsCls.c.implementation = function(a,b){
var rc = this.c(a,b);
console.log("a=" + a.entrySet().toArray());
console.log("b=" + b);
console.log("c >>> rc=" + rc);
return rc ;
}
效果不错,入参和 newSign 值都出来了
a= v=4.68.6,loginToken=,uuid=76dade3ad5f174d2,platform=android,timestamp=1620702668425
b= 1620702668425
c >>> rc= 0237b9de491aee10ae238983144caa13
不过有个小小的问题,只打印出了,某些请求的 newSign,还有其他很多请求的签名值都没有打印出来。
再观察一下RequestUtils类
原来同样的函数还有a、b、c。找到问题就好办了,都搞上,打印输出的时候做下区分。
var RequestUtilsCls = Java.use('com.shxxhuang.xxapp.common.utils.RequestUtils');
RequestUtilsCls.a.overload('java.util.Map', 'long').implementation = function(a,b){
var rc = this.a(a,b);
console.log("a= " + a.entrySet().toArray());
console.log("b= " + b);
console.log("a >>> rc= " + rc);
return rc ;
}
RequestUtilsCls.b.overload('java.util.Map', 'long').implementation = function(a,b){
var rc = this.b(a,b);
console.log("a= " + a.entrySet().toArray());
console.log("b= " + b);
console.log("b >>> rc= " + rc);
return rc ;
}
RequestUtilsCls.c.implementation = function(a,b){
var rc = this.c(a,b);
console.log("a= " + a.entrySet().toArray());
console.log("b= " + b);
console.log("c >>> rc= " + rc);
return rc ;
}
这下Ok了,基本上打印全了
a= lastId=,limit=50.0,loginToken=,platform=android,propertyValueId=0.0,spuId=37494.0,timestamp=1620703226570,uuid=76dade3ad5f174d2,v=4.68.6
b= 1620703226570
b >>> rc= d8a9cd2770194d04b65d670df33b054e
三、总结
时代在变,流行在变,技术也在变。不过不变的是套路和人性。
古往今来,一直有人生活在烟尘之外,有人甚至可以穿越烟云或在烟云中停留之后走出烟云,丝毫不受烟尘味道或煤炭粉尘的影响,保持原来的生活节奏,保持他们那不属于这个世界的样子。但重要的不是生活在烟尘之外,而是生活在烟尘之中,因为只有生活在烟尘之中,呼吸想今天早晨这种雾蒙蒙的空气,才能认识问题的实质,才有可能去解决问题。
关注微信公众号,最新技术干货实时推送
文章作者 奋飞
上次更新 2021-05-11
许可协议 奋飞安全原创,转载请注明出处。