游戏安全实验室 首页 游戏漏洞 查看内容

【游戏漏洞】内存构造发包结构体实现协议发送

发布于: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)

分享到:
踩0 赞0

收藏

上一篇:【游戏漏洞】RPG类型游戏技能库分析

下一篇:【游戏漏洞】绕过PG 实现进程保护

最新评论
B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部