发布于:2018-7-3 14:43 | 128716次阅读 作者: 外部投稿 | 原作者: 通化程序员
捕捉到游戏的封包以后 我们可以对其进行发送来实现功能 基本有两种方式 第一种直接调用明文发包函数 第二种构造明文封包以后,再调用加密算法,然后通过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);
}
当然这只是最简单的封包 封包总有各种变量,需要我们去细致分析构造 然后再进行发送
来源:通化程序员-公众号投稿 GSLAB网站投稿文章仅代表作者本人的观点,与本网站立场无关。 *转载请注明来自游戏安全实验室(GSLAB.QQ.COM) |
最新评论
发表评论