一、目标
今天我们的目标是这个 _sign
二、步骤
Jadx搜索 _sign"
这种带特殊字符前后缀的签名,基本上就是挥舞着双臂在召唤,来找我要,来找我呀,通常都是一找一个准。
轻松就定位到了 hashMap.put(KEY__SIGN, AppUtils.getSignParam(hashMap));
啥也别说了,搞他……
objection -g com.lxxx.hxxx.client explore
android hooking watch class 'com.hxx.pushsdk.push.util.AppUtils'
然后再左点点,右点点,等它触发签名函数。
一分钟过去了, 木反应?
难道没有触发页面,不对呀,前方传来 Charles 的呼喊,有新的签名数据出现。
但是objection木有打印信息。
这个App太狡猾呀,居然还设置了假函数来干扰我们。
但是 _sign 的字符串只有这一处呀。
再仔细观察下:
public static final String KEY__SIGN = "_sign";
Jadx搜索 KEY__SIGN
大家都是同行,何必这么搞,这下现形了
鼠标点点,最后进入到 com.lxx.hxx.utils.HllJni 这个类
拦住它
android hooking watch class 'com.lxx.hxx.utils.HllJni'
(agent) Registering job 576062. Type: watch-class for: com.lxx.hxx.utils.HllJni
# 逮住了,调用了getMD5函数
com.lxx.hxx.client on (google: 10) [usb] # (agent) [576062] Called com.lxx.hxx.utils.HllJni.getMD5(java.lang.String)
# 把getMd5 的入参和返回值打印下
com.lxx.hxx.client on (google: 10) [usb] # android hooking watch class_method 'com.lxx.hxx.utils.HllJni.getMD5' --
dump-args --dump-return
(agent) Attempting to watch class com.lxx.hxx.utils.HllJni and method getMD5.
(agent) Hooking com.lxx.hxx.utils.HllJni.getMD5(java.lang.String)
(agent) [364807] Arguments com.lxx.hxx.utils.HllJni.getMD5(k12rbm8$AKhbuAz$c0jtQ&ru0s3lGW87_su21042519544179910000001177643065_t1619351681app_revision6506client_type32token7d0a1248c1d244ac8cc53027a7e4e013kZErbmP$AKhbuAz$c0jtQ&ru0s3l3387)
(agent) [364807] Return Value: 3abaecabe9a8af7d37cbcfd41b077982
真相只有一个,请求里面的_su _t 等等参数拼接一下,然后前后加上固定字符。再做个MD5。
可以收工了……
三、总结
出来混,不要太明显了,该藏的还是藏起来。特别不要加一些特殊的字符,否则就是指路明灯。
其实不必羡慕那些积极的人,你想模仿他也不可能,如何做到的答案在你心里,很多人会问,我就是不知道自己想要什么,怎么办?找到自己想要的,这句话第一个字是找,每当你找的累了,都告诉自己:我这是在给自己一个机会。
关注微信公众号,最新技术干货实时推送