xx网游寻找吃红药的call xx网游寻找吃红药的call
物品使用在游戏定义中,可能以结构体的形式出现
typedef stuct goods
{
DWORD ??;
DWORD num;//物品的数量
DWORD name[10]; //物品的名字
UseGoods();//调用物品的call
}
要使用物品必须要取得物品的数量,我们可以通过物品的数量找到结构体的首地址
1-打开游戏背包用ce找到存放红药的地址
此处的20,只是goods对象一个属性,其表达形式可能是goods的地址+一个偏移,在这个偏移中存放物品的数量。所以接下来我们要找那些代码访问了这个物品数量.右键点击ce点击"访问了这个地址的"的按钮。当鼠标放到药品上时,显示如下两行代码。我们可以推测出esi+c4c存放的就是物品数量地址。而esi就有可能是物品对象goods的指针。
点击第一行代码,esi的值23F5D720,所以物品对象的值很有可能是23F5D720,所以调用物品的call,在执行时,也会去访问这个地址。那么我们就可以根据esi去找调用吃药的call.
接下来我们用ce查找是哪个地址存放了这个esi的值。这个里有四个地址。
我们在游戏背包中拖动药品,看看哪个地址会改变。可以看出19aa71cc的值改变了,所以我们断定这个地址,存放了物品对象的地址。在我们使用药品时,会通过该指针访问药品。
右键查看是什么访问了这个地址,然后使用物品找出访问这个地址的代码。每次使用物品只会访问一次该值,所以那些是1的代码就是访问了只针对代码。
我们通过这些代码通过od查找使用物品的call。需要一个一个调试。大概率是前面几个代码。
接下来我们一个一个调试,先看第一个008636cc.通过od我们看到008636cc下面有一个call,我们在此call上下载一个断点,取出他的传入参数。然后用代码注入器调试。
点击注入我们发现没有效果。所以第一个pass
我们再来找第二个00863B4C,进行上面同样的操作。当我们在od上查找这个值,发现后面很大一段没有call,那么我们就在这个地址处,下一个断。然后按F8,一步一步向下找。最终发现这个call很像,我们再用代码注入器验证一下
最终注入一下call时,药品的数量发生了改变。那么这段代码就是我们要找的吃药call