注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路
本文的验证码网址如下,使用base64解码获得
aHR0cHM6Ly9pbnYtdmVyaS5jaGluYXRheC5nb3YuY24v
这个平台功能没什么好说的,就是发票查验,此接口唯一的难点有两处,一是查验需要的验证码,四种颜色的文字,选择一种颜色输入,该验证码,我很早就解决了,详情见该文章 利用PaddleOCR识别增值税发票平台验证码(开箱即用) 那么接下来来分析一下接口加密
解密步骤
- 请求验证码接口key9分析
- 请求验证码接口flwq39分析
- 校验接口分析
请求验证码接口key9分析
可以看到,传参还是蛮多的,我们使用搜索大法,最后定位在如下位置
这里除了没有flwq39以为,其他的都有了,往上跟栈,发现其他都是随机数或者时间戳,只有key9是加密参数,通过加密方法$[‘nnyd’][‘yzm’]跟栈进去后是wlop.js 文件,且该文件是经过混淆的,那么我们通过反混淆之后再去查看,就很清晰了,反混淆之后如下:
再往上查看代码,发现该函数是构造函数,这个就很好解决了,把该函数导出,自己构造一下,就能得到加密方法,那首先还是要把加密文件放到本地环境跑通,补上一些环境localStorage、window、navigator这些后,调用该加密方法,成功报错
通过网页上发现来自另一个文件92da.js, 也是经过混淆的,那么我们也反混淆之后放到本地
在补齐一些环境后,发现生成的值和网页上对不上,我们挂个代理后发现,竟然使用了window.__proto__检测,在如下位置
这里就不补环境了,直接return true吧,至此key9完成解密
请求验证码接口flwq39分析
不能直接搜索到的话还是跟栈奥铁子,在这个位置
可以看到,是传入整个_0x402199请求对象进去加密,但是实际加密方法里面,用到的只有url、type、data三个参数
这个加密也是在wlop.js里面,所以这个加密导出也就可以了,也是能成功拿到值
校验接口分析
校验接口就很好分析了,上面的加密步骤基本是一致的,key9使用的是$[‘nnyd’][‘cy’]方法加密,其他参数在请求验证码就可以拿到了,最后封装得到接口结果
key1为001代表成功