非WEB网页,C/S程序的验证码识别研究。 想做一个本地程序自动登录的工具,程序有验证码,显示为图片,看看谁有识别经验,有偿指导一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 C/S程序的验证码很简单,因为可以保存验证码的值,所以验证的时候直接拿来对比,不用分析图片在Image上TextOut画字就可以了,可以多做几张底图 这种程序,通常是,填写用户名,填写密码,填写验证码,然后点登陆,这个时候连接服务器(或者本身就是单机的软件)Delphi/BC程序,下断 GetTickCount,QueryPerformanceCounter,断下后,判断是否是否是Randomize函数,如果是,返回回去,在附近找到CALL,跟进去看看是否是RandInt,如果是就找到Random函数地址了,然后对这个函数下断,或者干脆入口处改为XOR EAX,EAX;RET这样每次登陆的时候,多半就是固定的验证码了如果是C程序,下断 msvcrt.rand,剩下的操作一样了总之一个道理就是:让随机数不随机而是固定的数 procedure TForm1.Button1Click(Sender: TObject); var S: string; I: Integer; vPoint: TPoint; vLeft: Integer; begin Randomize; S := Format( '%.4d ', [Random(10000)]); vLeft := 0; Canvas.FillRect(Canvas.ClipRect); for I := 1 to Length(S) do begin Canvas.Font.Size := Random(10) + 9; Canvas.Font.Color := RGB(Random(256) and $C0, Random(256) and $C0, Random(256) and $C0); if Random(2) = 1 then Canvas.Font.Style := [fsBold] else Canvas.Font.Style := []; Canvas.Font.Name := Screen.Fonts[10]; vPoint.X := Random(4) + vLeft; vPoint.Y := Random(10); Canvas.TextOut(vPoint.X, vPoint.Y, S[I]); vLeft := vPoint.X + Canvas.TextWidth(S[I]); end; end;复制粘贴同一代码 对。楼上的兄弟说的对,是要做验证码识别。示例图片可以看一下,截图都可以实现,已经保存为BMP,现在问题是要把图片转换为数字。http://user.qzone.qq.com/24584062?ptlang=2052#!app=4&via=QZ.HashRefresh 额的神呀,这个代段在XE2的FireMonkey中怎么会无效了? 获取 数字签名 信息 MIDAS.DLL问题 QuickReport的问题 主 题: 如何使用,循环,adoquery,adotable,adostoredpro.如何用参数 到东京去,我们要血洗这座城市! 在线等…… 一个机房记费管理软件 如何在DELPHI5中修改本地系统时间? 帮忙,请教一个问题! Delphi COM组件中的运行时错误????? delphi如何把pdf格式的文件转换成jpg格式 获取Delphi编译工程的源码?
在Image上TextOut画字就可以了,可以多做几张底图
这样每次登陆的时候,多半就是固定的验证码了如果是C程序,下断 msvcrt.rand,剩下的操作一样了总之一个道理就是:让随机数不随机而是固定的数
var
S: string;
I: Integer;
vPoint: TPoint;
vLeft: Integer;
begin
Randomize;
S := Format( '%.4d ', [Random(10000)]);
vLeft := 0;
Canvas.FillRect(Canvas.ClipRect);
for I := 1 to Length(S) do
begin
Canvas.Font.Size := Random(10) + 9;
Canvas.Font.Color := RGB(Random(256) and $C0,
Random(256) and $C0, Random(256) and $C0);
if Random(2) = 1 then
Canvas.Font.Style := [fsBold]
else Canvas.Font.Style := [];
Canvas.Font.Name := Screen.Fonts[10];
vPoint.X := Random(4) + vLeft;
vPoint.Y := Random(10);
Canvas.TextOut(vPoint.X, vPoint.Y, S[I]);
vLeft := vPoint.X + Canvas.TextWidth(S[I]);
end;
end;
复制粘贴同一代码
示例图片可以看一下,截图都可以实现,已经保存为BMP,现在问题是要把图片转换为数字。
http://user.qzone.qq.com/24584062?ptlang=2052#!app=4&via=QZ.HashRefresh