前言:
“吹气球,吹个气球玩球球”......逆了一个小玩意,叫【纸飞机大乱斗】,需攻破的主要有三个地方:请求body中message加密(req_sign)、ss-sign、返回数据message解密。俗话说:工欲善其事必先利其器,准备好jadx(jeb)、ida pro。
过程:
(一)、请求body中message加密(req_sign)
message里面有很多信息,大部分字段均可通过hook方式拿到,其中req_sign是通过算法计算出来的。
(1)打开jadx,将apk拖入并查找关键词:req_sign,定位到具体代码位置:
(2)查找到之后,应该就容易明白了,主要就是将三个字符串拼接在一起然后进行一次MD5,三个字符串分别是:当前时间戳、code_id的值、UUID随机字符串。
(二)、ss-sign
(1)同样,先查找字符:ss-sign,定位到实现代码处:
(2)一步一步跟踪进去,你会发现调用了native方法,调用的so库是:libnms.so,用ida打开此so库,里面有具体的实现过程。但是...我的天让我吐一会,混淆太严重,做了控制流平坦化,你需要做的是什么呢,是去控制流平坦化,我需要做的是什么呢,是直接上andserver,嘿嘿嘿(三连~)......andserver直接google教程就好了,很简单。
(三)、返回数据message解密
(1)当你hook了很多数据,你会发现message解密是通过“AES/ECB/PKCS5Padding”去解密的,都知道,解密需要key,key从何而来,key从黄土高坡来...从message前17位字符串来。
(2)现在来个反向定位,我们先定位“AES/ECB/PKCS5Padding”解密方法,然后查找方法调用位置,一步步向前搜索,即可找到key计算位置:
后记
具体代码不放了,免得被迫搞成只能VIP可见...思路就是以上思路,成不成就靠大家了...研究可以,不要乱搞...
我的vx:YY_yhzf
来源:oschina
链接:https://my.oschina.net/u/4365323/blog/4724383