2012年9月:某网站投票程序设计总结


一.投票网站使用的技术

1.验证码技术

        投票网站使用了数字和字符组成的图片验证码,如下图所示。该注册码使用简单的位移和噪点技术,来降低程序的自动识别率。笔者的解决思路主要是使用AspriseOCR.dll的第三方控件进行自动识别。

         为了提高识别率,笔者主要从以下几个步骤进行处理

(1)将图像灰度化,灰度化算法来自网上,具体见源代码。

(2)对图像进行降噪处理,并将图像进行二值化。效果见图示,算法见源代码。

(3)由于图像只在垂直方向进行了平移,为了进一步提高识别了,程序将图像进行随便切割,以期待提高识别率。效果如图所示,算法见源代码。

(4)原本考虑使用去除空白区域,查找图片边缘,以提高识别率,但是由于时间关系,本次程序中未使用该方法。

在本程序中,曾经也使用过TesseractOCR解析验证码,但是Tesseract OCR是一个基于训练的系统,并且它貌似能够识别中英文等多种语言,所以放这里有些大材小用,反而识别率不高!注:没有仔细研究该工具,所以可能是没有掌握正确的使用方法。

 

2.IP限制技术

         投票网站使用了IP限制,规定一个IP地址一天只能投N票。在突破该类限制时,一般都使用一下几种方法。

(1)通过在投票请求中伪造X-FORWARDED-FOR头来欺骗服务器检查用户IP地址。

         要使用该方法,前提是服务器在读取客户端IP地址时,为了防止用户使用代理服务器投票,会检查代理服务器后的真实主机的IP地址,而放弃检查代理服务器低IP地址。而我们正式利用了该操作,直接把本机地址伪造称代理服务器,并在代理服务器后虚构一个主机,让网站检测。主要代码:request.Headers.Add("X-FORWARDED-FOR", randip());本程序就是使用了该技术投票。

(2)如果网站不检测代理服务器后的IP,那么我们一般使用代理服务器投票。但是代理服务器的效率较低,所以投票效率也很低。本程序未使用该技术。

(3)如果网站每个IP地址投票限制数较宽松,如每个IP能够投票10票以上,我们可以可虑使用程序自动拨号能够。每当投10票后,程序自动断开ADSL链路,并等待一段时间(如果不等待,很多ISP会提供同一个IP地址),再次拨号。本程序未使用该技术。

二、如何提高效率

(1)多线程/多进程技术的使用

         如果对服务器的限制措施突破的比较理想,我们可以使用多线程技术提高程序的执行效率。

(2)程序漏洞的使用

         很多网站在接收到了客户机的验证码后,不论验证码是否正确,都会将验证码清空,以防止客户机用同一个验证码反复投票。但问题在于如果只是简单的清空,我们可以使用新的空白验证码继续反复投票。本程序就使用了该技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值