迅雷协议分析的源代码
来源:互联网 发布:win7开机网络转圈假死 编辑:程序博客网 时间:2024/05/17 07:42
#include <iostream>
#include <winsock2.h>
#include "aes.h"
#pragma comment(lib, "Ws2_32.lib")
bool MakePackage(const char *address, const char *id, unsigned char *package)
{
size_t len = strlen(address);
if (len > 0x3C)
{
return false;
}
memset(package, 0, 0x7C);
unsigned char *p = package;
*p = 0x29;//固定的头
p += 4;
*p = 0x05;//命令标示
p += 4;
*p = 0x70;//长度
p += 4;
*p = 0x05;
p += 4;
memcpy(p, "QUERY", 6);
p += 6;
*p = len;//地址长度
p += 4;
memcpy(p, address, len);//地址
p += len;
*p = 0x10;
p += 4;
memcpy(p, id, 0x10);
p += 17;
*p = 0x14;
p += 4;
*p = 0x14;
p += 12;
unsigned char temp = package+0x7C - p;
for (; p!=package+0x7C; ++p)
{
*p = temp;
}
AES aes;
unsigned char key[16] = { 0x4C, 0xBA, 0xCF, 0xF2, 0xD4, 0x5F, 0x8F, 0x28, 0xBE,
0xD4, 0xDD, 0x26, 0x08, 0x36, 0x0E, 0xE1 };
const unsigned char *plainText;
for (int i=0xC; i<0x7C; i+=16)
{
p = (unsigned char*)package + i;
plainText = aes.Cipher(p, key, 16);
memcpy(p, plainText, 16);
}
return true;
}
unsigned char *MemSearch(const unsigned char *mem, const int memSize, const
unsigned char *patt, const int pattSize)
{
if (memSize <= 0 || pattSize <= 0)
{
return 0;
}
int i;
int td[256];
for (int c=0; c<256; ++c)
{
td[c] = pattSize + 1;
}
const unsigned char *p;
for (p=patt, i=0; i<pattSize; ++p, ++i)
{
td[*p] = pattSize - (p - patt);
}
const unsigned char *t, *tx = mem;
while (tx + pattSize <= mem + memSize)
{
for (p=patt, t=tx, i=0; i<pattSize; ++p, ++t, ++i)
{
if (*p != *t)
{
break;
}
}
if (i == pattSize)
{
return (unsigned char*)tx;
}
tx += td[tx[pattSize]];
}
return 0;
}
bool main()
{
cout << "please input full address:" << endl;
char address[0x5c];
cin >> address;
cout << endl;
unsigned char package[0x7C];
if(!MakePackage(address, "0004618F9B760000", package))
{
return;
}
AES aes;
unsigned char key[16] = { 0x4C, 0xBA, 0xCF, 0xF2, 0xD4, 0x5F, 0x8F, 0x28, 0xBE,
0xD4, 0xDD, 0x26, 0x08, 0x36, 0x0E, 0xE1 };
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
{
printf("Error at WSAStartup()/n");
return false;
}
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld/n", WSAGetLastError());
WSACleanup();
return false;
}
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "210.22.14.6" );
clientService.sin_port = htons( 3076 );
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService)
) == SOCKET_ERROR)
{
printf( "Failed to connect./n" );
WSACleanup();
return false;
}
int bytesSent;
int bytesRecv = 0;
char recvbuf[0xB00] = "";
bytesSent = send( ConnectSocket, (const char*)package, 124, 0 );
bytesRecv = recv( ConnectSocket, recvbuf, 0xB00, 0 );
if (bytesRecv == 0)
{
return false;
}
const unsigned char *plainText;
unsigned char *p;
size_t *pSize = (size_t*)(recvbuf+8);
for (size_t i=0; i<*pSize; i+=16)
{
p = (unsigned char*)recvbuf + i + 12;
plainText = aes.InvCipher(p, key, 16);
memcpy(p, plainText, 16);
}
const unsigned char *string = (const unsigned char*)(recvbuf+12);
while(1)
{
string = MemSearch(string+1, p-string+1, (const unsigned char*)"http://", 7);
if (string == 0)
{
break;
}
cout << string << endl;
}
string = (const unsigned char*)(recvbuf+12);
while(1)
{
string = MemSearch(string+1, p-string+1, (const unsigned char*)"ftp://", 6);
if (string == 0)
{
break;
}
cout << string << endl;
}
system("pause");
return true;
}
发送一个地址服务器关于此地址的相关资源的代码
#include <winsock2.h>
#include "aes.h"
#pragma comment(lib, "Ws2_32.lib")
bool MakePackage(const char *address, const char *id, unsigned char *package)
{
size_t len = strlen(address);
if (len > 0x3C)
{
return false;
}
memset(package, 0, 0x7C);
unsigned char *p = package;
*p = 0x29;//固定的头
p += 4;
*p = 0x05;//命令标示
p += 4;
*p = 0x70;//长度
p += 4;
*p = 0x05;
p += 4;
memcpy(p, "QUERY", 6);
p += 6;
*p = len;//地址长度
p += 4;
memcpy(p, address, len);//地址
p += len;
*p = 0x10;
p += 4;
memcpy(p, id, 0x10);
p += 17;
*p = 0x14;
p += 4;
*p = 0x14;
p += 12;
unsigned char temp = package+0x7C - p;
for (; p!=package+0x7C; ++p)
{
*p = temp;
}
AES aes;
unsigned char key[16] = { 0x4C, 0xBA, 0xCF, 0xF2, 0xD4, 0x5F, 0x8F, 0x28, 0xBE,
0xD4, 0xDD, 0x26, 0x08, 0x36, 0x0E, 0xE1 };
const unsigned char *plainText;
for (int i=0xC; i<0x7C; i+=16)
{
p = (unsigned char*)package + i;
plainText = aes.Cipher(p, key, 16);
memcpy(p, plainText, 16);
}
return true;
}
unsigned char *MemSearch(const unsigned char *mem, const int memSize, const
unsigned char *patt, const int pattSize)
{
if (memSize <= 0 || pattSize <= 0)
{
return 0;
}
int i;
int td[256];
for (int c=0; c<256; ++c)
{
td[c] = pattSize + 1;
}
const unsigned char *p;
for (p=patt, i=0; i<pattSize; ++p, ++i)
{
td[*p] = pattSize - (p - patt);
}
const unsigned char *t, *tx = mem;
while (tx + pattSize <= mem + memSize)
{
for (p=patt, t=tx, i=0; i<pattSize; ++p, ++t, ++i)
{
if (*p != *t)
{
break;
}
}
if (i == pattSize)
{
return (unsigned char*)tx;
}
tx += td[tx[pattSize]];
}
return 0;
}
bool main()
{
cout << "please input full address:" << endl;
char address[0x5c];
cin >> address;
cout << endl;
unsigned char package[0x7C];
if(!MakePackage(address, "0004618F9B760000", package))
{
return;
}
AES aes;
unsigned char key[16] = { 0x4C, 0xBA, 0xCF, 0xF2, 0xD4, 0x5F, 0x8F, 0x28, 0xBE,
0xD4, 0xDD, 0x26, 0x08, 0x36, 0x0E, 0xE1 };
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
{
printf("Error at WSAStartup()/n");
return false;
}
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld/n", WSAGetLastError());
WSACleanup();
return false;
}
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "210.22.14.6" );
clientService.sin_port = htons( 3076 );
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService)
) == SOCKET_ERROR)
{
printf( "Failed to connect./n" );
WSACleanup();
return false;
}
int bytesSent;
int bytesRecv = 0;
char recvbuf[0xB00] = "";
bytesSent = send( ConnectSocket, (const char*)package, 124, 0 );
bytesRecv = recv( ConnectSocket, recvbuf, 0xB00, 0 );
if (bytesRecv == 0)
{
return false;
}
const unsigned char *plainText;
unsigned char *p;
size_t *pSize = (size_t*)(recvbuf+8);
for (size_t i=0; i<*pSize; i+=16)
{
p = (unsigned char*)recvbuf + i + 12;
plainText = aes.InvCipher(p, key, 16);
memcpy(p, plainText, 16);
}
const unsigned char *string = (const unsigned char*)(recvbuf+12);
while(1)
{
string = MemSearch(string+1, p-string+1, (const unsigned char*)"http://", 7);
if (string == 0)
{
break;
}
cout << string << endl;
}
string = (const unsigned char*)(recvbuf+12);
while(1)
{
string = MemSearch(string+1, p-string+1, (const unsigned char*)"ftp://", 6);
if (string == 0)
{
break;
}
cout << string << endl;
}
system("pause");
return true;
}
发送一个地址服务器关于此地址的相关资源的代码
- 迅雷协议分析的源代码
- 迅雷协议分析
- 迅雷协议分析
- 迅雷协议分析
- 迅雷协议分析
- 迅雷协议分析
- Java 服务器端支持断点续传的源代码【支持快车、迅雷】(仅支持 HTTP 协议)
- 训雷协议分析的源代码
- 迅雷下载原理及其协议分析
- aodv协议源代码分析
- aodv协议源代码分析
- aodv协议源代码分析
- 老兄xee的大作--迅雷协议分析--多链接资源获取
- 迅雷协议分析–多链接资源获取
- BT源代码学习心得(十三):客户端源代码分析(对等客户的连接建立及其握手协议)
- VB获得迅雷资讯弹出网页的源代码
- Java 服务器端支持断点续传的源代码【支持快车、迅雷】
- Java 服务器端支持断点续传的源代码【支持快车、迅雷】
- 杂乱的oracle笔记
- [概念] 风险识别工具 - 影响图(Influence Diagram)
- UDT协议-基于UDP的可靠数据传输协议
- 智能GRIDVIEW
- 保护眼睛的好方法(转载)
- 迅雷协议分析的源代码
- BO Crystal Xcelsius 画面超炫 同时具有互动性
- 使用java处理XML
- 入侵检测系统+主动防火墙(Snort+Guardian)
- Linux入侵监测系统IDS
- 黑防网上未公开的编程,脚本特训教程
- 下载和转换Youtube视频的方法
- 不错的我常去的地址
- TCP穿透NAT技术