c#实现QQ群成员列表导出及邮件群发之模拟QQ登陆

前言

本文的重要部分:

1、抓包获取QQ空间或者邮箱登陆地址,分析参数,用户名,密码,验证码,gtk,随即数。

2、获取每次登陆需要的验证码

3、用户名,密码,验证码加密得到登陆密码

4、Http模拟登陆拿cookie

本文实验的思路也可换另一种方式,抓包获取登陆的js,用代码操作js来计算密码 ,gtk等实现登陆。

抓包

1、我们来访问qq空间的地址http://i.qq.com/,打开网站,我们可以看到登陆的对话框,首先我们输入一个错误的账号和密码,抓起提交的地址。

2、输入用户名和密码之后我们用抓包工具看到有2个后台请求的地址,如下图

我们可以根据返回的代码可以看出第二个图的地址是QQ登陆后台get请求的地址,所以我们实现登陆就是像这个地址提交数据。第一张图则是空间登陆每次返回的验证码产生的地址,通过多次输入正确用户名密码,第一张图地址返回类似ptui_checkVC('0','!JWE','\x00\x00\x00\x00\x46\x86\xd2\x36');代码,其中括号内参数与登陆请求地址中verifycode=!JWE每次相同,这个便是登陆的验证码,登陆地址则返回类似ptuiCB('0','0','http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone','0','登录成功!', 'xxx');返回此代码则说明登陆成功。

通过抓包我们提取出来的2个地址:

1、验证码获取地址(输入用户名时返回):

http://check.ptlogin2.qq.com/check?regmaster=&uin={0}&appid=549000912&js_ver=10038&js_type=1&login_sig=46Flu6g0o2A1hcewVAPUpItgSNJncoqujR4vudgX8ZRnruuCSOzMGcbd3CnQhw0y&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&r={1}

参数0:QQ账号,参数1:随即数

说明:一般情况下是不会产生手动输入验证码的情况下,若是QQ号码不存在或者错误,此时会出现图片验证码,我们可以用一个处理一下显示在imge中手动输入。

2、登陆提交地址:

http://ptlogin2.qq.com/login?u={0}&p={1}&verifycode={2}&aid=549000912&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&h=1&ptredirect=0&ptlang=2052&from_ui=1&dumy=&low_login_enable=0&regmaster=&fp=loginerroralert&action=11-52-1375668422981&mibao_css=&t=1&g=1&js_ver=10038&js_type=1&login_sig=46Flu6g0o2A1hcewVAPUpItgSNJncoqujR4vudgX8ZRnruuCSOzMGcbd3CnQhw0y

参数0:QQ号码,参数1:加密以后的密码,参数2:返回的验证码

本人文字功底实在太差,说不太清楚,抓包需要我多次试验,多次分析,才可取得正确的地址。登陆的最重要目的是获取请求页面的cookie。

代码部分

1、http请求帮助代码

 1     public class HttpHelper
 2     {
 3         /// <summary>
 4         /// 获取字符流
 5         /// </summary>
 6         /// <param name="url"></param>
 7         /// <param name="cookieContainer"></param>
 8         /// <returns></returns>
 9         public static Stream GetStream(string url, CookieContainer cookieContainer)
10         {
11             HttpWebRequest httpWebRequest = null;
12             HttpWebResponse httpWebResponse = null;
13 
14             try
15             {
16                 httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
17                 httpWebRequest.CookieContainer = cookieContainer;
18                 httpWebRequest.ContentType = contentType;
19                 httpWebRequest.Referer = referer;
20                 httpWebRequest.Accept = accept;
21                 httpWebRequest.UserAgent = userAgent;
22                 httpWebRequest.Method = "GET";
23                 httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;
24 
25                 httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
26                 Stream responseStream = httpWebResponse.GetResponseStream();
27 
28                 return responseStream;
29             }
30             catch (Exception)
31             {
32                 return null;
33             }
34 
35         }
36 
37         /// <summary>
38         /// 获取HTML
39         /// </summary>
40         /// <param name="url"></param>
41         /// <param name="cookieContainer"></param>
42         /// <returns></returns>
43         public static string GetHtml(string url, CookieContainer cookieContainer)
44         {
45             Thread.Sleep(1000);
46             HttpWebRequest httpWebRequest = null;
47             HttpWebResponse httpWebResponse = null;
48             try
49             {
50                 httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
51                 httpWebRequest.CookieContainer = cookieContainer;
52                 httpWebRequest.ContentType = contentType;
53                 httpWebRequest.Referer = referer;
54                 httpWebRequest.Accept = accept;
55                 httpWebRequest.UserAgent = userAgent;
56                 httpWebRequest.Method = "GET";
57                 httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;
58 
59                 httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
60                 Stream responseStream = httpWebResponse.GetResponseStream();
61                 StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
62                 string html = streamReader.ReadToEnd();
63 
64                 streamReader.Close();
65                 responseStream.Close();
66 
67                 httpWebRequest.Abort();
68                 httpWebResponse.Close();
69 
70                 return html;
71             }
72             catch (Exception)
73             {
74                 return string.Empty;
75             }
76 
77         }
78     }
View Code

2、获取验证码

    //取验证码public static string GetVerfiyCode(string qqnum,CookieContainer cookie){Random rand = new Random();double r = rand.NextDouble();string checkcodeurl = string.Format(@"http://check.ptlogin2.qq.com/check?uin={0}&appid=1006102&r={1}", qqnum, r);Stream stream = HttpHelper.GetStream(checkcodeurl, cookie);StreamReader streamReader = new StreamReader(stream, Encoding.UTF8);return streamReader.ReadToEnd();}//取图片验证码,可将验证码直接输出在image中public static Stream GetVerfycodeImage(CookieContainer cookie, string qqnum){Random rand = new Random();double r = rand.NextDouble();string codeimageurl = string.Format("http://captcha.qq.com/getimage?aid=1006102&r={0}&uin={1}", r, qqnum);return HttpHelper.GetStream(codeimageurl, cookie);}    

通过GetVerfiyCode()的返回 值判断,是否需要手动输入验证码

//得验证吗if (retString.Contains("ptui_checkVC('0','")){
         //不需要手动输入
this.txtverfiycode.Text = retString.Replace("ptui_checkVC('0','", "").Replace("'", "").Replace(")", "").Replace(";", "").Substring(0, 4);}else if (retString.Contains("ptui_checkVC('1',")){
        //需要手动输入,将验证码输出在image中
this.vefycodpicbox.Image = Image.FromStream(GetVerfycodeImage(retString, this.txtUseraccount.Text));}

3、计算密码,密码的计算方法可以通过js计算,或者直接使用如下c#版的,总的来说腾讯的密码加密比较麻烦,需要QQ号码,密码,验证码三个参数,有兴趣的可自己研究下。

代码如下:

 1 public static class PasswordHelper
 2     {
 3         /// <summary>
 4         /// 根据QQ号码和验证码加密密码
 5         /// </summary>
 6         /// <param name="qqNum">QQ号码</param>
 7         /// <param name="password">QQ密码</param>
 8         /// <param name="verifycode">验证码</param>
 9         /// <returns>密码密文</returns>
10         public static string GetPassword(string qqNum, string password, string verifycode)
11         {
12             //uin为QQ号码转换为16位的16进制
13             int qq;
14             int.TryParse(qqNum, out qq);
15 
16             qqNum = qq.ToString("x");
17             qqNum = qqNum.PadLeft(16, '0');
18 
19             String P = hexchar2bin(md5(password));
20             String U = md5(P + hexchar2bin(qqNum)).ToUpper();
21             String V = md5(U + verifycode.ToUpper()).ToUpper();
22             return V;
23         }
24 
25         public static string md5(string input)
26         {
27             byte[] buffer = MD5.Create().ComputeHash(Encoding.GetEncoding("ISO-8859-1").GetBytes(input));
28             return binl2hex(buffer);
29         }
30 
31         public static string binl2hex(byte[] buffer)
32         {
33             StringBuilder builder = new StringBuilder();
34             for (int i = 0; i < buffer.Length; i++)
35             {
36                 builder.Append(buffer[i].ToString("x2"));
37             }
38             return builder.ToString();
39         }
40 
41         public static string hexchar2bin(string passWord)
42         {
43             StringBuilder builder = new StringBuilder();
44             for (int i = 0; i < passWord.Length; i = i + 2)
45             {
46                 builder.Append(Convert.ToChar(Convert.ToInt32(passWord.Substring(i, 2), 16)));
47             }
48             return builder.ToString();
49         }
50     }
View Code

到此为止,登陆需要的参数已经全了,下面就是实现登陆拿cookie。

4、登陆的方法与获取验证码一样

//登录方法public static bool IsLogin(string qqnum,string code,string passwords,CookieContainer cookie){string password = PasswordHelper.GetPassword(qqnum, passwords, code);string loginUrlstring = @"http://ptlogin2.qq.com/login?u=" + qqnum + "&p=" + password + "&verifycode=" + code + "&aid=1006102&u1=http%3A%2F%2Fid.qq.com%2Findex.html&h=1&ptredirect=1&ptlang=2052&from_ui=1&dumy=&fp=loginerroralert&action=8-29-82478035&mibao_css=&t=1&g=1";Stream stream = HttpHelper.GetStream(loginUrlstring, cookie);StreamReader streamReader = new StreamReader(stream, Encoding.UTF8);string retString = streamReader.ReadToEnd();//        retString    "ptuiCB('0','0','http://id.qq.com/index.html','1','登录成功!', 'xxx');\r\n"    stringreturn retString.Contains("ptuiCB('0',") ? true : false;}

我们可以直接调用此方法验证是否登陆成功,同时将cookie保存在一个全局变量中供以后使用。

到此为止,QQ用http模拟登陆已经成功,完成了获取群列表的第一步。下面一篇就到获取群列表,群成员。

 

临时写的代码,时间仓促,比较杂乱,有什么出错的地方欢迎指出。若资料有用,帮忙顶一下。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37769.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速导出qq群所有qq号码

打开http://qun.qq.com/member.html 登录自己的qq 登录以后的页面 选择要导出的qq群 然后按F12(打开开发者模式) 将下面的代码复制到控制台后敲回车执行即可。 function savefiles(data, name) {var urlObject = window.URL || window.webkitURL || window;var export_b…

​GPT-3好“搭档”:这种方法缓解模型退化,让输出更自然

文本生成对于许多自然语言处理应用来说都是非常重要的。 但神经语言模型的基于最大化的解码方法&#xff08;如 beam search&#xff09;往往导致退化解&#xff0c;即生成的文本是不自然的&#xff0c;并且常常包含不必要的重复。现有的方法通过采样或修改训练目标来引入随机…

技术创新,让企业拥有智能“伯乐”,实现精准识人

过去&#xff0c;“得人才者得天下&#xff0c;世有伯乐&#xff0c;然后有千里马。” 这些都是我们耳熟能详古人对于人才渴求的描写。能否及时发现人才、培养人才、发挥人才作用的关键&#xff0c;都是历代管理者或经营者关注的问题。自古发现人才并没有那么容易&#xff0c;过…

LLM in Medical Domain: 一文速览大语言模型在医学领域的应用

© 作者&#xff5c;杨锦霞 机构&#xff5c;中国人民大学 研究方向&#xff5c;多模态学习 来自&#xff1a;RUC AI Box 进NLP群—>加入NLP交流群 引言&#xff1a;近期&#xff0c;大型语言模型在各种任务上展现出优异的性能&#xff0c;展示了广阔的应用前景。然而&a…

【NLP】首个支持联网的中文 AI 问答模型,开源了!

2021 年 12 月&#xff0c;OpenAI 正式推出 WebGPT&#xff0c;该项目的横空出世&#xff0c;标志着基于网页搜索的问答新范式的诞生。 在此之后&#xff0c;New Bing 首先将网页搜索功能整合发布&#xff0c;随后 OpenAI 也发布了支持联网的插件 ChatGPT Plugins。 大模型在联…

清华ACL2023 | WebCPM:首个联网支持中文问答开源模型

来自&#xff1a;PaperWeekly 进NLP群—>加入NLP交流群 2021年12月 WebGPT 的横空出世标志了基于网页搜索的问答新范式的诞生&#xff0c;在此之后&#xff0c;New Bing 首先将网页搜索功能整合发布&#xff0c;随后 OpenAI 也发布了支持联网的插件 ChatGPT Plugins。大模型…

刚刚!马斯克开源Twitter算法,GitHub Star数已破万!

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年2月份热门报告合集 ChatGPT种子用户招募&#xff08;无限制次数直接使用&#xff09; ChatGPT调研报告&#xff08;仅供内部参考&#xff09; 文心一言、GPT3.5及GPT4…

招募:AICG内容联合创作计划 | AIGC实践

AIGC&#xff08;AI Generated Content&#xff0c;人工智能自动生成内容&#xff09;必将成为小微创业团队进行低成本内容运营的最佳实践。 你同意这个观点吗&#xff1f; 如果我们恰好想法一致&#xff0c;或许可以一起搞点事情&#xff0c;探索一下商业场景下&#xff0c;应…

【原创】实现ChatGPT中Transformer模型之输入处理

作者&#xff1a;黑夜路人 时间&#xff1a;2023年7月 Inputs Process&#xff08;输入处理层&#xff09;实现 我们看整个绿色框的整个位置&#xff0c;就是Inputs Process&#xff08;输入处理层&#xff09;。 在输入处理层&#xff0c;其实非常容易理解&#xff0c;主要就…

Visual Studio Community 2022 + Win10 编译 OpenCPN 5.9.0 记录

前言 前两天尝试用vs2017编译OpenCPN5.0.0&#xff0c;前后折腾了两三天总算编译成功了。官网给出的编译过程比较简单&#xff0c;我在实际编译过程中遇上了很多很多的问题&#xff0c;最多的就是缺少库&#xff0c;好在最后编译通过了。 后来浏览OpenCPN官网的时候发现发布了…

jmeter简单使用以及报告生成

jmeter入门 前置准备jmeter目录介绍jmeter常用组件jmeter简单食用 第一次写文章&#xff0c;主要就是一些简单的自学笔记&#xff0c;记录一下自己以后能方便看&#xff0c;大家需要的话也可自行取用&#xff0c;这些年干下来&#xff0c;我发现内容不重要&#xff0c;重要的是…

学会 IDEA 中的这个功能,就可以丢掉 Postman 了

点击关注公众号&#xff0c;Java干货及时送达&#x1f447; 转自&#xff1a;oschina 作者&#xff1a;凯京技术团队 my.oschina.net/keking 前言 接口调试是每个软件开发从业者必不可少的一项技能&#xff0c;一个项目的的完成&#xff0c;可能接口测试调试的时间比真正开发写…

分享:python+Windows自带任务计划程序,实现定时自动删微信的video文件夹

目录 0. 背景1. 使用python实现删微信的video文件夹1.1 代码1.2 打包 2. 使用python实现自动添加任务计划程序2.1 代码2.2 打包 3. 使用bat脚本方便操作3.1 手动删.bat3.2 加入定时任务.bat 0. 背景 pc微信实在太占用磁盘空间了&#xff0c;特别是其中的视频文件夹。所以有了这…

搭建本地服务器+jshtml访问mysql并显示输出

文章目录 人生苦短&#xff0c;先问chatgpt1. 用Tomcat配置本地网站2. 访问本地网页3. js访问本地mysql并显示在html中 PS: Chatgpt实在是有点强~~ 今天是悲伤的一天&#xff0c;把mysql密码忘了&#xff0c;网上搜的方法没用&#xff0c;本来以为卸载部分组件就好&#xff0c;…

3句代码,实现自动备份与版本管理

前言&#xff1a; 服务器开发程序、测试版本等越来越多&#xff0c;需要及时做好数据的版本管理和备份&#xff0c;作为21世界的青年&#xff0c;希望这些事情都是可以自动完成&#xff0c;不止做了数据备份&#xff0c;更重要的是做好了版本管理&#xff0c;让我们可以追溯我们…

【编程实践】Linux Shell 编程:使用 循环和递归 实现斐波那契数列代码

用 Linux Shell 编程语言递归实现斐波那契数列代码:循环和递归 Linux Shell 编程语言是一种强大的工具,它可以轻松地实现程序设计语言中的常见算法。 斐波那契数列 斐波那契数列是一种经典的算法,它的定义如下: 斐波那契数列(Fibonacci Sequence)是以递归的方法来定义: …

chatgpt赋能python:Python下载与运行指南-让Python脚本更容易使用

Python下载与运行指南 - 让Python脚本更容易使用 Python已经成为世界上最流行的编程语言之一。Python具有简单易用的特点&#xff0c;几乎可以开始创建任何类型的应用程序或脚本。如果你是一名新手或是一名经验丰富的开发者&#xff0c;Python都是一款优秀的编程语言。 本篇文…

人教版初中英语听力软件,人教版初中英语听力mp3

新目标英语九年级上册Tapescripts所有的翻译 east东方的、eagerness热心、eagle鹰、ear耳朵&#xff0c;听力、early早等。 词汇解析一、east 英 [iːst]   美 [iːst]    adj. 东方的adv. 向东方n. 东方&#xff1b;东部1、east的基本意思是“东&#xff0c;东方”&…

英语语音题

语音题 a i i在nd和gh前发[ai] y th 词首[θ] the、ther结尾[] ch tion ow[哦][奥] oo ar ed 清读[t] 浊元读[d] t、d后读[id] 清&#xff1a;破客服吃屎&#xff0c;戳死赐死 ea o s ou e 欸 b ure 呃 优呃 屋呃 h gh ex 后有元[igz] 后有辅[iks] c al ai wh w在wr、…

ChatGPT: Optimizing Language Models for Dialogue

1.简介 最近ChatGPT很好&#xff0c;本文根据https://openai.com/blog/chatgpt/翻译总结的。 ChatGPT: Optimizing Language Models for Dialogue。如标题&#xff0c;ChatGPT为了对话使用的。 ChatGPT是InstructGPT的兄弟模型&#xff0c;它被训练为以提示prompt的方式遵循…