• 26阅读
  • 0回复

任鸟飞谈逆向----《魔兽世界》封包协议加密分析 [复制链接]

上一主题 下一主题
离线任鸟飞
 

魔兽世界作为暴雪的经典大作,被称作游戏历史上的一个里程碑,今天我们就以喊话封包为例,来分析一下这个游戏的封包内容。
首先来到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变量。这样所有需要传入的数据都已经获得,直接内联汇编,调用这段循环代码,就可以取到下一个包的包头。

这是一个对封包的简单加密过程,而事实上很多的游戏并不会把加密的代码放到同一个函数体内,更不放到一个简单的循环里,所以对于更加复杂的游戏,我们还需要下更多功夫去分析。
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个