Battle.net v2 登录协议分析 3
whitebear
刚才再次动态跟踪了Wow.exe。程序先在offset 0x008EE000处断下(我所标记的“第三层错误处理程序1”),然后调用到0x008EDA30(“第二层错误处理程序3”),随后调用到0x008E9540(“最内层错误处理程序”)。这样看来,分层应该是正确的了。
对于第三层错误处理程序无法继续上溯的问题,我已经发现了原因。进入第三层错误处理程序后,取消所有断点,执行到返回,就返回到了调用者(offset 0x007B2864) ^_^ 。果然,调用者是使用的是call eax的形式,而eax是由上面数句计算出来的。正因为没有明显标记,反汇编器才无法得到调用来源。
随后的测试表明,我所谓的“错误处理程序”在受到challenge后会被反复调用,多达百次。加上ASCII码分析,我认为,这些程序处理的是服务器消息,而不仅仅是错误。其中 offset 0x007B2864 所在子程序开始于 offset 0x007B2810。这一子程序会被反复执行,内存中大约40字节的数据会被反复改写,差不多有近百次。有一部分数据变化是有规律的,有一部分则没有。这看起来在计算一些数据。难道是Challenge的hash计算或解码?我会进行进一步分析。