文档章节

使用vbs识别验证码方案

孟飞阳
 孟飞阳
发布于 2016/07/09 10:31
字数 688
阅读 145
收藏 1
vbs

本文给出了一种验证码识别方案,前提是我们要有生成验证码的二进制码。

1、获取验证码图片

我们要识别的图片文件:

将以上图片保存到本地,并命名为:1.jpg

2、vbs源码

识别该图片的vbs源码如下:

Option Explicit

'要识别的图片名称
Dim picName
picName = "1.jpg"

'数字对照表,识别图片时就是把从图片提取的与该数组比较,相同的便是该数字
Dim NumAry(9)
NumAry(0)="00011000001111000110011011000011110000111100001111000011011001100011110000011000"
NumAry(1)="00011000001110000111100000011000000110000001100000011000000110000001100001111110"
NumAry(2)="00111100011001101100001100000011000001100000110000011000001100000110000011111111"
NumAry(3)="01111100110001100000001100000110000111000000011000000011000000111100011001111100"
NumAry(4)="00000110000011100001111000110110011001101100011011111111000001100000011000000110"
NumAry(5)="11111110110000001100000011011100111001100000001100000011110000110110011000111100"
NumAry(6)="00111100011001101100001011000000110111001110011011000011110000110110011000111100"
NumAry(7)="11111111000000110000001100000110000011000001100000110000011000001100000011000000"
NumAry(8)="00111100011001101100001101100110001111000110011011000011110000110110011000111100"
NumAry(9)="00111100011001101100001111000011011001110011101100000011010000110110011000111100"

Dim st,dataOff,imgW,imgH,imgWBytes,unitW,unitH
Set st = Wscript.createobject("ADODB.Stream")
st.Type = 1
st.Mode = 3
st.open()
'加载图片二进制流,并读取图片头信息
st.LoadFromFile(picName)
st.position = 10
'获取数据偏移
dataOff = BinVal(st.read(4))
st.read(4)
'图片宽、高(象素)
imgW = BinVal(st.read(4))
imgH = BinVal(st.read(4))
imgWBytes = imgW
'每个数字的宽、高(象素)
unitW = 8
unitH = 10

MsgBox st.LoadFromFile(picName)
MsgBox dataOff
MsgBox imgW&vbCrLf&imgH

Dim i,ii,tmp,validCode
'循环获取五个数字
For i=0 To 4
'获取某数字的特征,并与对照表进行比较,找到对应的则记录,否则以*号标识
'3188是第一个数字的左上角的数据偏移,每向后一个则偏移增加 unitW+1
tmp = getBound(3188+(unitW+1)*i)
For ii=0 To 9
If tmp = NumAry(ii) Then
validCode = validCode & ii
Exit For
End If
Next
If Len(validCode) = i Then validCode = validCode & "*"
Next
'关闭
st.Close()
Set st = Nothing
'程序完成
MsgBox("验证码是:"&validCode)

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'获取指定矩形区域的特征码
'bp:矩形左上角的偏移 unitW:矩形宽 unitH:矩形高
'按照矩形图形从左到右、从上到下的方向进行提取,如该点二进制为1则表示为1,否则为0
Function getBound(bp)
Dim str,i,ii
st.Position = bp
For i=1 To unitH
For ii=1 To unitW
If AscB(st.Read(1)) = 1 Then
str = str & "1"
Else
str = str & "0"
End If
Next
st.Position = bp - i*imgWBytes
Next
getBound = str
End Function
'将2进制转化为数字
Function BinVal(bin)
dim ret
ret = 0
for i = lenb(bin) to 1 step -1
ret = ret *256 + ascb(midb(bin,i,1))
next
BinVal=ret
End Function

Rem 将字符转换成2进制数组的函数
function ASCIIToByteArray(sText)
Dim objRS
Dim lTemp
Dim sTemp
sTemp = ""
For lTemp = 1 to LenB(sText)
sTemp = sTemp & Right("00" & Hex(AscB(MidB(sText,lTemp,1))),2)
Next

set objRS = WScript.CreateObject("ADODB.Recordset")
objRS.Fields.Append "Temp",204,LenB(sText)+1
objRS.Open
objRS.AddNew
objRS("Temp") = sTemp ' ADODB will convert here
objRS.Update
objRS.MoveFirst
ASCIIToByteArray = objRS("Temp") ' A variant byte array is returned
objRS.Close
set objRS = Nothing
end function

将以上vbs源码另存为:验证码图片识别.vbs,并和1.jpg在同一目录:

3、识别结果

双击“验证码图片识别.vbs”,识别结果如下:

 

 

© 著作权归作者所有

孟飞阳
粉丝 217
博文 1052
码字总数 564983
作品 5
朝阳
个人站长
私信 提问
CCS 2018论文解读:使用少量样本破解文本验证码

雷锋网 AI 科技评论按,本文作者是西北大学叶贵鑫,他为 AI 科技评论撰写了关于 CCS 2018 论文《使用少量样本破解文本验证码》的独家解读,内容如下,未经许可禁止转载。 1. 前言 相信大家在...

汪思颖
2018/12/31
0
0
Python 实现识别弱图片验证码

图片来自 unsplash 目前,很多网站为了防止爬虫肆意模拟浏览器登录,采用增加验证码的方式来拦截爬虫。验证码的形式有多种,最常见的就是图片验证码。其他验证码的形式有音频验证码,滑动验证...

猴哥Yuri
2017/12/23
0
0
selenium2-python22-验证码问题

对于 web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的结果的,对于系统来说使用验证码可以有效果的防止...

丰_申
2016/02/11
37
0
17 个很有用的 WordPress 验证码插件

WordPress 博客平台在反垃圾评论方面已经做得非常好了,但我们还是需要安装一些验证码插件来进一步屏蔽这些垃圾信息。验证码插件主要用于防止一些不想要的垃圾评论、注册等信息。 今天我们来...

oschina
2012/06/24
15.8K
3
实时验证码技术可改进生物识别身份验证

实时验证码(Real-TimeCaptcha)使用了一种对人类来说很简单但使用机器学习和图像生成软件欺骗合法用户的攻击者来说却很困难的独特问题,这种身份验证方法可以提高当前靠用户面部视频或图像的...

gs780j
2018/04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS中实现图片垂直居中

在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。” 当然出题并不是随意,而是有其现实的原因,垂直居中...

前端老手
48分钟前
4
0
vue学习笔记5:vue富文本编辑器ueditor的组件封装及问题

做一个后台,离不开文本编辑器,百度的ueditor经常用,这次改用vue写后台,需要再次集成一下,遇到很多问题,搞了一下午,整理一下,希望能够帮到后来者。 目标: 希望封装的ueditor组件,尽...

Jack088
今天
5
0
MFC多线程编程之四——线程的同步

八、线程的同步 虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成...

rainbowcode
今天
3
0
QWIDGET、QMAINWINDOW、QFRAME、QWINDOW、QDIALOG、QSCROLLAREA区别

QWindow一般不用 QDialog对话框而已 QScrollArea有滚动条的窗口。 from PyQt5.QtWidgets import (QWidget,QListWidget,QLabel,QApplication,QScrollArea,QFrame,QAction,QVBoxLayout,QLis......

shzwork
今天
3
0
CRM、DMP、CDP都是什么?有什么区别?

Markter对CRM系统(Customer Relationship Management System,客户关系管理系统),营销自动化等概念都已经比较熟悉,也许DMP(Data Management Platform,数据管理平台)也多多少少有些了解。...

怡海软件-CRM
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部