图源:极简壁纸
aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzY2Mjk5Mzg=
在内容列表的请求包里面的有token
这个参数值
但是在开始的这个init
包里面没有这个token
值
在开始的这个init
请求之后的所有的包都带有token
这个参数
猜测是开始的init
包带有的加密返回值有这个token
参数,就类似设备注册的意思
所以分析的重点从列表页移动到了开始的init
包里面
先看看这个app
的壳能不能搞
好像有点难搞,先用寒冰大大的FART
试试
试了下开源版的frida_fart
,提示进程终止,应该是没了,可能是我的姿势不对,有知道的大佬评论区指点一下
于是我换北风哥的脱壳机试了一试,于是我找北风哥 py 了一下,舒服~
北风哥也提示了我可以用frida-dexdump
试试,并且fart
也是可以的,操作提示如下
在北风哥的提示下,我研究一下用frida-dexdump
脱ijm
企业版
拖完发现没有北风哥脱得全,应该还是我的姿势不对,所以接下来我还是用北风哥脱得 dex 分析
因为由init
这个请求返回的data
的加密,所以以init
为关键词搜索
看了几个位置,感觉相关性都不高
想了一下用token
作为关键词检索,发现结果是在太多了,有1800+
多个相关的结果,最后还是在inits
里面找到了
在这个位置点进去,然后通过InitParam
声明的地方找到下面的位置
那么在请求头中的siganature
可能就是这里获取到的,通过getSign
关键词找到下面这个位置
所以在header
中的siganature
就是getSign()
,然后在这个位置出入m.c
并将结果阶段传入e.a
但是通过wallbreak
只看到下面的代码
这样感觉没办法搞啊,经过一番寻找,还得是旧版的app
牛逼
在旧版的app
里找到下面的代码
照着和新版对比一下就知道,e.a
是DES.decrypt
,然后m.c
是MD5
既然是这样的话就很简单了
按照这个思路复写应该就可以了
key
是由这里的逻辑生成的
这里用到的APP_SECRET_AKEY
和时间戳多次MD5
得到 key
ps:就在上图逻辑的上方,新旧版本相同
得到key
之后,解密入参的是请求返回的密文 data
用python
可以实现解密
可以看到在结果里面取到token
了
这个app
磕磕绊绊了很久,在新版的加密上琢磨了很久,钻了牛角尖,如果早点分析旧版估计很快就分析出来了
所以之后如果不是必要还是不要死磕新版,不仅加固牛逼,混淆也很厉害,还有检测,我用frida
和objection
都没办法spawn
的方式启动app
唉,又是被APP
教做人的一天。
感谢北风哥,2h 大佬等众多哥哥的脱壳测试。
End.
以上就是全部的内容了,咱们下次再会~
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。
对了,看完记得一键三连,这个对我真的很重要。