首页 | IT新闻 | 硬件 | 操作系统 | 开发 | 网络编程 | 数据库 | 热门框架 | 网络安全 | 组网 | 建站指南 | 网页制作 | 特效 | 实用技巧 | 服务器 | 办公 | QQ | 探索 | 社区

  • 技术部落
  • 部落首页 > 程序开发 > C/C#/C++ > 正文
  • C#投票作弊程序制作思路
      2007-2-25  来源:网络资源  编辑:Jsbulo  热度:

    最近有个朋友 让我帮他在线投票,因为站点是限制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来循环执行就可以了。

    哈哈,一切都是这么简单。不过还是觉得这么做有背公平的原则。希望大家不要用到不好的地方,当然用于惩戒作弊的人除外