
记录一下当数据量非常大时,解密数据的一个思路,方法比较呆,但是主打一个能用就行
加解密分析
先看数据包
可以看到请求和响应都加密了,不过运气比较好,请求中有关键字helloworld
。顺着这个查应该就能找到加密函数了
两个地方,下面这个地方仔细看一下代码可以发现并不是我们目标的post数据包的加密过程,看第一个config,是把decodePre变量的值赋值为helloworld,所以找一下decodePre就好了。
轻松找到,配合jsrpc很简单就写完了解密脚本
问题
第二天晚上,同事和我说有个接口返回的数据量特别大,有达到了几十MB甚至100MB,用jsrpc解密直接卡死,
最开始我想的是把js下载下来,用nodejs运行解密函数,简单分析了一下代码构造了一下js,修改了一点报错。
1 | window.Int32 = { |
这种报错,只需要把window.给删掉就行了,然后在最前面加上const crypto = require('crypto');
即可。
最后也那一点普通的加密数据试了一下,发现很快就解出来了,但是尝试去解密那个几个大的数据的时候,解了十几分钟都没反应,
所以转换思路,把解密算法改写为python,当然这种活我自己肯定干不出来,或者说短时间内干不出来,所以我丢给ai来干,但是4000行的代码,从通义到copilot再到deepseek,都歇逼了。所以想到一个比较呆的办法:手动优化这个sm.js文件,就只保留解密部分,最后把解密部分的代码丢给ai,让他用python给我解决
看了一下代码的结构,大部分都是函数和定义,但是手动去找函数的结构有些麻烦,所以先用vscode的全部折叠功能(),把所有的函数全部折叠起来,然后一部分一部分的删,删一部分就运行一下代码,确保删掉的部分不影响正常解密。
最后在删了十来分钟后,得到一个200多行的代码,这时候把这个代码丢给deepseek,成功生成了python版本的,
最后用这个python版本的代码,跑了几分钟就把几个大文件全部解密出来了,最后获取到一批敏感数据