来源:http://www.cnblogs.com/voodooq/rss#IDANI2UB
最近有个朋友 让我帮他在线投票,因为站点是限制IP的(这里其实是骗人的),我就帮他点了一下,可是我突然发现,第一名的投票数比后面的人多的很多,大概差3-4百票吧。我就觉得,第一个人肯定是找人帮忙投票了,但是这样就失去了投票本身的意义了。于是我就想故意搞恶一下。想到写一个自动投票的程序来完成。(算不算以暴制暴啊?)
我分析了投票的网站,上面说是限制IP的,但是根据我的分析,并不是限制IP,而是使用了COOKIES记录的投票的信息,而如果你清除了COOKIES就可以再投票了,不过这样需要每次去手动调整IE的参数,累都累死了。于是,我想能不能自动删除COOKIES并且自动提交页面提交呢?
通过以上的分析,我们知道了,作这个程序,需要两个环节:
1、自动清除COOKIES
2、自动提交表单
首先我们先看看第一个
我查询了,MSDN的网站,里面有个HI Script的专栏。介绍了很多执行WINDOWS脚本的技术,其中就有关于如何操作IE临时文件夹和COOKIES目录的功能。
http://www.microsoft.com/china/technet/community/scriptcenter/resources/hey1102.mspx
根据里面的方法,我在C#中写出了以下代码,用来删除COOKIES,要注意的是,其中的index.dat文件是无法删除的,所以我作了一个处理,删除了除他以为的所有内容,代码如下:
const int cookies = 33;
Shell32.Folder objFolder;
Shell32.FolderItems objFolderItems;
Shell32.ShellClass objShell;
objShell = new Shell32.ShellClass();
objFolder = objShell.NameSpace(cookies);
objFolderItems = objFolder.Items();
foreach(Shell32.FolderItem objFolderItem in objFolderItems)
{
if(!"index.dat".Equals(objFolderItem.Name.ToLower()))
{
File.Delete(objFolderItem.Path.ToString());
}
}
第一步解决了,该解决第二个问题了,我查询了一些资料。发现有两种方式可以解决我的问题
1、使用WebClient
这种方式是直接执行类似页面提交的方式,进行页面的控制,并且可以返回提交结果页的内容,速度快。
2、使用WebBrowser
这种方式类似于自己做了一个浏览器,然后控制页面中的对象进行提交。这样的速度有点慢。
所以我决定用第一种方式,代码如下:
WebClient wc = new WebClient();
string postData = "username=xxx"
wc.Headers.Add("Content-Type","application/x-www-form-urlencoded");
byte[] bReturn = wc.UploadData("http://www.xxx.xxx/vote.asp","POST",Encoding.Default.GetBytes(postData));
//MessageBox.Show(Encoding.Default.GetString(bReturn));
wc.Dispose();
看到了吧,这样就可以了。
剩下就是在用一个timer来循环执行就可以了。
哈哈,一切都是这么简单。不过还是觉得这么做有背公平的原则。希望大家不要用到不好的地方,当然用于惩戒作弊的人除外
投票作弊程序制作思路(续)——突破IP限制投票
上个星期,给朋友作了一个投票作弊的小程序<投票作弊程序制作思路>,后来,本来也相安无事。但是可能是朋友玩的过火了。他给自己投了1万多票了,而其他人还只有几百票,于是网站管理员发现了这个情况。不但把所有的记数全部清零,而且修改了投票的程序,这次真的变成了限制IP投票的方式了,这样就不能使用上次的方式了,我的朋友又来求我。
我拒绝了他的要求,因为他用我的程序作出了不好的事情。但是因为我想挑战一下自己,于是我就想试着作一个可以突破IP限制投票的程序,这次我就不给他了。嘿嘿
再来看看投票测试的步骤
1、联上ADSL,上网,投票,提示投票成功。重新投票,提示投票失败。
2、断开ADSL,重新联上ADSL,上网,投票,提示投票失败
3、删除了COOKIES,断开ADSL,重新联上ADSL,上网,投票,提示投票成功
从上面的操作我们可以看到,这次网站的程序员是使用了即限制COOKIES又限制IP的方法。有了上次的经验,限制COOKIES当然是没有办法难住我了,就是这个突破IP的方式应该如何呢?
我想到了使用代理方式,因为如果你使用代理服务器上网的话,网站获取的IP地址其实是代理服务器的。
于是我作了如下测试
1、在GOOGLE上搜索了一下代理服务器列表(好家伙,还挺多的)
2、打开IE的工具栏,在连接中使用代理连接,填了一个刚才代理服务器的地址。
3、重新连接投票网站,首先删除了COOKIES,然后投票,提示投票成功
4、又找了一个代理服务器地址,重新改了代理服务器的连接。
5、删除COOIKES。投票,提示成功。
看来方法找到了,但是如何在WINFORM中实现这个功能呢?
我在WINFORM中,写入一个textBox,将从网站上找到的代理服务器列表,贴进去然后在MSDN Library中搜索Proxy,发现了有好几种方式都能实现在WINFORM中的代理。
我选择了WebProxy的方式,按照上面的提示,写下如下代码:
WebProxy proxy = new WebProxy(proxyStr, true);
//proxy.Credentials = new NetworkCredential("userId", "password", "Domain");
WebRequest request = WebRequest.Create("http://www.xxx.com/vonet.asp?user=xxx");
request.Proxy = proxy;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Close();
我们分析一下
首先我声明了一个WebProxy的实例,proxyStr是代理服务器的地址,后面的true是对于本地服务,不是用代理服务器。这个其实可以不用写。
其次,建立request对象,写入需要创建的地址,并且设置了代理服务
然后使用resposne对象,执行对于请求的结果。
最后关闭输出
就是这么一个简单的方法,然后再结合我之前的删除COOKIES的方法。
哈哈,一个突破IP投票的小程序就写好了
我试了一下,效果还可以,有些代理由于无法使用,可能会抛出异常,我们捕获并作些处理就好了
恩,希望对大家有所帮助
现在很多网站都设有网站投票调查版块,门户网站更是如此。比如现在经常有网络投票,最红火的就是XX评选。
本人就网易www.163.com 说一下投票作弊技术。N日前,我在网易的看到一个投票栏目,我就去投了一票,可投了一票还不过瘾,还想再投一票,可网易提示我“您已经透过票了”晕!
网易是靠什么来识别客户端是否透过票?突然想到cookies!我就删掉了cookies,并且禁止浏览器接受Cookies,果我又顺利的头上了一票。这样似乎还不过瘾,这个样一个个提交也太慢了。为了提高速度,我用Ethereal这个嗅探器,得到了我提交选票过程中所post的数据,得到参数串,构造好一个完整的URL,直接来个提交,网易再次提示投票成功。
呵呵,接下来我用一个多线程URL扫描工具,自动反复提交这个URL,不过瘾,我连开了10个这样的程序,每个程序10个线程,我刷新一下投票结果,真爽,我喜欢的那个选项投票数量以每秒50个左右的速度递增,呵呵,我就是想试一下,并不想干扰结果的客观性,就关闭了。
投票系统大部分使用Cookies来鉴别客户端是否透过票,而不使用IP地址来判断。因为很多用户上网都是在内网,他们没有公网IP,都是通过有公网的网关NAT来访问Internet,如果同一个内网内的某个用户投了票,那么其他的各位就不能投票了。还有就是效率问题,用IP来做判断,需要把投过票的IP存储到数据库里,在其他用户投票时要拿出来对比,这样明显的要耗费服务器大量资源和时间。