在逆向验证码的时候经常会碰到乱序图片,比如某象、某验, 通常他们乱序的验证码还原在浏览器上都是通过canvas来操作的.

搜码验证_为什么qq图片加载出来_验证码图片加载不出来

开启开发者工具中的选择元素功能 选中验证码看到canvas即可认为这是canvas的验证码

搜码验证_验证码图片加载不出来_为什么qq图片加载出来

在开发者工具中可以观察到原始图片为乱序图片(如果看不到可以打开图片的url)

搜码验证_为什么qq图片加载出来_验证码图片加载不出来

搜码验证_为什么qq图片加载出来_验证码图片加载不出来

通过canvas开发的api可以了解到图片的绘制会和这几个方法有关,所以我们看到canvas的验证码就可以去hook这些api来定位还原验证码的关键位置

定位到之后可以发现他是如何通过一个密钥来还原成原始图片的(这是我写的demo,没有混淆,通常商业案例是混淆的)

搜码验证_验证码图片加载不出来_为什么qq图片加载出来

通常来说会把他翻译成python然后来还原图片, 有点费时费力,这时就请出我们的主角node-canvas

搜码验证_验证码图片加载不出来_为什么qq图片加载出来

这个之前大家可能用他来和jsdom配合拿canvas指纹,但是他的真正用途还是模拟浏览器的canvas操作,可以看他的demo,发现和浏览器的canvas操作一模一样

为什么qq图片加载出来_验证码图片加载不出来_搜码验证

我们就来测试一下我的demo

为什么qq图片加载出来_验证码图片加载不出来_搜码验证

搜码验证_验证码图片加载不出来_为什么qq图片加载出来

通过canvas.toDataURL()得到的图片base64后的数据就可以在浏览器打开观察了验证码图片加载不出来验证码图片加载不出来,正常输出了图片(createCanvas的宽高要和页面上验证码图片的一样)

然后我们直接扣页面上的还原逻辑,我这里demo使用了rc4加密密钥,引入了crypto-js

搜码验证_验证码图片加载不出来_为什么qq图片加载出来

这时出来的图片就正确还原了.

接下来我们想把他和我们的python交互起来,如果用接口写就可以不考虑异步的问题,但是我为了方便就想用execjs来实现交互. 可以看到官方这里的loadImage这个api是一个异步形式, 和python交互起来不太方便,return 的时候是一个promise对象,我们可不可以把loadImage中的image单独拿出来呢? 因为他本身是加载url的,所以是异步形式不阻塞,但是这里我们的图片资源已经在本地了,就想变成同步形式.

所以这里我通过调试找到了他的image是Image类型

验证码图片加载不出来_为什么qq图片加载出来_搜码验证

然后我想是不是我们可以自己构造一个Image就不用来走他的api呢

搜码验证_验证码图片加载不出来_为什么qq图片加载出来

查到官方文档就可以发现这个Image是这样构造的,那就直接偷来了

验证码图片加载不出来_为什么qq图片加载出来_搜码验证

这样就和python交互起来方便多了

成功通过不写一行翻译代码还原了乱序图片

验证码图片加载不出来_为什么qq图片加载出来_搜码验证

测试案例是我们内部课程使用的不方便透露, 感兴趣的朋友可以去试试某验和某象, 想详细了解验证码逆向原理的可以来报名我们的课程哦

搜码验证_验证码图片加载不出来_为什么qq图片加载出来

———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击网站首页每天更新
站 长 微 信: aiwo51889