0x00 直接抓包
发现无法用代理抓,于是改用HttpAnalyzer,可以抓到。目前需要使用的就是GET的,改参数提交,提示如下:
{"result":10001,"message":"系统时间不准确"}
有个参数就是signature。
0x01 查找定位并分析
打开apk看assets文件夹下有libjiagu.so等,还得先脱壳获取真实的dex文件。
在4.4.2的模拟器里打开app异常,但可以用xposed脱壳插件可以脱壳,把所有的dex打包,拉进AndroidKiller里反编译。
搜索关键词“signature”,搜索到几十条,看类名排除一些,继续看,找到2条。
把对应的dex拉进JEB2里,找到类里,看到的代码如下:
看下面的POST,应该不是这个,抓到包的是GET,很可能是下图中的signature。
看2个图都有j.b(),先找到j.b()和j.a(),如下是j.b()。
是HmacSHA256的加密,密钥就是v0_1,需要加密的数据就是arg4。
0x02 获取密钥和参数
先尝试hook这个SecretKeySpec,可以直接得到密钥和加密的数据,结果异常,于是还是先找密钥吧。
在JEB2里,双击a.b().t()中的t(),无法跳转过去,再双击b()也无法跳转到具体函数,说明不在这个dex里吧。
去AndroidKiller里找到函数t()的具体类,如下图:
是个接口方法,具体找到这个l()函数,如下:
.method public abstract l()Ljava/lang/String;
.end method
那就直接搜索 .implements Lcom/**********/b/e; 得到一条结果,找到l()函数,就得到了密钥。
需要加密的数据参数arg4,则直接hook这个b(String)得到,就是一个字典排序,加上一些类似的salt。
0x03 还原验证
写个本地java,还原下,结果与原先的一致。
0x04 总结
入门文章,大佬轻喷。
0x05 免责声明
本分析过程仅限用于学习和研究目的;不得用于商业或者非法用途,否则,一切后果请用户自负,本人盖不负责,存粹技术爱好!