某打车加密data值分析
提示:仅供学习交流,不得用做商业交易,如有侵权请及时联系作者删除
目标值:请求参数中data值
初步分析
首先需要定位加密位置,直接搜索data的话结果非常多,不太好定位,那么可以尝试搜索包中其他特殊参数,比如**:sdkEncodeVersion**
最终定位位置如下:
接下来在函数调用全部打上断点查看数据
那么显而易见加密函数就是 zn
进去分析,发现是一个标准的JSVMP
接下来开始分析这个VMP,先大致的看一下,发现VMP中只有函数调用(call,apply),并没有运算之类的代码,还存在很多往栈里push函数的,那么大胆猜测,加密是嵌套的,很有可能存在多层的vmp嵌套,那么接下来就可以直接进行插桩分析了;
这里只对push到栈中的函数以及本层VMP的函数调用位置进行插桩,push进去的函数也要跟进去进行插桩不要遗漏
然后我们在插桩的过程中可以看到几个比较特殊的函数,如下:
看到这基本可以确定加密过程中用到了RSA函数,直接在encrypt下断点,看传入的参数即可
然后我们还可以看到关键字 SM4,那么也可以确定加密过程中用到了SM4加密方法,同样的,在SM4加密函数中打印传入的明文和密钥
日志分析
打印的日志非常明确
第一我们可以看到对入参明文进行了GZIP压缩
然后可以看到对压缩结果进行了base64编码
然后可以看到获取了一份编码表
然后可以很明显的看到在循环操作,先是先是获取一个随机数,然后和16进行相乘,然后charAt得出字符
最终得到一个字符串
然后可以看到入栈了RSA加密函数和密钥值
紧接着就是setPublicKey,以及encrypt刚才得到的随机字符串
然后可以看到紧接着就调用了SM4加密,明文为GZIP的结果,密钥为刚才的字符串
然后对RSA加密结果和SM4加密结果进行了拼接
然后就是对拼接结果进行了btoa,得到data结果
流程总结
整体不难,加密流程是封装好的函数,没有打散在VMP中,特别适合练手