在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → QQ模拟登陆 源码下载

QQ模拟登陆 源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.02M
  • 下载次数:57
  • 浏览次数:1730
  • 发布时间:2014-07-12
  • 实例类别:C#语言基础
  • 发 布 人:zjwking
  • 文件格式:.cs
  • 所需积分:2
 相关标签: 模拟登陆 模拟 QQ 登陆

实例介绍

【实例简介】
【实例截图】

【核心代码】

using MSScriptControl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DotNet4.Utilities;
using System.Text.RegularExpressions;
using System.Web;
using NS_SnsSigCheck;
using Newtonsoft.Json.Linq;
using System.Web.Script.Serialization;
using System.Threading;

namespace BOYAPOKER
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        HttpHelper http = new HttpHelper();
        
        HttpResult HtmlResult;
        String receiveFromCheck;
        String forCheckUrl;
        String forImageUrl;
        public int hasimage = 0;   //表示是否含有验证码图片
        public int Enter_state=0;  //表示是否含 有验证码
        String checkCode;
        String[] checkNum;
        string md5pass,md5pwd;
        string JsonStr;
        int checkCodePosition;
        string gtk,skey,jscommd,cookiestr;
         HttpItem item = new HttpItem()
        {
            URL = "http://qqapp.qq.com/app/23006.html",//URL     必需项    
            Method = "get",//URL     可选项 默认为Get   
            IsToLower = false,//得到的HTML代码是否转成小写     可选项默认转小写   
            Cookie = "",//字符串Cookie     可选项   
            Referer = "",//来源URL     可选项   
            Postdata = "",//Post数据     可选项GET时不需要写   
            Timeout = 100000,//连接超时时间     可选项默认为100000    
            ReadWriteTimeout = 30000,//写入Post数据超时时间     可选项默认为30000   
            UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统     可选项有默认值   
            ContentType = "text/html",//返回类型    可选项有默认值   
            Allowautoredirect = false,//是否根据301跳转     可选项   
            //CerPath = "d:\123.cer",//证书绝对路径     可选项不需要证书时可以不写这个参数   
            //Connectionlimit = 1024,//最大连接数     可选项 默认为1024    
            ProxyIp = "",//代理服务器ID     可选项 不需要代理 时可以不设置这三个参数    
            //ProxyPwd = "123456",//代理服务器密码     可选项    
            //ProxyUserName = "administrator",//代理服务器账户名     可选项   
            ResultType = ResultType.String
        };
         /// <summary>
         /// 将账号16进制化
         /// </summary>
         /// <returns></returns>
         public string hexchar2bin(string  uin)
         {
             string[] strarry=new string [8];
             string str16,str=null;
             int xstrnum = 0;
             long u;
             u = Convert.ToInt64(uin);
             str16 = u.ToString("X");
             if (str16.Length<16)
             {
                 int a = str16 .Length/ 2;
                 for (int n = 0; n < a; n  )
                 {
                     str16 = "00"   str16;
                 }
             }
             for (int i = 0; i < str16.Length-1; i=i 2)
             {
                 strarry[xstrnum]="\\x" str16.Substring(i,2);
                 xstrnum  ;
             }
             for (int i = 0; i < strarry.Length; i  )
			{
			    str=str strarry[i];
			}
                return str;
         }
         /// <summary>
         /// 获取时间戳
         /// </summary>
         /// <returns></returns>
         public string timestring()
         {
             DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
             DateTime dtNow = DateTime.Parse(DateTime.Now.ToString());
             TimeSpan toNow = dtNow.Subtract(dtStart);
             string timeStamp = toNow.Ticks.ToString();
             timeStamp = timeStamp.Substring(0, timeStamp.Length - 7);
             return timeStamp;
         }
         /// <summary>
         /// 将Dictionary重新按key进行字典升序排列
         /// </summary>
         /// <param name="param">Dictionary数据</param>
         /// <returns></returns>
         public Dictionary<string, object> sortJson(Dictionary<string, object> param)
         {
             Dictionary<string, object> query_string = new Dictionary<string, object>();
             List<KeyValuePair<string, object>> myList = new List<KeyValuePair<string, object>>(param);
             myList.Sort(delegate(KeyValuePair<string, object> s1, KeyValuePair<string, object> s2)
             {
                 return s1.Key.CompareTo(s2.Key);
             });
             foreach (KeyValuePair<string, object> pair in myList)
             {
                 query_string[pair.Key] = pair.Value;
             }
             return query_string;
         }
         /// <summary>
         /// 将json数据反序列化为Dictionary
         /// </summary>
         /// <param name="jsonData">json数据</param>
         /// <returns></returns>
         public Dictionary<string, object> JsonToDictionary(string jsonData)
         {
             //实例化JavaScriptSerializer类的新实例
             JavaScriptSerializer jss = new JavaScriptSerializer();
             try
             {
                 //将指定的 JSON 字符串转换为 Dictionary<string, object> 类型的对象
                 return jss.Deserialize<Dictionary<string, object>>(jsonData);
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }
         }
         /// <summary>
         /// 将Dictionary序列化为json数据
         /// </summary>
         /// <param name="jsonData">json数据</param>
         /// <returns></returns>
         public string DictionaryToJson(Dictionary<string, object> dic)
         {
             //实例化JavaScriptSerializer类的新实例
             JavaScriptSerializer jss = new JavaScriptSerializer();
             try
             {
                 //将指定的 JSON 字符串转换为 Dictionary<string, object> 类型的对象
                 return jss.Serialize(dic);
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }
         }
        private void button1_Click(object sender, EventArgs e)
        {
            FileStream fs = new FileStream("PASS.JS", FileMode.Open);
            StreamReader m_streamReader = new StreamReader(fs);

            m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
            string strLine = m_streamReader.ReadLine();
            m_streamReader.Close();
            m_streamReader.Dispose();
            fs.Close();
            fs.Dispose();
            ScriptControlClass js = new ScriptControlClass();
            js.Language = "JScript";
            js.AddCode(strLine);
             if (pass.Text==null||uin.Text==null||veriycode==null)
            {
                MessageBox.Show("登陆参数不完整!","提示");
                Enter_state = 1;
            }
            if (Enter_state==0)
            {


                md5pass = "md5js(\""   pass.Text   "\",\""   veriycode.Text   "\",\""   hexchar2bin(uin.Text)   "\")";
                md5pwd = js.Eval(md5pass).ToString();
                forCheckUrl = "http://ptlogin2.qq.com/login?u="   uin.Text   "&p="   md5pwd   "&verifycode="   veriycode.Text   "&aid=15000101&u1=http%3A%2F%2Fwww.qq.com%2Fqq2012%2FloginSuccess.htm&h=1&ptredirect=0&ptlang=2052&from_ui=1&dumy=&low_login_enable=0&regmaster=&fp=loginerroralert&action=23-40&mibao_css=&t=1&g=1&js_ver=10041&js_type=1";
                item.URL = forCheckUrl;
                item.Referer = "http://qzone.qq.com/";
                HtmlResult = http.GetHtml(item);
                item.Cookie = HtmlResult.Cookie;
                receiveFromCheck = HtmlResult.Html;
                checkCodePosition = receiveFromCheck.IndexOf("(")   1;
                checkCode = receiveFromCheck.Substring(checkCodePosition, receiveFromCheck.LastIndexOf(")") - checkCodePosition);
                checkNum = checkCode.Replace("'", "").Split(',');  //验证码数组
                if (checkNum[0]=="0")
                {
                    textBox2.Text = "登陆成功!";
                    skey = item.Cookie.Substring(item.Cookie.IndexOf("skey=", 0) 5, 10);
                    jscommd = "getGTK(\""   skey   "\")";
                    gtk = js.Eval(jscommd).ToString();
                    item.URL = "http://appsupport.qq.com/cgi-bin/qzapps/userapp_addapp.cgi?uin=" uin.Text "&g_tk=" gtk;
                    item.Referer = "http://ctc.qzs.qq.com/qzone/v5/toolpages/fp_utf8.html";
                    item.Method = "post";
                    item.Postdata = "uin="   uin.Text   "&g_tk="   gtk   "&appid=23006&via=\"\"&detail=\"\"&qzreferrer=http://my.qzone.qq.com/app/23006.html#jump=http%3a%2f%2frc.qzone.qq.com%2f23006";
                    HtmlResult = http.GetHtml(item);
                    receiveFromCheck = HtmlResult.Html;
                    item.Method = "GET";
                    item.URL = "http://my.qzone.qq.com/app/23006.html";
                    HtmlResult = http.GetHtml(item);
                    receiveFromCheck = HtmlResult.Html;
                    //string A = MidContent(receiveFromCheck, "\"no\" src=\"", "\" width=\"780\"");
                    //item.URL = A;
                    //HtmlResult = http.GetHtml(item);
                    //receiveFromCheck = HtmlResult.Html;
                    string PostData = MidContent(receiveFromCheck, "\"openid\":\"", "\",\"openkey\"");
                    //JObject obj = JObject.Parse("{\"api\":\"65\",\"langtype\":\"1\",\"method\":\"Members.Create\",\"mid\":\"0\",\"mtkey\":\"\",\"param\":{\"ANPSetting\":\"4\",\"APNSToken\":\"APA91bEsQTnR66YLBr2dzIzydJJtixolsRsv9XUbFhDkRJWpHp5I7-zfGl-zUbkIOvyjGWywhZmDWtUx9qfhBTgV22favyR-nHlOvIXQ6hZknrQxoxFPvgahVai2QZIAoyPC-SwH5TWbOtMZ_-LIWOU5Y3Qh3aQw6Q\",\"appid\":\"100029\",\"appkey\":\"c4b6eaa30ad2bd635a1154b34549b3d7\",\"mnick\":\"Lan998\",\"sitemid\":\"000000000000000000000000848CF5B5\",\"token\":\"1637E6D9BC1A21DA4C171A33391CE837\"},\"protocol\":\"1\",\"sid\":\"93\",\"time\":\"1400763756\",\"unid\":\"196\",\"version\":\"4.6.2\",\"vkey\":\"\",\"vmid\":\"\"}");
                    Dictionary<string, object> sortedDic = new Dictionary<string, object>();
                    sortedDic.Add("api", "65");
                    sortedDic.Add("langtype", "1");
                    sortedDic.Add("method", "Members.Create");
                    sortedDic.Add("mid", "0");
                    sortedDic.Add("mtkey", "");
                    sortedDic.Add("param", "{\"ANPSetting\":\"4\",\"appid\":\"0\",\"appkey\":\"init\",\"mnick\":\"\",\"sitemid\":" PostData ",\"token\":\"\"}");
                    sortedDic.Add("protocol", "1");
                    sortedDic.Add("sid", "93");
                    sortedDic.Add("time", timestring());
                    sortedDic.Add("unid", "196");
                    sortedDic.Add("version", "4.5.2");
                    sortedDic.Add("vkey", "");
                    sortedDic.Add("vmid", "");

                    //FileStream fs1 = new FileStream("api.txt", FileMode.Open);
                    //StreamReader m_streamReader1 = new StreamReader(fs1, UnicodeEncoding.GetEncoding("GB2312"));
                    //string line;

                    //if (!File.Exists("设置分ID.txt"))
                    //{
                    //    FileStream fs4 = new FileStream("设置分ID.txt", FileMode.Create, FileAccess.Write);//创建写入文件 
                    //    StreamWriter m_streamWrite2 = new StreamWriter(fs4, UnicodeEncoding.GetEncoding("GB2312"));

                        //while ((line = m_streamReader1.ReadLine()) != null)
                        //{
                            string sig = SnsSigCheck.MakeSig("post", "/v3/user/get_multi_info", sortedDic, "c9152e99a2d6487fb0bfd02adec3aa16&");

                            if (sortedDic.ContainsKey("sig") == false)
                            {
                                sortedDic.Add("sig", sig);
                            }
                            else
                            {
                                sortedDic["sig"] = sig;
                            }
                            item.URL = "http://app23006-1.qzoneapp.com/api/api.php";
                            item.Referer = "";
                            //item.Cookie = "";
                            item.Method = "post";
                            item.PostEncoding = System.Text.Encoding.UTF8;
                            item.ContentType = "application/x-www-form-urlencoded; Charset=UTF-8";
                            item.Header.Add("X-TUNNEL-VERIFY", "2.0.0&2b7&buCTsYDX6SWA0YDg1uBUKjlUkyKmORhUY1SSOSKT4L3gk7cl4NbgGKbgveCTt7fRs DW4BumIrP4npL9gHOFhNtj 8yxk4X44L3gk7e3/Z7X4NbgzD9UP2vgveAKJbFZk1tO4NbgG6EbORimIiJUa8yhOWvMoaFUGKEYY4CTzKEYkhhUCjngveAK yVboFmTW07g1uA5a2uAgBuea1SmCqaAkioiYwobkhsbphtrCsyeKqFUnuC94CXq u7pgJ774Nbgt07psZ7gveAl6vpM3bee4Nbgk7GA1 klgOC94CXq v2e1 DW4GM/Y C94G2TkviAgNfg1uBJVNaOsNbra9azItahVNaOa C94G2TktGz4NbgOZKToYCTVCpjOcxUY2trkqE5zGsqa6ZrY6GTzJPMzMzgveAvgCWA4NbgoabMzMymOTnMzFRjYxih4L3gHvqenoDg1uA5KqbgveAeGSWA4Nbga AM&6FCpjg 7mAlUZdmZ4d1K5d7pKag=");
                            //JsonStr = "api="   SnsSigCheck.JSONEncoding(DictionaryToJson(sortJson(sortedDic)));
                            //item.Postdata = JsonStr;
                            item.Postdata="api="   DictionaryToJson(sortJson(sortedDic));
                            HtmlResult = http.GetHtml(item);
                            receiveFromCheck = HtmlResult.Html;
                            textBox1.Text =textBox1.Text  receiveFromCheck   "\n";
                            //m_streamWrite2.WriteLine(receiveFromCheck);
                            //Thread.Sleep(10 * 1000);
                        //}
                        m_streamReader.Close();
                        fs.Close();
                        //m_streamWrite2.Close();
                        //fs4.Close();                          
                    //}
                    //else
                    //{
                    //    textBox2.Text = "删除相关文件";
                    //}

                    
                    
                }
                else
                {
                    MessageBox.Show("网页错误");
                }

            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
         /// <summary>
        /// 字节数组生成图片
        /// </summary>
        /// <param name="Bytes">字节数组</param>
        /// <returns>图片</returns>
        private Image byteArrayToImage(byte[] Bytes)
        {
            MemoryStream ms = new MemoryStream(Bytes);
            return Bitmap.FromStream(ms, true);
        }

        /// <summary>
        /// 删除cookie中的域名信息
        /// </summary>
        /// <param name="Bytes">字符串</param>
        /// <returns>字符串</returns>
    
        public static string FormatCookie(string cookie)
        {
            string tmpcookie = string.Empty;
            foreach (string strtemp in Regex.Split(cookie, ","))
            {
                Match match = Regex.Match(strtemp, @"^\w[^=] =[^;] ");
                if (match.Success)
                {
                    tmpcookie = tmpcookie   match.Value   ";";
                }
            }
            return tmpcookie;
        }

        //取中间字符
        public string MidContent(string s, string s1, string s2)
        {
            
            int IndexofA = s.IndexOf(s1) s1.Length;
            int IndexofB = s.IndexOf(s2);

            return s.Substring(IndexofA , IndexofB - IndexofA ); 

        }
        
        private void GetCheck()
        {
            //获取验证信息
            //验证信息格式为:ptui_checkVC('0','!MIW','\x00\x00\x00\x00\x9a\x65\x0f\xd7') 
            //其中分为三部分,第一个值0或1判断是否需要图片验证码
            //                          第二个值是默认验证码,若不需要图片验证码,就用此验证码来提交
            //                          第三部分是所使用的QQ号码的16进制形式
            forCheckUrl = "http://check.ptlogin2.qq.com/check?uin="   uin.Text   "&appid=15000101&r="   new Random().NextDouble();
            item.URL = forCheckUrl;
            HtmlResult = http.GetHtml(item);
            item.Cookie = HtmlResult.Cookie;
            receiveFromCheck = HtmlResult.Html;
            //MessageBox.Show(receiveFromCheck); //打印获取的网页内容

            //将验证码信息的三部分存入数组

            if (receiveFromCheck != null)
            {
                checkCodePosition = receiveFromCheck.IndexOf("(")   1;
                checkCode = receiveFromCheck.Substring(checkCodePosition, receiveFromCheck.LastIndexOf(")") - checkCodePosition);
                checkNum = checkCode.Replace("'", "").Split(',');  //验证码数组
                if ("1".Equals(checkNum[0])) //判断是否需要图片验证码
                {
                    hasimage = 1;
                    forImageUrl = "http://captcha.qq.com/getimage?aid=15000101&uin="   uin.Text   "&cap_cd="   checkNum[1];
                    item.URL = forImageUrl;
                    item.ResultType = ResultType.Byte;
                    HtmlResult = http.GetHtml(item);
                    item.Cookie = HtmlResult.Cookie;
                    //将获取的图片验证码存入电脑
                    //System.Drawing.Image.FromStream(HtmlResult.ResultByte).Save(@"d:/code.jpg");
                    pictureBox1.Image = byteArrayToImage(HtmlResult.ResultByte); //将读取到的图片验证码输出到picture_box面板上
                }
                else //若不需图片验证码,验证码就等于checkNum[1]
                {
                    hasimage =0;
                    item.Cookie = FormatCookie(item.Cookie);
                    veriycode.Text = checkNum[1];
                }
            }
            else
            {
                MessageBox.Show("检查验证码错误,网络有故障", "提示");
            }
        }
        

        private void uin_Leave(object sender, EventArgs e)
        {
            GetCheck();
        }

        private void button2_Click(object sender, EventArgs e)
        {

            Dictionary<string, object> sortedDic = new Dictionary<string, object>();
            Dictionary<string, object> Dic = new Dictionary<string, object>();
            sortedDic.Add("api", "65");
            sortedDic.Add("langtype", "1");
            sortedDic.Add("method", "Members.Create");
            sortedDic.Add("mid", "0");
            sortedDic.Add("mtkey", "");
            sortedDic.Add("param", "{\"ANPSetting\":\"4\",\"APNSToken\":\"APA91bEsQTnR66YLBr2dzIzydJJtixolsRsv9XUbFhDkRJWpHp5I7-zfGl-zUbkIOvyjGWywhZmDWtUx9qfhBTgV22favyR-nHlOvIXQ6hZknrQxoxFPvgahVai2QZIAoyPC-SwH5TWbOtMZ_-LIWOU5Y3Qh3aQw6Q\",\"appid\":\"100029\",\"appkey\":\"c4b6eaa30ad2bd635a1154b34549b3d7\",\"mnick\":\"Lan998\",\"sitemid\":\"000000000000000000000000848CF5B5\",\"token\":\"1637E6D9BC1A21DA4C171A33391CE837\"}");

            sortedDic.Add("protocol", "1");
            sortedDic.Add("sid", "93");
            sortedDic.Add("time", "1400763756");
            sortedDic.Add("unid", "196");
            sortedDic.Add("version", "4.6.2");
            sortedDic.Add("vkey", "");
            sortedDic.Add("vmid", "");
            string aa = "{\"api\":\"65\",\"langtype\":\"1\",\"method\":\"Members.phoneContinuous\",\"mid\":\"6952837\",\"mtkey\":\"321ba46f8c765de454c1b819a657e77a\",\"param\":{\"test\":\"0\"},\"protocol\":\"1\",\"sid\":\"93\",\"sig\":\"43544efc717d99075612d72b844f427f\",\"time\":\"1400757961\",\"unid\":\"196\",\"version\":\"3.8\",\"vkey\":\"dfcb187a0a02795c739477cbd77e6520\",\"vmid\":\"6952837\"}";
            Dic = JsonToDictionary(aa);
            string sig = SnsSigCheck.MakeSig("POST", textBox2.Text, sortedDic, "5158fd7156240bb70d02fd94&");
            sortedDic.Add("sig", sig);
            string bb = (string)sortedDic["api"];
            MessageBox.Show(sig);

        }
       
    }
}

实例下载地址

QQ模拟登陆 源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 ieeliuhuazai 发表于: 2015-09-14 22:20 03
这网站太歪了

支持(0) 盖楼(回复)

第 2 楼 银狐网络 发表于: 2017-01-02 16:10 51
更不无法下载,请不要充值。

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有2条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警