鑫郁飞

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 544|回复: 0

任鸟飞谈逆向----《魔兽世界》封包协议加密分析

[复制链接]

管理员

Rank: 9Rank: 9Rank: 9

阅读权限
200
积分
109503
精华
71
主题
156
帖子
176
分享
0
日志
0
在线时间
57 小时
最后登录
2018-7-19
注册时间
2016-11-22
听众
0
收听
0
发表于 2017-12-7 13:59:19 | 显示全部楼层 |阅读模式
魔兽世界作为暴雪的经典大作,被称作游戏历史上的一个里程碑,今天我们就以喊话封包为例,来分析一下这个游戏的封包内容。
首先来到send函数的头部,下断喊话,得到一个包长为0x15的包(如图)
这个包里很明显发现+0E的位置是喊话的内容123123,而通过改变喊话的方式发现+0A的位置是喊话的方式。而头部6个字节的变化并没有什么规律,很有可能是协议加密,我们返回外层来分析这个包头的来源。
返回到外一层,我们发现包地址的来源是005B5899 处的esi+8,而esi+8的喊话内容在005B5842处就已经被写入,只有前6个字节没有写入,在005B5842到005B5894这段代码是一个循环,每一次循环都会向包头写入一个字节(如图)
接下来分析下这个循环中用到的寄存器和局部变量,因为这里只是一段简单的汇编代码,并没有调用到其他函数,所以也无需考虑参数的问题。首先头部的esi+8自然是包的地址,我们可以直接申请缓冲区来代替,而ebx的地址也可以很轻易的追到来源,公式为[[0C28128]+1A58],ecx是一个计数器,传0即可,而后面的寄存器都会在代码执行过程中获得,005B5885处的[ebp+C]作为局部变量只需要申请一个DWORD变量。这样所有需要传入的数据都已经获得,直接内联汇编,调用这段循环代码,就可以取到下一个包的包头。
这是一个对封包的简单加密过程,而事实上很多的游戏并不会把加密的代码放到同一个函数体内,更不放到一个简单的循环里,所以对于更加复杂的游戏,我们还需要下更多功夫去分析。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|鑫郁飞网络科技有限公司 ( 渝ICP备16011958号-1 )

GMT+8, 2018-7-21 00:20 , Processed in 0.071469 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表