网页链接:企知道专利检索平台-免费查询专利,一键生成专利分析报告
概要
本文对企知道js逆向解码混淆数据的实战经历进行完整的复盘与经验总结
。
整体实现流程
- 检索响应数据来源:查看网页源代码未发现写死的数据,说明数据是动态加载。在xhr页面寻找过后发现search下有大批量数据加载。
- 寻找解密算法:笔者先尝试跟堆栈,未果。主要原因是网页中太多接口都走的同一个接口,而网页中debug时间过长会直接产生网页超时的报错。此外,跟堆一直没有找到带数据的参数,被迫只能放弃跟堆的想法。
最终采取直接搜索encrypt与decrypt的方式“凑巧”找到了解密算法,满足之前已经破解过的AES算法。扒下来拿到js中补环境。调用了crypto-js库,很轻松的完成了全部环境的补充。c的值并非固定写死,查看后发现c来源于列表e和索引值hasUse。而hasUse实际上是我们post请求之后提供的其中一个参数,那么只需要让py文件Post之后传入密文数据以及索引值hasUse即可。 - 细节完善。采用curlconverter快速转换search之后得到了响应数据,使用pyexecjs进行js的调用i方法进行解密即可。此时产生的问题是出现了“AttributeError: ‘NoneType‘ object has no attribute ‘replace‘”的问题,感谢来自https://blog.csdn.net/weixin_40812944/article/details/136132744的大佬提供的解决方案。pyexecjs是一个并不完善的库,而且现在也不再维护了,推荐大家还是安装pyExecJS2这个库更好些。这里报错的原因是因为pyexecjs调用时的默认编码是cp936,一种Gbk编码,我们引用subprocess模块让它编码改为encoding就解决问题啦~