网站Logo 小李的博客

某打车加密data值分析

xiaoli
12
2025-07-23

某打车加密data值分析

提示:仅供学习交流,不得用做商业交易,如有侵权请及时联系作者删除

目标值:请求参数中data值

image-20250722235100066

初步分析

首先需要定位加密位置,直接搜索data的话结果非常多,不太好定位,那么可以尝试搜索包中其他特殊参数,比如**:sdkEncodeVersion**

image-20250722235247896

最终定位位置如下:

image-20250722235303864

接下来在函数调用全部打上断点查看数据

image-20250722235525941

那么显而易见加密函数就是 zn

进去分析,发现是一个标准的JSVMP

image-20250722235644096

接下来开始分析这个VMP,先大致的看一下,发现VMP中只有函数调用(call,apply),并没有运算之类的代码,还存在很多往栈里push函数的,那么大胆猜测,加密是嵌套的,很有可能存在多层的vmp嵌套,那么接下来就可以直接进行插桩分析了;

image-20250722235900303

image-20250722235914887

image-20250722235937371

这里只对push到栈中的函数以及本层VMP的函数调用位置进行插桩,push进去的函数也要跟进去进行插桩不要遗漏

然后我们在插桩的过程中可以看到几个比较特殊的函数,如下:

image-20250723001536488

image-20250723001553763

image-20250723001615267

看到这基本可以确定加密过程中用到了RSA函数,直接在encrypt下断点,看传入的参数即可

然后我们还可以看到关键字 SM4,那么也可以确定加密过程中用到了SM4加密方法,同样的,在SM4加密函数中打印传入的明文和密钥

image-20250723001921789

image-20250723001955157

日志分析

打印的日志非常明确

image-20250723002221960

第一我们可以看到对入参明文进行了GZIP压缩

image-20250723002316614

然后可以看到对压缩结果进行了base64编码

image-20250723002408094

然后可以看到获取了一份编码表

image-20250723002522626

然后可以很明显的看到在循环操作,先是先是获取一个随机数,然后和16进行相乘,然后charAt得出字符

image-20250723002644583

最终得到一个字符串

image-20250723002716177

然后可以看到入栈了RSA加密函数和密钥值

image-20250723002748222

紧接着就是setPublicKey,以及encrypt刚才得到的随机字符串

image-20250723002822217

image-20250723002923167

然后可以看到紧接着就调用了SM4加密,明文为GZIP的结果,密钥为刚才的字符串

image-20250723003002371

然后对RSA加密结果和SM4加密结果进行了拼接

image-20250723003129457

然后就是对拼接结果进行了btoa,得到data结果

image-20250723003138486

image-20250723003244665

流程总结

image-20250723003802631

整体不难,加密流程是封装好的函数,没有打散在VMP中,特别适合练手