手机自想寻求一个可以自动填写或者自动省略发送填写验证码填写错误的软件插件

手把手教你用羽枫系列插件进行验证码识别 _ 验证码讨论 - 按键精灵论坛
腾讯微博:
软件版本:2014.03软件大小:55.1M更新时间:
软件版本:3.0.3(免root)软件大小:36.2M更新时间:
软件版本:1.2.1软件大小:37.4M更新时间:
查看: 12594|回复: 40
按键元老资深按键用户的尊贵荣誉勋章
以天上人间游戏为例1.首先截图,多截一些,但必须保证是BMP格式的原图,JPG,GIF等压缩格式会造成色彩失真,如图0您所在的用户组无法下载或查看附件
图02.用photoshop 打开一副, 把白色验证码部分截取出来, 根据多幅图片对比,确定每个验证码的范围为图中参考线界定的范围,划分为4个范围,每个矩形都为 24 X 22 像素,如图1您所在的用户组无法下载或查看附件
图13. 把其中一个字母,如"Y", 截取出来(24x22像素), 根据多幅 "Y" 字符的图片比较,确定哪些是杂色点,把杂色点去掉 ( 也可如图3一样把字母部分填充为黑色) , 如图2, 图3您所在的用户组无法下载或查看附件
图2您所在的用户组无法下载或查看附件
图34. 保存图片为BMP格式,用画图工具打开,如图4, 然后用插件的 Maple.GetChar 函数取得点阵信息您所在的用户组无法下载或查看附件
图4脚本如下Plugin Mywin=Maple.GetForegroundWindow()
Plugin Maple.GetWindowRect(Mywin,l,t)
Plugin x=Maple.GetChar(1,"FFFFFF",0,65+l,53+t,24,22)
//65,53 为Y图片的顶点, 根据自己具体情况, 如图5
MessageBox "字符Y的点阵信息为" & x
//可以把这句改成 Saystring 输出到记事本中
复制代码您所在的用户组无法下载或查看附件
图55. 按照同样的办法,取得其他字符的点阵信息6. 把所有的点阵信息,按照字符的大小顺序,放入一个数组,如
//................这只是部分.....................
Dim Char(35)
Char(0) = ""
Char(2) = ""
Char(3) = ""
Char(4) = ""
//................这只是部分.....................
复制代码7. 确定游戏中的验证码位置,利用Maple.ElmChar 或者 Maple.EamChar 函数,进行识别//......
//Char数组定义部分....代码比较长,详细见附件中压缩文档
Plugin Mywin = Maple.GetForegroundWindow()
Plugin Maple.GetClientRect(Mywin,Pl,Pt)
T = Timer()
Plugin X=Maple.ElmChar(Char,1,"FFFFFF",0,Pl+375+I*26,Pt + 529,24,22,50)
//背景色相对固定,文字颜色变化较大, 所以颜色模式用1,FFFFFF 为背景色
//ElmChar 返回符合值的索引
If X >= 0 And X <= 25
//索引 0-25 表示字母A-Z, 与之对应的字符 ASC值为 X + 65
X = Chr(X + 65)
X = Chr(X + 48 - 26)
//索引 26-35 表示数字0-9 ,与之对应的字符 ASC值为 X + 48 - 26
MessageBox s &
"用时" & Timer- T & " 秒"
复制代码全部代码太长,详细见附件中压缩文件,另附文中插图.........[ 本帖最后由 淡蓝如海 于
12:50 AM 编辑 ]
附件:您需要才可以下载或查看附件。没有帐号?
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
Plugin Maple.GetClientRect(Mywin,Pl,Pt) 是不是漏了2个返回值?根据你介绍的Maple.GetClientRect(窗口句柄,[获取左顶点X坐标],[获取左顶点Y坐标],[获取宽度],[获取高度])作用: 返回客户区范围(Left,Top,Width,Height)要点: 如不需要取得全部范围数据, 可以部分省略,如省略设置其为0,如案例2Plugin Mywin=Maple.GetForegroundWindow()Plugin Maple.GetWindowRect(mywin,0,0,w,h)MessageBox "当前窗口区宽度" & w & ",高度" & hPlugin Maple.GetClientRect(mywin,0,0,w,h)MessageBox "当前窗口客户区宽度" & w & ",高度" & h**********************************************************还有Plugin X=Maple.ElmChar(Char,1,"FFFFFF",0,Pl+375+I*26,Pt + 529,24,22,50)它的误差值,你取了50,请问它是什么范围到什么?[ 本帖最后由 luweijile 于
10:51 PM 编辑 ]
识别脚本不写了,玩单片机,Arduino单片机而非安卓
按键元老资深按键用户的尊贵荣誉勋章
- - 这个主要是为了方便大家的不用一个一个去研究,找一些"特征点"直接取得全部点阵放进去就行了简化了操作新手可以"照猫画虎" (和版主学的成语) 的动下手而且是插件,速度上比vbs快,老手也可以用来提高下效率当然只能识别固定形状的验证码扭曲的肯定做不了通用的
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
按键明星按键明星勋章学有所成学有所成勋章,新手步入按键学堂的第一枚勋章按键精灵开发者5级可通过提升认证等级来升级勋章:脚本作者商业小精灵作者绑定账号后自动赠送
辛苦了,好贴,顶一下。
承接各种游戏脚本制作、办公信息录入等,诚心的密QQ:&&华夏工作室
按键元老资深按键用户的尊贵荣誉勋章
原帖由 luweijile 于
10:28 PM 发表 Plugin Maple.GetClientRect(Mywin,Pl,Pt) 是不是漏了2个返回值?根据你介绍的********************************************************* ... 这个是我没说清楚的那个函数用的参数数组,参数的个数是不定的,除了第一个窗口句柄,其他任意部分都是可以省略的其实按它在vb中的原型,以下形式都是合法的GetClientRect Mywin, l, , ,hGetClientRect Mywin, , , w, hGetClientRect Mywin, lGetClientRect Mywin, l, t,w只是按键的参数传递,不允许 ", ," 中什么都没有如果不要的数据在前面,只能在前面的参数位补 0 (其实随便补个什么把它占着都行)比如你说的GetClientRect(Mywin,0 , 0 , w ,h )但后面数据不要,还是可以直接省掉的GetClientRect(Mywin,l ,t )[ 本帖最后由 淡蓝如海 于
11:09 PM 编辑 ]
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
按键元老资深按键用户的尊贵荣誉勋章
第二个问题,我函数说明中有的,是容许的误差点个数图片中总有一些杂色点,它们肯定会影响到点阵信息对比的结果容许误差值就是说,错误的,不符合的点,超出这个值,才认为不是那个字符如果完全不允许误差,也就是容许误差值为0,相当于两个点阵必须完全符合,一个点都不错[ 本帖最后由 淡蓝如海 于
11:12 PM 编辑 ]
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
明白你意思了(GetClientRect(Mywin,l ,t ,0,0)就是(GetClientRect(Mywin,l ,t )二就是说这里是50个点?[ 本帖最后由 luweijile 于
11:09 PM 编辑 ]
识别脚本不写了,玩单片机,Arduino单片机而非安卓
按键元老资深按键用户的尊贵荣誉勋章
是的,我设定最多允许50个杂色点带来的误差
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
完全看懂了!谢谢你这么好的插件!(功能很强)现在问个超这验证本身的问题,关于里面的一个函数Maple.ColorSimilar(基准颜色,当前颜色,偏差值)1.三个参数支持变量吗?2."当前颜色的红,绿,蓝三分量相比基准颜色,一旦有一项超出偏差值所允许的范围"这里不是很理解:Maple.ColorSimilar(基准颜色,当前颜色,偏差值)Plugin x=Maple.ColorSimilar("FFFFFF","EFEFEF",20)A.偏差值的理论范围就是0-255 ?B.红,绿,蓝三分量相比基准颜色,一旦有一项超出偏差值 是不是指"EFEFEF"比"FFFFFF" 里面只要红色超过"基准颜色的红色"20(其他两色不超过) 就认为不相似?反过来,只要三个颜色 都 误差小于20 就认为是相似的?
识别脚本不写了,玩单片机,Arduino单片机而非安卓
按键元老资深按键用户的尊贵荣誉勋章
当然支持变量啊- -//颜色相似是要看3分量的如FFFFFF 分成红 FF ,蓝 FF , 绿 FF 3分量10进制相当于都是 255后面的 EF 就是 239 ,239,239我就看每个分量,比如 239 是不是>255 - 偏差 同时 是不是 < 255+偏差3个都在偏差范围内,才认为相似
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
按键元老资深按键用户的尊贵荣誉勋章
而且我用的不是那种Left(Color,2) Mid...什么的切割方法可以说,你用 Maple.ColorSimilar("FF","0000ef",20)大小写混杂,还外加位数不全都可以
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
好了,用与验证识别已经全明白了。以后在使用过程中,如果发现可以改进的地方,我会发信息给你的。大家一定也好好研究一下,绝对会受益非浅!
识别脚本不写了,玩单片机,Arduino单片机而非安卓
原帖由 淡蓝如海 于
11:52 PM 发表 而且我用的不是那种Left(Color,2) Mid...什么的切割方法可以说,你用 Maple.ColorSimilar("FF","0000ef",20)大小写混杂,还外加位数不全都可以 QQ华夏的用不成这个!我下一个QQ三国的就用这个!
识别脚本不写了,玩单片机,Arduino单片机而非安卓
按键元老资深按键用户的尊贵荣誉勋章
ifcolor 或者 CompColor 里好像也是支持相似的只是偏差值是预先设定的,也不知道是多少,所以我自己写了一个
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
11[ 本帖最后由 ppoiy 于
12:20 AM 编辑 ]
以后的游戏可能都会慢慢的向猪仙反外挂型式过度...提问,,然后选择答案,,同一题目在三个小时后就失效..这种反外挂型式可能以后都会在别的游戏中慢慢的出现
原帖由 花花无缺 于
10:28 AM 发表 以后的游戏可能都会慢慢的向猪仙反外挂型式过度...提问,,然后选择答案,,同一题目在三个小时后就失效..这种反外挂型式可能以后都会在别的游戏中慢慢的出现 贴个图上来,我看一下
识别脚本不写了,玩单片机,Arduino单片机而非安卓
按键元老资深按键用户的尊贵荣誉勋章
刚才把函数稍微改了点地方速度竟然提升了一倍- -[ 本帖最后由 淡蓝如海 于
12:01 PM 编辑 ]
附件:您需要才可以下载或查看附件。没有帐号?
先生啊 ,难道您不知道, 人生本来就是由矛盾组成的啊!
请问以下哪个物品不是水果?梨苹果鸭西瓜请问以下哪组汉字不是由反义词组成的?上升--下降黑--白上--下对--框请问以下哪个汉字不是由同样的汉字组成?鑫数品吕请问以下哪个汉字不是由同样的汉字组成?卡吕森品请问这样的按键有办法解决吗?漫话验证码缘起,程序原理及其他_自动测试脚本语言_领测软件测试网
漫话验证码缘起,程序原理及其他
发表于:来源:作者:点击数:
注:本文中很多资源来源于Internet,版权和本文作者无关,仅仅引用。 现在,网站上登录,发表评论。。。。。。。。是个输入框下都有请输入验证码,泡网的人啊,都输入过。如果你想了解验证码的作用,请先自己Google一下;如果你想制作自己的验证码程序,比如As
注:本文中很多资源来源于Internet,版权和本文作者无关,仅仅引用。 现在,网站上登录,发表评论。。。。。。。。是个输入框下都有请输入验证码,泡网的人啊,都输入过。如果你想了解验证码的作用,请先自己Google一下;如果你想制作自己的验证码程序,比如Asp(Asp.net)的,Php的,Jsp的。。。。。。。等等你也可以先Goolge一下。如果你想欣赏一下验证码长什么样的,那好,不用先Google了,看看我找得几个站点的验证码。 1.欣赏验证码 我见到的第一个验证码:8723,随机的一数字字符串,最原始的验证码,验证作用几乎为零,呵呵。 CSDN网站用户登录用的:&,GIF格式,目前常用的随机数字图片验证码。图片上的字符比较中规中矩,验证作用比上一个好。没有基本图形图像学的人,不可破!可惜读取它的程序,在CSDN使用它的第一天,好像就在里发布了,真是可怜! QQ网站用户登录用的:&,PNG格式,图片用的随机数字+随机大写英文字母,整个构图有点张扬,每刷新一次,每个字符还会变位置呢!有时候出来的图片,人眼都识别不了,厉害啊… MS的hotmail申请时候的:&,BMP格式,&随机数字+随机大写英文字母+随机干扰像素+随机位置+???,这个就让你服气了吧……..不愧是MS老大啊.如果你看不清楚上边的字符了,还可以点下边链接,听语音的读取(注:没有随机背景噪声干扰的,只是TTS语音)。这个倒是很体贴用户! Google的Gmail注册时候的:&JPG格式,随机英文字母+随机颜色+随机位置+随机长度(?)+??,呵呵,看起来不错。。。 找了几个,都找累了,最后给大家贴一个很强的验证码字符,是GMAIL的: & (特别说明:这是eye中别人发的,不要误认为是我碰到的,汗啊!!) 欣赏完了这些验证码,那这些验证码有什么用呢,不知道去Google的同学结果怎么样? 2.验证码作用分析 我Copy一段MS在Passport帮助中的话: 键入图片中的字符有助于确保是普通用户而不是自动化的程序在填写注册表单。& 这一点很重要,因为攻击者会使用有害程序注册大量的&Web&服务帐户(如&Passport)。攻击者可以使用这些帐户为其他的用户制造麻烦,如发送垃圾邮件或通过同时反复登录多个帐户来延缓服务的速度。 在大多数情况下,自动注册程序不能识别此图片中的字符。 简单的说呢,就是防止攻击者编写程序,自动注册,重复登录暴力破解密码。。。。。。, 验证码实现流程:端随机生成验证码字符串,保存在内存中,并写入图片,发送给浏览器端显示,浏览器端输入验证码图片上字符,然后提交服务器端,提交的字符和服务器端保存的该字符比较是否一致。一致就继续,否则返回提示。 攻击者编写的程序,很难识别验证码字符,顺利的完成自动注册,登录。。。。。。。。。而用户可以识别填写,所以这就实现了阻挡攻击的作用。 特别说明的是,其实robot制作者也可以去识别验证码的,所以我说第一种直接输出字符的验证效果几乎为零。而图片的字符识别,就是看图片上的干扰强度了。 就实际的效果来说,验证码只是增加攻击者的难度,而不可能完全的防止。 不过,无论怎么说,为了系统更,采用验证码也是一种措施,那么怎么编写验证码程序呢,相信Google一下,就有很多现成的代码吧。 3.程序原理 &&&通过上边的分析,特别是流程分析,相信写出代码是很容易的事情。比如目前流行的实现: 服务端文件名:&imgcode.* 伪代码: 随机码生成à1.存入Session(“code”) 2.调用绘图函数或是直接写2进制图片格式,内存中生成图片 客户端文件名:login.htm 伪代码: &form&&name=”login”&action=”check”&& &input&type=”text”&name=”checkcode”&value=””&/&&img&src=”imgcode.*”/& &/form& 服务端文件名:checekcode.* 伪代码: if&获取客户端checkcode的值=Session(“code”) { &ok } else { err } 基本的实现就是这样了,其实就是验证码图片的生成部分,校验部分。为了加强防伪码的作用,关键的地方是加入干扰,图片生成。 4.验证码中图像技术讨论 &目前流行的WEB服务器端技术中,很多都有绘图的API函数,生成图片的代码也就很简单了,就不多提了。这里用没有内置绘图函数Asp,讨论根据已知图片格式,写入2进制数据,生成图片,先乱弹点图形图像的东西。 我们看下图: &&
如果我们把上边的0和1的位置想成彩灯,0表示灯亮,1表示等灭,那么变成下图:
0所在位置组成了一个”1”字。如果在电子技术上,上图就可以看成一个10x10的点阵。同样的,显示屏也可以看作一个个的点组成。我们输出一组01的信号,明暗相间组成一个图像,就是最简单的黑白位图。简单的显示原理就是这样了。 假想有一个人在控制一组10*10的灯,他利用灯的明暗来显示一个“1”字,那么他用什么样的顺序依次开灯呢。将灯分成水平方向和竖直方向,从左下角的第一个开始,先左到右水平方向控制灯,一行完成后,再向上,依次进行,最后到达右上角结束。 &&&在电子技术上,我们把这样的动作成为行扫描和场扫描,对应描述的行频和场频(刷新频率)就是衡量显像管好坏的重要指标(跑题???)。如果我们用程序控制在屏幕的一块区域(图像大小)中按上边的扫描方法,根据这样一串2进制&字符“0111”,将0的位置用白色显示,其他的位置则是黑色,那么我们就输出了一个黑底白字的“1”的图像。当然,如果在中显示图像,还要遵循图像的格式标准,否则是无法被系统识别的,所以还要加上表示图像格式本身的信息(图像头)。 啰嗦了这么多,我们来看一个具体的生成BMP格式验证码的代码(本代码是根据网上的一个代码简化的,版权归原作者): 生成验证图片文件:checkcode.asp &% ’本代码来源网上代码 ’版权归原作者 ’为说明原理去掉了杂点生成& ’本人不负任何责任 Call&Com_CreatValidCode()& Sub&Com_CreatValidCode()& ’&禁止缓存& Response.Expires&=&-9999&& Response.AddHeader&"Pragma","no-cache"& Response.AddHeader&"cache-ctrol","no-cache"& Response.ContentType&=&"Image/BMP"& Randomize& Dim&i,&ii,&iii& Const&cAmount&=&36&’&文字数量& Const&cCode&=&"ABCDEFGHIJKLMNOPQRSTUVWXYZ"& ’&颜色的数据(字符,背景)& Dim&vColorData(2)& vColorData(0)&=&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&’&蓝0,绿0,红0(黑色)0的位置颜色& vColorData(1)&=&ChrB(255)&&&ChrB(255)&&&ChrB(255)&’&蓝250,绿236,红211(白色)&1的位置颜色 ’&随机产生字符& Dim&vCode(4),&vCodes& For&i&=&0&To&3& &&vCode(i)&=&Int(Rnd&*&cAmount)& &&vCodes&=&vCodes&&&Mid(cCode,&vCode(i)&+&1,&1)& Next& session("CheckCode")&=&vCodes&&’记录入Session& ’&字符的数据& Dim&vNumberData(36)& vNumberData(0)&=&"0111"& vNumberData(1)&=&"0111"& vNumberData(2)&=&"0011"& vNumberData(3)&=&"0111"& vNumberData(4)&=&"0011"& vNumberData(5)&=&"0111"& vNumberData(6)&=&"0111"& vNumberData(7)&=&"1111"& vNumberData(8)&=&"0111"& vNumberData(9)&=&"1111"& vNumberData(10)&=&"0011"& vNumberData(11)&=&"0111"& vNumberData(12)&=&"1111"& vNumberData(13)&=&"1111"& vNumberData(14)&=&"0111"& vNumberData(15)&=&"1111"& vNumberData(16)&=&"1111"& vNumberData(17)&=&"0011"& vNumberData(18)&=&"0111"& vNumberData(19)&=&"1111"& vNumberData(20)&=&"0011"& vNumberData(21)&=&"0011"& vNumberData(22)&=&"0011"& vNumberData(23)&=&"0111"& vNumberData(24)&=&"1111"& vNumberData(25)&=&"1111"& vNumberData(26)&=&"1011"& vNumberData(27)&=&"0011"& vNumberData(28)&=&"0111"& vNumberData(29)&=&"1111"& vNumberData(30)&=&"1111"& vNumberData(31)&=&"1111"& vNumberData(32)&=&"1111"& vNumberData(33)&=&"0011"& vNumberData(34)&=&"1111"& vNumberData(35)&=&"0011"& ’&输出图像文件头& Response.BinaryWrite&ChrB(66)&&&ChrB(77)&&&ChrB(230)&&&ChrB(4)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&_& &&ChrB(0)&&&ChrB(0)&&&ChrB(54)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(40)&&&ChrB(0)&&_& &&ChrB(0)&&&ChrB(0)&&&ChrB(40)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(10)&&&ChrB(0)&&_& &&ChrB(0)&&&ChrB(0)&&&ChrB(1)&&&ChrB(0)& ’&输出图像信息头& Response.BinaryWrite&ChrB(24)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(176)&&&ChrB(4)&&_& &&ChrB(0)&&&ChrB(0)&&&ChrB(18)&&&ChrB(11)&&&ChrB(0)&&&ChrB(0)&&&ChrB(18)&&&ChrB(11)&&_& &&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&&ChrB(0)&&_& &&ChrB(0)&&&ChrB(0)& For&i&=&9&To&0&Step&-1&&’&历经所有行& &&For&ii&=&0&To&3&&’&历经所有字& &&&For&iii&=&1&To&10&’&历经所有像素& &&&&’&逐行、逐字、逐像素地输出图像数据&,仔细分析这里。 &&&&Response.BinaryWrite&vColorData(Mid(vNumberData(vCode(ii)),&i&*&10&+&iii,&1))& &&&Next& &&Next& Next& End&Sub& %& 显示验证码:showcode.htm &&&script&language="script"& &&&&&&&&&&&&&&&&var&D=new&Date(); &&&&&&&&&&&&&&&&var&hh=D.getHours(); &&&&&&&&&&&&&&&&var&mm=D.getMinutes(); &&&&&&&&&&&&&&&&var&ss=D.getSeconds(); document.write("&img&src=checkcode_t.asp?time="&+&hh&+&":"&+&mm&+&":"&+&ss&+&"&width=120&height=20&"); &/script& 上边的调用方法是CSDN论坛里的看到的,可以防止缓存,后退也能刷新,很好,所以一并借用了。。 上边代码的分析,还是大家自己完成吧,仅仅是个示范作用,根据我说的原理,再参考BMP图像的格式(Google一下),应该很容易。下边我们讨论一下增强验证图片作用,加入识别干扰的一些常见方法。 5.验证码中识别干扰技术 前边说了,验证码想要不被攻击者破解是不可能的,但是我们可以加入干扰,增加破解的难道。就好像CSDN的验证码,无干扰,很容易破解,而后边的几个,难道都加大了很多。实际中,干扰主要是分2类,一类是颜色,一类是形状位置。我们来看。 5.1图片中加入杂点像素。实现代码(&以上边代码为示范): &&&&If&Rnd&*&99&+&1&&5&Then&’&随机生成杂点&5是出现机率,可修改 &&&&&Response.BinaryWrite&vColorData(0)& &&&&Else& &&&&&Response.BinaryWrite&vColorData(Mid(vNumberData(vCode(ii)),&i&*&10&+&iii,&1))& &&&&End&If 5.2图片中的字符颜色是随机。这有2种,一种是每次整个字符颜色不同,一种是每个像素随机颜色随机变化。像素颜色随机实现代码: a=Rnd&*&256&& b=Rnd&*&256 c=Rnd&*&256& vColorData(0)&=&ChrB(a)&&&ChrB(b)&&&ChrB(c) &&&&&&Response.BinaryWrite&vColorData(Mid(vNumberData(vCode(ii)),&i&*&10&+&iii,&1))& &&&&End&If 5.3图片杂点颜色随机。实现代码: a=Rnd&*&256&& b=Rnd&*&256 c=Rnd&*&256& vColorData(0)&=&ChrB(a)&&&ChrB(b)&&&ChrB(c) If&Rnd&*&99&+&1&&5&Then&’&随机生成杂点&5是出现机率,可修改 &&&&&&&&Response.BinaryWrite&vColorData(0)& &&&&&Else& &&&&&&&&Response.BinaryWrite&vColorData(Mid(vNumberData(vCode(ii)),&i&*&10&+&iii,&1))& &&&&&End&If 5.4采用多种字体中的随机一种,字的形状变化,识别的难度更大。即是vNumberData(36,3)…….每次每个字符随机选择一种字体。代码省略。 5.5还有其他的很多办法,比如背景颜色改变,位置移动,长度改变等等。这里不再一一列举。总之是颜色和形状位置的随机改变。 6.结束 都不知道该怎么结束了,本来还想写破解的,还是算了,下次再说。写了上边些,自己都觉得说不清楚了。。。。。。还是强制结束吧。 希望自己的东西对写验证码的朋友有帮助,人人都可以写出自己的喜欢的验证码,而不是很多系统都一样。 错漏的地方很多,而且是很多网上的东西拼盘起来的,大家将就看看吧,同时对我引用过的东西的所有原作者表示感谢。下次还是少写这样长的东西啊。
原文转自:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)查看: 670|回复: 5
手机自动填验证码的工具or插件
兑换券6 元
在线时间0 小时
木蚂蚁M点8
主题帖子积分
木蚂蚁小学五年级, 积分 1859, 距离下一级还需 1141 积分
木蚂蚁小学五年级, 积分 1859, 距离下一级还需 1141 积分
有没有大神有手机端自动识别填写验证码的工具或者插件?比如我运行某应用进行兑奖或者抢购要填验证码的时候,只要点一下输入框就能自动识别填写好验证码,只要点确定就可以了,这样可以大大提高兑奖或者抢购的成功率,或者有没有输入法可以做到这点?
兑换券0 元
在线时间0 小时
木蚂蚁M点0
主题帖子积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
兑换券0 元
在线时间0 小时
木蚂蚁M点0
主题帖子积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
兑换券0 元
在线时间0 小时
木蚂蚁M点0
主题帖子积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
兑换券0 元
在线时间0 小时
木蚂蚁M点0
主题帖子积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
兑换券0 元
在线时间0 小时
木蚂蚁M点0
主题帖子积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
木蚂蚁小学三年级, 积分 294, 距离下一级还需 206 积分
chen315 发表于
推荐版块:
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp|&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
&nbsp&nbsp
木蚂蚁官方微信:9052人阅读
android前行(16)
最近做注册的时候看到很多app在手机接受到短信的时候直接填写验证码到界面省略用户自动输入,感觉这样确实蛮人性化的呵呵,于是自己也做了一个
首先我使用了ContentObserver监听短信,(最好知道您的验证码从那个号码发过来)
然后从短信中用正则的分组去拿到验证码(当然验证码必须是什么&#26684;式)
贴出关键代码:
注册监听短信数据库的&&
ContentObserver c=new ContentObserver(han) {
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
han.sendEmptyMessage(0);
getContentResolver().registerContentObserver(Uri.parse(&content://sms&), true, c);
Handler han = new Handler() {
@SuppressWarnings(&deprecation&)
public void handleMessage(android.os.Message msg) {
String codestr =
codestr = Cus_UnitTools.getsmsyzm(Reg_ForgetPassword.this);
code.setText(codestr);
requestcode();
} catch (Exception e) {
Log.e(&yung&, &验证码提取失败:& + codestr);
public static String getsmsyzm(Activity c) {
Uri uri = Uri.parse(&content://sms/inbox&);
String[] projection = new String[] { &address&, &person&, &body& };
String selection = & address='& + JTPHONE + &' &;
String[] selectionArgs = new String[] {};
String sortOrder = &date desc&;
@SuppressWarnings(&deprecation&)
Cursor cur = c.managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
if(cur!=null&&cur.getCount()&0){
cur.moveToFirst();
String body = cur.getString(cur.getColumnIndex(&body&)).replaceAll(
&\n&, & &);
cur.close();
return getyzm(body, YZMLENGTH);
cur.close();
* 从短信字符窜提取验证码
* @param body 短信内容
* @param YZMLENGTH
验证码的长度 一般6位或者4位
* @return 接取出来的验证码
public static String getyzm(String body, int YZMLENGTH) {
// 首先([a-zA-Z0-9]{YZMLENGTH})是得到一个连续的六位数字字母组合
// (?&![a-zA-Z0-9])负向断言([0-9]{YZMLENGTH})前面不能有数字
// (?![a-zA-Z0-9])断言([0-9]{YZMLENGTH})后面不能有数字出现
Pattern p = Pattern
.compile(&(?&![a-zA-Z0-9])([a-zA-Z0-9]{& + YZMLENGTH + &})(?![a-zA-Z0-9])&);
Matcher m = p.matcher(body);
if (m.find()) {
System.out.println(m.group());
return m.group(0);
//有些验证码是纯数字的那么直接用这个就可以了
//Pattern p = pile(&(?&![0-9])([0-9]{& &#43; YZMLENGTH&#43; &})(?![0-9])&);
监听完成后记得getContentResolver().unregisterContentObserver(c);注销监听
这样子就可以监听到短信数据库的变化了记住还需要加入权限顺便列出短信权限
&&& &!-- 发送短信--&
& &&uses-permission android:name=&android.permission.SEND_SMS& /&
&&& &!-- 阅读消息 --&
&&& &uses-permission android:name=&android.permission.READ_SMS& /&
&&& &!-- 写入消息 --&
&&& &uses-permission android:name=&android.permission.WRITE_SMS& /&
&&& &!-- 接收消息 --&
&&& &uses-permission android:name=&android.permission.RECEIVE_SMS& /&
demo就不写了呵呵这里很清楚也很简单..不喜勿喷,有错回帖,转载必备 尊重作者-yung7086
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:85209次
排名:千里之外
原创:17篇
评论:41条
(1)(1)(1)(1)(1)(2)(1)(1)(1)(7)

我要回帖

更多关于 验证码填写错误 的文章

 

随机推荐