Python与JS逆向工程实践案例解析——以企查cha为例
我们废话不多说直接开始
1.根据我们需要的数据找到数据接口
通过关键词直接查找我们想要的数据
这里我们以小米为例
2.分析加密参数-观察请求头
不用说 第一个参数肯定是加密的,而且是键和值同时加密
cookie中一时半会看不出来 到时候再说
3.找到参数加密位置
但是这种不同页面参数名会变的怎么处理呢?
这里我就介绍两种方法:
1.搜索关键词-headers[
因为是请求头,它最后加密得到的值很有可能会通过字典赋值给headers,即headers[i]=u
2.hook参数名
这里每一页的参数名是不变的,我们通过重复请求同一页来hook
hook之后再逐步调试即可(经测试过没问题的)
找到加密位置比较简单就不赘述了,最后可知加密参数名为i 加密参数值为u
4.解析参数加密方式
1.加密参数名i的加密方式
1.1>.进入第一个断点观察
发现参数名其实就是通过加密 t(url) 和 n(请求负载)并toLowerCase(变小写)和最后substr(8, 20)取出下标8到20的值 来得到
注:这n后面的 (0,
o.default)(t) 是常数
感兴趣可以进函数里面看看
charCodeAt()
方法返回字符串中规定索引(下标)处字符的 Unicode编码。所以肯定是定值
1.2>.我们接着进入a.default函数中观察
发现还是调用其他函数 我们重复此操作继续跟一次
发现加密方式为HMAC 这里我们就可以通过node.js自己实现了
这里的adefault是自己在node.js中实现的算法
如下
注:这里为什么是sha512加密呢? 我们可以观察加密值的长度 发现是128为所以可以大概判断为sha512加密方式
最终效果图如下
2.加密参数值u的加密方式
2.1>.观察参数
这里多了个s.default)() 进入后观察
可知该值为常数
2.2>.同理进入第二个断点观察
注:这n后面的 (0,
o.default)(t) 是常数 说明跟上一次一样
2.3>.继续跟进第一个断点
2.4>.继续跟进a.default
发现加密方式和上一次i是一样的
2.5>.有了上一次经验 这次就很简单了 来通过node.js实现
效果图如下
注:这里需要注意函数的调用过程和参数的传递千万不能错
4.实现python调用
python就通过execjs来实现js文件调用即可 细节就不展示了
效果展示如下
代码用途
本代码仅供学习、研究和交流使用,禁止用于任何商业用途或非法用途。使用者应对其行为负责,作者不对代码的滥用或不当使用承担任何责任。
作者:努力的。。。