安卓逆向-静态分析破解某app sign参数

2020-04-28  本文已影响0人  故里_b612

好久没写文章了,今天带大家去分析一波某app的sign参数,这个app还比较特殊,当时在源码找这个参数的时候死活找不到,后来抓包仔细一看Referer字段,瞬间明白了,他利用js发送的请求,首先抓包请出今天的受害者:

从密文来看像是16进制,我们直接在线16进制解密试一下,万一解密出来了呢!

哦豁!发现并不是我们想要的结果,哈哈,废话少说,直接打开Referer字段的url,采用字符串搜索大法,全局搜索sign参数,发现有以下5处结果:

经过排查,最终定位到:

从代码可见,将参数按照key值进行排序后使用&拼接,加上指定的盐值进行加密,我们继续跟踪加密的函数,发现调用了2个函数完成加密逻辑,(提示个小技巧,代码混淆比较大,无法定位到函数定义的地方,将代码copy到IDE中按住Ctrl点击),跳转:

这两个肯定是加密逻辑了,我们顺着找上去,先看第一个“a7c4”对应的函数,直接上全局搜索,

得到函数源码如下:

这个应该就是导出的密文函数了,从代码逻辑看出应该是对某加密结果进行转换操作,我们copy到ide中用note运行一下,得到加密后的结果:

发现这并不是我们想要的结果,从这个sign密文和这个函数导出的结果可以得出结论,入参肯定是个加密后的结果,通过计算算出密文长度是明文长度的2倍,那么明文长度肯定就是32位了,我们回到源码,搜索另一个加密函数8d81:

这就是加密的逻辑,从代码来看是不是有点晕啊,仔细看下加密特征,就知道这是一个很普通的MD5加密:

普及一下:

数据摘要的算法(MD5,SHA*) 算法的数据特征:

由三个方法组成:1.初始化        2.运算        3.取结果

MD5有四个固定常量。SHA1算法有5个固定常量。SHA256算法有8个固定常量。

常见表现形式如下:

这种特征在so层加密很常见的:

最后我们直接将拼接好的key加上代码的盐值进行MD5,传入刚才的a7c4函数运行就是sign结果,直跑一下试试:

见证了我们前面的思路是对的,当js代码混淆比较乱且比较复杂时,可以直接调用js,或者使用express框架搭建服务器,这里代码量较少,python几行代码搞定:

文章仅供学习交流,禁止一切商业用途。

上一篇下一篇

猜你喜欢

热点阅读