任鸟飞谈逆向----《魔兽世界》背包分析
直接开始分析,首先搜索物品数量,并下断,再次访问物品游戏断下(如图)继续分析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
学习学习学习学习 学习学习学习学习
页:
[1]