南强小屋 Design By 杰米

之前发过一篇文章,《对无序的验证码拼图还原》对拼图图像的还原,地址在这里。今天的这篇文章主要是对验证提交参数进行逆向分析,成功演示结果在最底部。

目标网址

```js
aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9pbmZlcmVuY2U=

![在这里插入图片描述](https://img-blog.csdnimg.cn/43a7ea0625844abab819cef74f0af4b8.png)### 抓包提交分析,因为是用的jsonP发送,这里没办法用XHR断点,```js提交链接   https://c.dun.163.com/api/v3/check

拖动提交参数

data = {    referer:'https://dun.163.com/trial/inference',    zoneId:'CN31',    id:'07e2387ab53a4d6f930b8d9a9be71bdf',    token:'9be1b7c8292f43439d10f2280abe0fbb',    acToken:'undefined',    data:'{"d":"","m":"2uGwkSzkkHWNvxTIpo4HjCWz\\H7N190ntn5i4jK1IP6Ls//e1d1i\\zxU5WMwMlzXQDPdnRFrQLHeov0ENzwXK/b+4o4rv0fF488wACUwfJ7zcVgyBVTM\\I2csuLKwSyeSPyJ\\+sLKhSnR+t/6zWskh2z9f7cYje21rw9IGh5mGMNZMu99hV7sYRPMPr\\S/BELzqtTVbu4TkutjGD5kqV9S2kE/b/T+j86RlcPrh/LkYhChIOt9JajayqVEyhalWROS/EfQdm9O6LI5FuMlWmCS9z9KnR1eA0XS5\\VU/6paz+gauRshkrZDnwfTC/cKuocGT4yqxi/Ar9s7SvJ1VJU\\KLrKs8gC+QfmiuUOzxvcWcH99+1j0USVSK4CkrYJm7A9YbC8lAJ\\zAeqKn0qH2PRU0dOBusTSKn8EVvxPSJuU0pudxrlMcgp33","p":"4jqSwRIFBE4WUzd9uS5\\XqmtsfS3","ext":"tFOr5AoqV5zZf61+zE8p2blNn4A/8Vkp"}',    width:'320',    type:'9',    version:'2.19.1',    cb:'5HuUbe4XK+D5Y7GrJCqQkGh9cFnj7NK1Hh1lGzd/hii2FbBMfNG/b1nFpy4Gx9ne',    extraData:'',    bf:0,    runEnv:10,    sdkVersion:undefined,    callback:'__JSONP_mvnvfob_6'}

以下几个参数是会变动的,所以我们主要是对这几个参数进行分析

{    token:'',    data:'',    cb:'',    callback:''}

我们先直接拖动验证一下,看下请求发送,会发送一个check请求,再查看一下请求堆栈调用,所有的调用都在文件core.v2.19.1.min.js里面,调用方法里面,发现有一个onDragEnd的调用,我们点进去看一下

网易易盾——推理拼图验证码参数逆向分析和调用
网易易盾——推理拼图验证码参数逆向分析和调用

在此处下断点,然后拖动验证,拖动结束的时候,会在这里断下,查看一下参数,这里的data参数就是我们提交的data参数,这里做了一个JSON.stringify的操作

网易易盾——推理拼图验证码参数逆向分析和调用
网易易盾——推理拼图验证码参数逆向分析和调用
不过这里有一个需要注意的点,下面这张图,你在这里断下之后,你每次取查看的时候他都是会变的,说明里面有一些随机数在变化,为了可以看到他真实固定的值,我们需要魔改一下代码,这里直接使用Fiddler抓包替换,然后二次编辑源码
网易易盾——推理拼图验证码参数逆向分析和调用

将代码下载下来,然后设置替换
网易易盾——推理拼图验证码参数逆向分析和调用

我们把上面的JSON.stringify独立出来,然后我们再提交验证一下最后的结果是不在这里
网易易盾——推理拼图验证码参数逆向分析和调用

到了这里我们不需要做其他的,直接拖动验证,可以看到这个值和我们提交的是一致的,首先把data里面的参数一个一个解出来
网易易盾——推理拼图验证码参数逆向分析和调用

首先我们先分析一下m

 m: _0x4b1c93(_0x37bdc3['sample'](this[_0x487f4d(0x4b4)], _0x3b034c)[_0x487f4d(0xb64)](':'))
‘_0x487f4d(0xb64)’表示“join”_0x3b034c是一个固定值50this[_0x487f4d(0x4b4)]是一个字符串数组,简化为this['traceData']根据上面的信息,简化之后就是_0x4b1c93(_0x37bdc3['sample'](this['traceData'], 50).join(':'))

网易易盾——推理拼图验证码参数逆向分析和调用

我们先把this['traceData']这个数组的内容给找出来,直接搜索关键字this['traceData'],发现都在这这个作用域内部,这个线索算是断了,不过根据他的英文翻译,可以猜测它可能是我们需要的路径,只是已经做了加密处理

我们到源码看一眼上下文,会发现目前是在onDragEnd,拖拽结束的事件里面
网易易盾——推理拼图验证码参数逆向分析和调用
那么我们根据上面的发现,在onMouseMove里面看一下,我们分别在这两个位置下断点,可以看清他到底发生了什么,当我们把鼠标移到外面的时候,会在第一个位置断下,我们把第一个断点去掉,只留下if里面那个,然后就不会了

网易易盾——推理拼图验证码参数逆向分析和调用

当我们按住方块拖动的时候,刚好他就断下来了,说明这里面就是路径跟踪的处理逻辑

网易易盾——推理拼图验证码参数逆向分析和调用

var _0x4c7923 = this[_0x38ffef(0x105)]['state'][_0x38ffef(0x7a4)]var _0x1eb7c7 = _0x5054ec(_0x4c7923, [Math[_0x38ffef(0xad7)](_0x3c8f13), Math[_0x38ffef(0xad7)](_0x46347e), _0x37bdc3['now']() - this['drag'][_0x38ffef(0xba1)]] + '')this[_0x38ffef(0x4b4)][_0x38ffef(0x2fb)](_0x1eb7c7)

上面代码简化之后就是这个样子

var _0x4c7923 = this.$store.state.tokenvar _0x1eb7c7 = _0x5054ec(_0x4c7923, [Math.round(_0x3c8f13), Math.round(_0x46347e), new Date().getTime() - this['drag'][_0x38ffef(0xba1)]] + '')this.traceData.push(_0x1eb7c7)

网易易盾——推理拼图验证码参数逆向分析和调用

_0x1eb7c7的值是一个经过处理字符串,最后一行的this.traceData.push(_0x1eb7c7),这个基本可以肯定,我们之前在onDragEnd里面遇到的那个数组就是通过这里产生的

知道上述信息之后,我们还要魔改一下源码,先定义一个全局变量win_traceData和win_traceDataStr

网易易盾——推理拼图验证码参数逆向分析和调用

首先修改一下'onMouseMove': function(_0x7e6f33)里面的逻辑
网易易盾——推理拼图验证码参数逆向分析和调用

然后呢,在'onDragEnd': function(_0x115c47)的时候输出一下结果,验证一下我们之前的推测

网易易盾——推理拼图验证码参数逆向分析和调用

可以看到,这里的值是没有做二次处理,那这个函数就是
网易易盾——推理拼图验证码参数逆向分析和调用

那么我们现在就是要找这个函数

网易易盾——推理拼图验证码参数逆向分析和调用

跳转到function _0x1767c8(_0x3261e8, _0x286191)这里面,到了这里,我们还要再修改一下源码,方便我们后面算法的调用,这里我们不去扣他的代码,不过觉得自己有能力的可以去扣一下,反正我去我去扣了之后发现,太难了

网易易盾——推理拼图验证码参数逆向分析和调用

路径加密函数

我们定义一个全局变量win_0x1767c8,然后把代码修改如下

网易易盾——推理拼图验证码参数逆向分析和调用

网易易盾——推理拼图验证码参数逆向分析和调用

我们创建一个文件本地进行调用测试,先验证一个坐标的数据

var _0x1eb7c7 = _0x5054ec(_0x4c7923, [m1, m2, diftime] + '')这一句代码也就可以变为var _0x1eb7c7 = win_0x1767c8(_0x4c7923, [m1, m2, diftime] + '')