自动刷票工具的实现机理简介

夫人有需求,查了点相关资料,mark。

 

ZZ自:http://spy.cnblogs.com/archive/2006/02/12/329297.aspx

 

 

很久以前,网络游戏都是WEB界面的,很简单,大多是社区游戏,那时最复杂的可能也就是第九城市啦。我玩的那个社区游戏叫阳光BBS,里面分了很多帮派。按我的性格,我自然而然的就加入了逍遥派。那段时间写了很多东东,大部分都是关于逍遥的。甚至后来还弄了个网站,做为逍遥人的家。由此可见,我也是个很怀旧的人。很多人和事,至今未忘。当然,这都是闲话。说说正题,那时在游戏里要练功(就象现在的网游中练级一样),通过几个页面,来取得经验值,通过进聊天室,取得金钱。聊天还好,每进出一次聊天室可以得五两银子,在聊天室每待十分钟,也可以得五两银子。聊天的同时,有钱拿。但是练功就比较枯燥一些,要在网页上点来点去。为了解放自己的双手,后来就做了个练功机器人。方法是做一个网页,用javascript先去调一个PHP程序进行网站登录,取得COOKIE,然后转向到另一个网页,网页中同样采用javascript来自动点击。这种自动机器人我把它称之为页面级的机器人。
 
页面级的机器人使用起来不是很可靠,而且不方便保密(因为当时社区里有好几个帮派,其他帮派把网页改一下就可以用于他们帮派练功啦)。所以,后来又编写了一个程序版的泡钱练功工具,由于是基于MSWEB控件做的,所以我把它称之为WEB控件机器人。在WEB控件机器人的开发中,需要注意的是微软的DCOM文档对象的定义。当时国内关于DCOM的资料很少,无奈之下只好直接去MS的资料中心下载了英文文档啃。也正是由于资料的缺乏,一开始做的工具还是页面+WEB控件的方式来做的。记得那时为了屏蔽网站的弹出页面想了很多办法,后来在一个英文网站上查到一个资料,原来只要在控件的事件中加上很简单的一条语句就可以解决。资料不全真的很麻烦呀。其实WEB控件的功能很强大,可以直接操纵网页的元素。象做投票程序,就是利用WEB控件先显示投票页面,然后自动点选,然后调用页面上的SUBMIT按钮的CLICK事件发送表单。
 
WEB控件的优点是可以解析网页的HTML,但在投票中这也成了它的缺点。这时,INET控件开始走入我的视线。INET控件可以直接收包、发包,而不对包的内容做解析。在WEB控件机器人中,投完票之后,一般网站都会自动刷新一下投票页面,如果投票页面上有很多图片,就会影响到投票的速度。而INET控件则不然,它发送和接收的速度都要比WEB控件要快,但是它的缺点是,程序员要自己想办法来分析数据。发送时简单一些,只要构造好HTTP HEAD,再加上表单数据,将包发出即可。但是发送之前一般网站都会发送一些标志过来,有的还会有验证码。这时,就要求程序员把INET接收的数据分析后,重新构造必须的内容,写入一个WEB控件,生成一个网页。
 
经过多次实践,这种方式投票效果最好。
 
另外,现在验证码采用的越来越普遍了,固定位置方式的验证码可以采取先取样,生成字模,然后进行对比(XOR运算)方法来破解。这种验证码不管是加什么样的噪点,基本上都是可以识别出来的。因此,现在更多的是采用变形而且不固定位置的验证码。这种验证码的破解要复杂了很多很多,我只有个初步思路。我想仍然应该是先取样,但是不是生成字模,而是生成一个矢量特征,然后对验证码图片进行分解,对每一部分以同样方法生成矢量特征,再与特征库对比。其难点在于,怎么样去生成矢量特征?怎么样去消除矢量噪点?矢量特征库如何对比?相似度如何计算?呵呵,这个好象已经是图像识别的领域了,难度不是一般的大。
zz自:
在写辅助投票工具中要解决以下问题 
1。更换IP 
现在很多投票都对IP进行了限制,例如:每个IP每天只能投十票,或者每半小时投一票等等。因此,在辅助投票工具中要能自动更改IP。解决的办法无非是更换本机IP(直接挂在公网上有独立IP的机器)、重复拨号、使用代理等方法。 
如果有IP资源(比如在电信机房。。嘿嘿),可以调用NETSH来更换IP,代码为 
cmdStr = "netsh interface ip set address name=""本地连接"" source=static addr=" & Trim(inIP) & " mask=255.255.240.0 " 
hwnd = WinExec(cmdStr, 0) '参数为0则隐藏窗体 
     If hwnd < 32 Then 'hWin<32则启动应用程序失败 
         MsgBox "error!" 
         Exit Sub 
     End If 
txtShowIP.Text = inIP 
在XP下更换IP速度较慢,建议将操作系统换成WIN2000,一般1至3秒即可更换完毕。 
如果没有IP资源,就只好采取重新拨号或更换代理的办法来变换IP。由于电信局对拨号用户分配IP的规则,重新拨号也往往会得到重复IP,而更换代理则由于代理不稳定,效果也不好。不过我曾经试过ADSL,虽然也会出现重复IP,但其拨号上线的速度很快,建议没有IP资源的用户可以采取反复拨号、投票的方法来避开IP验证。 
2。自动勾选投票选项。 
一般投票会将所有候选人列出来,勾选后点投票。勾选会有一定的要求,例如最少不能少于五名,最多不能少于十名等等。在这种情况下,除了每次一定要勾选指定的客户以外,还要随机的勾选其他四名候选人,将票数分散,防止其他候选人对指定客户形成威胁。同时,为了方便客户操作,还应当允许客户指定投某些人的票(比如排在最后几名的候选人)。自动勾选有两种实现的方法,一是先用WEB控件将网页下载,然后通过DOCUMENT对象对CHECKBOX进行操作。这种方法比较简单、直观。另一种是使用截包工具(SNIFFER)截下投票时发送的包,通过分析找到勾选的参数,然后在程序里直接构造出包,通过INET控件递交到服务器。这种方法速度较快,并可通过返回的数据分析投票是否成功。使用这种方法时,要注意中文的URL编码问题。 
3。COOKIES 
如果你更换了IP,重新打开了IE,并按规定投出票,但是服务器仍然告诉你:你已经投过票,请不要重复投票。这时,你就应该考虑服务器可能是使用COOKIES来标识了你的机器。你需要在重新打开IE之前清空COOKIES。另外,VB的WEB控件和INET使用的是同一个COOKIE域,所以,为了能够再次投票,最好在清空COOKIES之后重启程序,方法是在MAINFORM的UNLOAD事件中加一个Shell App.EXEName。不过一定要注意呀!一定一定要加一个东东对这一行语句进行开关,不然的话。。。。。。。 
4。验证码的识别 
为了防止使用投票工具、MOUSE点击器等进行自动投票,现在网站都采用了验证码机制。关于验证码的识别,我在另一篇里已经讲了。这里只讲一下取验证码图片的问题。在做测试时,从网上找到一个资料,是说可以通过调用“COPY”这个右键菜单复制到剪贴板中,然后再从剪贴板拷贝到PIC控件中。后来正式做的时候却忘了怎么做的。上网查到半夜二点多也没找到那个资料。后来没办法,我采取了另一种方法来实现:使用DOCUMENT对象来调用滚屏定位到验证码的位置,然后使用BitBlt来直接取到图片。

你可能感兴趣的:(自动刷票工具的实现机理简介)