首页
社区
课程
招聘
[原创]QQ号申请工具 编写原理
发表于: 2011-8-29 13:46 78016

[原创]QQ号申请工具 编写原理

2011-8-29 13:46
78016

大家都知道现在有很多申请QQ号的软件,只要填写软件上的验证码,就可以帮你自动申请一个QQ,并保存下来。 它简化了 注册的流程。


通常这类软件有两种,一个编程时用了IE的控件,直接向这些表单填写数据,另一种就是今天要讲的,用封包的方法来实现自动申请QQ。

想一下,我们面临的难题有:
1.验证码的gif图片在哪,如何让程序获取图片,并显示出来。
2.http请求中包的分析和构建。
当然第二个是重点。

先完成第一项任务。
我们打开 c51K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0 ,会有这个http请求

用文字就是:
GET: bb5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4S2M7s2c8U0K9r3q4Q4x3X3g2I4M7g2)9J5k6h3y4G2L8g2)9J5c8X3N6W2N6r3W2E0j5h3N6W2i4K6y4r3j5h3W2V1i4K6y4p5x3e0l9H3y4K6V1H3x3g2)9J5y4U0m8Q4x3X3f1K6y4U0t1I4x3o6t1J5x3o6R3J5x3e0j5H3z5e0M7^5
Accept: */*
Referer: fbeK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3
Accept-Language: zh-CN
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; ccaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0K6j5h3I4K6j5g2)9J5k6h3y4G2L8g2)9J5z5b7`.`. ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C)
Host: captcha.qq.com
Connection: Keep-Alive
---------------------------------------------
043K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4S2M7s2c8U0K9r3q4Q4x3X3g2I4M7g2)9J5k6h3y4G2L8g2)9J5c8X3N6W2N6r3W2E0j5h3N6W2i4K6y4r3j5h3W2V1i4K6y4p5x3e0l9H3y4K6V1H3x3g2)9J5y4U0m8Q4x3X3f1K6y4U0t1I4x3o6t1J5x3o6R3J5x3e0j5H3z5e0M7^5
看这个url,有两个数据,是否是定值呢。
再重新登陆 reg.qq.com,会发现 aid=后面的数字没有变,但第二个数据变化了。
这个很容易理解,因为每次登陆会有不同的验证码嘛。

但第一个数据,仔细看看之前发的包,就会知道 1007901,是GetDay产生的,过一天可能就加1了。呵呵!但今天无论怎么换验证码,都不会改变的。

OK。 gif图片已经获取。

char	szAccept[]	 = "Accept: */gif";
    char	szReferer[]	 = "Referer:  1cfK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3i4K6g2o6M7W2)9#2b7$3&6Q4y4f1y4J5i4K6g2o6L8R3`.`.";
	CString strBuffer	 = _T("");
	CString	strRecv		 = _T("");

	HINTERNET	hSession;   
	HINTERNET   hConnect;   
	HINTERNET   hRequest;   
	BOOL		bReturn	 = FALSE;
	CString str=_T("/getimage?aid=1007901&0.0022421072022002497");
	// 之前使用Socket,现在使用Wininet相关API建立链接
	hSession = InternetOpen("InetAll",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
	hConnect = InternetConnect(hSession,"captcha.qq.com",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,1);
	hRequest = HttpOpenRequest(hConnect,"GET",str,NULL,"f10K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3",(PCSTR*)szAccept,INTERNET_FLAG_RELOAD,1);

	// 提交数据表单
	
	bReturn = HttpSendRequest(hRequest,NULL,-1,NULL,0);
	if(!bReturn)
	{
		MessageBox("发送Http请求失败!","提示",MB_ICONERROR | MB_OK);
		return FALSE;
	}

        //之后就是生成图片了。
	hFile.Open("temp.dat",CFile::modeWrite | CFile::modeCreate,NULL);
		
         InternetReadFile(hRequest,szRecvBuf,1024,&dwNumberOfBytesRead);
 
		}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
  • 1.gif (15.48kb,3750次下载)
  • 2.gif (18.70kb,3743次下载)
收藏
免费 6
支持
分享
最新回复 (80)
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
为工程加一个IPicture *pPic 变量。
直接调用OleLoadPicture函数从流中装载图像:

OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic));

  由于该函数有时会导致失败,所以应当用SUCCEEDED宏来做一些适当的保护工作,只有在数据装载成功的前提下才能继续下面的图像显示工作:
int CQQ号申请工具Dlg::DrawPic(int x, int y, CDC* pDC)
{
	if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
	{
		OLE_XSIZE_HIMETRIC hmWidth;
		OLE_YSIZE_HIMETRIC hmHeight;
		 pPic->get_Width(&hmWidth);
		 pPic->get_Height(&hmHeight);
		double fX,fY;
		fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
		fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
		if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) {
			AfxMessageBox(_T("渲染图像失败!"));
			pPic->Release();
	}
		
	} 
	return 0;
}


OK。测试下没有问题。第一步已经完全完成。

2.现在开始进入http协议的处理。
这里有一个非常 重要的http请求。。。之后的加密就靠它了。。

GET:  d50K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3j5$3S2W2j5$3E0U0L8$3&6F1i4K6y4r3M7$3g2W2k6o6m8Q4x3X3f1&6y4K6M7H3y4K6l9I4x3e0R3$3x3K6p5J5x3e0p5J5

Accept: */*
Accept-Language: zh-cn
Referer: 6a2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; d29K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0K6j5h3I4K6j5g2)9J5k6h3y4G2L8g2)9J5z5b7`.`. ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C)
Host: reg.qq.com
Connection: Keep-Alive

seed这个单词一看就知道是随机数。这个http请求,每次它会更新两个数组。
包含13个值。 对应于网页上的所有内容。
如密码,年,月,日,验证码 等等。

我们看下这个http请求的返回内容。
g_dataArray=new Array(new Array("77201a3173562c7715387d451b6a","44440b376f4f2c4b52216a561e54","62391830754f3d775e185d653b4a","13750a2a65523d6c482238520e71","7f79093a50403a7650237a572d50","14750a2a65523d6c4822395a0679","7137083a784f6c75563e7b471964","56211a3173562c771620655d0362","44750b2d6f57206b442951695d20","77771a3865442f624f256258007f","7121083a784f2675563e7b471964","1d791a3173562c7717286d550b7a","7775183e7245076a6e06437f215c"),
new Array(9759,9745,9748,9758,9752,9747,9755,9744,9754,9750,9749,9751,9753),"/cgi-bin/getnum");

这里可能看不明白。
我将这些数据逆序,并整理下
"7775183e7245076a6e06437f215c"
"1d791a3173562c7717286d550b7a",
"7121083a784f2675563e7b471964",
"77771a3865442f624f256258007f",
"44750b2d6f57206b442951695d20",
"56211a3173562c771620655d0362",
"7137083a784f6c75563e7b471964",
"14750a2a65523d6c4822395a0679",
"7f79093a50403a7650237a572d50",
"13750a2a65523d6c482238520e71",
"62391830754f3d775e185d653b4a",
"44440b376f4f2c4b52216a561e54",
"77201a3173562c7715387d451b6a",

看看我们在网页上申请后,所提交的http请求。

上传的附件:
  • 4.gif (9.48kb,3704次下载)
  • 5.gif (24.35kb,3711次下载)
2011-8-29 13:47
0
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
数据太长,我列出来。

POST : 774K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3j5$3N6A6i4K6u0V1j5X3W2F1i4K6u0r3k6$3g2@1L8Y4g2E0

Accept: */*
Content-Type: application/x-www-form-urlencoded
Referer: a37K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2k6#2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3i4K6t1K6
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; 219K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0K6j5h3I4K6j5g2)9J5k6h3y4G2L8g2)9J5z5b7`.`. ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C)
Host: reg.qq.com
Content-Length: 462
Connection: Keep-Alive

提交的数据:
7775183e7245076a6e06437f215c=ddsoft&1d791a3173562c7717286d550b7a=42&7121083a784f2675563e7b471964=pediytest&77771a3865442f624f256258007f=0&44750b2d6f57206b442951695d20=6&56211a3173562c771620655d0362=nfxnys&7137083a784f6c75563e7b471964=23&14750a2a65523d6c4822395a0679=1&7f79093a50403a7650237a572d50=1&13750a2a65523d6c482238520e71=1&62391830754f3d775e185d653b4a=2&44440b376f4f2c4b52216a561e54=pediytest&77201a3173562c7715387d451b6a=2009&qzone_flag=1&alskdjf=fjdksla
列成表格形式一目了然。


主要是发包时加密字串是固定顺序,但表单中的value 顺序与 产生的第二个数组有关。
因为第二个数据全部为数字,猜测与数字大小有关。我这里没有继续研究,有兴趣的朋友发表下你的成果。
最后,感谢你的支持!

不知能不能骗个精华。呵呵!
上传的附件:
  • 6.gif (11.58kb,3708次下载)
2011-8-29 14:12
0
雪    币: 166
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好东西!学习下!好像是沙发呢!
2011-8-29 14:38
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好什么呢?没有实质的东西啊。你发一个啊
2011-8-29 14:42
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
很有营养的文章,不过估计不合版主口味就木有精华啦
2011-8-29 14:44
0
雪    币: 414
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
比用IE控件直接填写表单有技术含量;

非常不错;
2011-8-29 14:49
0
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
8
thanks for share
2011-8-29 14:53
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
9
thanks 精华应该没有问题吧
2011-8-29 14:57
0
雪    币: 1694
活跃值: (857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不错不错,支持楼主
2011-8-29 14:58
0
雪    币: 303
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习了.支持LZ
2011-8-29 15:05
0
雪    币: 23
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
真滴很不错饿饿
2011-8-29 15:08
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
从对网络协协议的理解到编程都是真才实学
2011-8-29 16:14
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
14
膜拜一下医学界的大牛!
2011-8-29 17:13
0
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
吓我一跳
我已经直接验证了图片啊
这个 你用vb自带的那个web控件 记录一下值貌似就可以了
2011-8-29 17:27
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
16
不错,学习一下了
2011-8-29 19:27
0
雪    币: 2528
活跃值: (2470)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
17
学习了~~
2011-8-30 18:50
0
雪    币: 688
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
顶啊..............................
2011-8-30 22:38
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
呵呵 还行   。
2011-8-31 09:00
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
很不错的文章,谢谢分享哈
2011-8-31 09:01
0
雪    币: 212
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
果断留下~
2011-8-31 10:22
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
顶个....................
2011-8-31 10:22
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
用c#效率会更高些
2011-8-31 10:57
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
楼主很强悍,写的超详细
2011-8-31 12:28
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
腾讯对表单进行了乱序处理。

QQ靓号申请器v1.2.0.0【源码】
405K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3M7Y4u0J5k6X3k6X3i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5$3y4U0R3J5z5e0l9J5
2011-8-31 12:52
0
游客
登录 | 注册 方可回帖
返回