大冰NO1 发表于 2020-5-25 21:38:45

任鸟飞谈逆向----《魔兽世界》背包分析

直接开始分析,首先搜索物品数量,并下断,再次访问物品游戏断下(如图)继续分析esi,发现来源于一个CALL的返回(如图)
我们发现如果下F2断点的话即使格子里没有物品游戏也会断下,说明我们正在分析的是背包格子里的信息,而不是针对物品去分析。继续到CALL里分析eax的来源,在这个CALL的头部有一些数值的判断和跳转,这事实上是对物品所在背包的判断,因为我们会附加一下小包裹。(如图)向下分析,eax来源于call    00468460,进入CALL内部分析,发现里面有一些简单的加密,代码略有复杂(如图)
经过分析发现,call    00468460通过传入物品的ID来取物品对象,那么我们只需要直接调CALL即可代码如下mov   edx, 008364B4mov   ecx, 10push 90push 0push 物品IDcall    00468460返回对象 接下来分析ID的来源,发现参数来源于数组mov   ecx, dword ptr ,而edx又来源于(如图) 继续向上分析,ecx的来源,和数组序号eax的来源,执行到返回,发现这两个值来源于局部变量和(如图) 局部变量里的值在call    004F9820里被写入,继续分析CALL里的内容(如图) 经过分析得出,主背包和附加包裹所经过的代码是不同的,分别通过调CALL可以取到对象,主背包调CALL代码如下push    90push   0push   92Dmov   edx, 008364B4mov   ecx, 10call    00468460                         ; 取主背包对象返回值+1D38+4为主背包数组的起始地址,而物品序号是从0x17到0x27,小包裹调CALL如下 push    17Bmov   ecx, esi                         ; ecx为小背包序号0-3call    004F93E0push   0x40000000push    eaxmov   edx, 0084D7D8mov   ecx, 4call    00468460 返回值+6C8+4为小包裹数组起始地址返回值+6C8为小包裹格数 经过以上分析就可以得到所有背包物品的对象以及部分属性,这里调用了很多的子程序,如果怕有检测,可以考虑分析出子程序内的代码,改写成公式
逆向交流qun:453769015

rzbhelxx 发表于 2021-9-22 00:04:06


学习学习学习学习

qianming7410 发表于 2020-5-25 22:09:34

学习学习学习学习
页: [1]
查看完整版本: 任鸟飞谈逆向----《魔兽世界》背包分析