捕捉到游戏的封包以后
我们可以对其进行发送来实现功能
基本有两种方式
第一种直接调用明文发包函数
第二种构造明文封包以后,再调用加密算法,然后通过send等发包函数对其进行发送
如果能够把加密算法分析透彻的话,第二种方式是最好的
当然第一种方式比较简单省力,如果不考虑检测的可能,俩种是没有任何区别的
typedef struct T明文包结构体
{
DWORD flag1;
DWORD flag2;
DWORD flag3;
DWORD 包开始指针;
DWORD 包结束指针1;
DWORD 包结束指针2;
}_T明文包结构体;
按照之前游戏中分析的结构体情况
我们构造出这样的函数
void Call_明文发包(DWORD flag1,DWORD flag2,DWORD flag3,char* 包地址,DWORD 包长)
{
__try
{
T明文包结构体 A;
A.flag1=flag1;
A.flag2=flag2;
A.flag3=flag3;
A.包开始指针=(DWORD)包地址;
A.包结束指针1=(DWORD)包地址+包长;
A.包结束指针2=(DWORD)包地址+包长;
T明文包结构体* B=&A;
Call_输出调试信息(“QQ西游 %X\r\n”,B);
__asm
{
pushad
push B
mov esi,Base_怪物
mov esi,[esi]
add esi,0x13D4
mov ecx,esi
mov eax,CallAddr_明文包
call eax
popad
}
}
__except (1)
{
Call_输出调试信息(“QQ西游 明文发包CALL异常\r\n”);
}
}
然后我们可以用HOOK明文包抓到的任意封包进行测试
void 封包_喊话测试()
{
DWORD 包长=0x9;
//DE 01 05 00 32 32 32 32 32
unsigned char a[0x9]={0xDE,0x01,0x05,0x00,0x32,0x32,0x32,0x32,0x32};
Call_明文发包(0x007D4B3C,0x00809400,0,(char*)&a,0x9);
}
当然这只是最简单的封包
封包总有各种变量,需要我们去细致分析构造
然后再进行发送