外挂学习之路(6)--- 选怪call
选怪call就是指鼠标左键点中怪物准备攻击的动作,看别人教程非常容易找,分分钟的事情,自己实践起来还是费了一番功夫,做个总结希望下次再找的话可以更迅速点。
1. 先用CE找到怪物表示,无论是怪物ID也好,指针也罢,总之先找到选中不同怪物之后的标识,步骤如下:
A, 选中一个怪物,搜索未知量
B, 选中其他怪物,搜索改变的值
C, 循环步骤B,最终仅剩下怪物标识
71541应该是怪物ID,我们选择旁边其他的怪物数字大小差不远
2. 将怪物标识地址拉到下面,右键查看谁改写可这个地址的值,选中其他怪物,看到改写的代码。
3. 打开OD,附加到游戏进程,找到改地址,F2下断点,选中其他怪物,游戏断到断点处,接下来我们有三种方法回溯跟踪
A, CTRL+F9法逐步回溯,找call
B, 右下角的堆栈记录,只观察“返回到***”
C, 快捷键栏点击字母“K”,也可以看到堆栈记录
值得注意的是方法C容易堆栈记录不全,方法B堆栈记录有可能和方法A实际单步跟踪的返回地址有出入,所以个人还是推荐方法A
4. 给回溯找到call加上注释,第一次返回编号1,第二次编号2,…回溯5-6层,每层call处下断点,让游戏跑起来,选择其他怪物,毫无疑问OD会断下,F9键跑,观察注释的编号是否和实际跑的结果一样,以及这些call断下的次数,正常的话应该都是一次,如果出现call被循环调用,毫无疑问的这个call不是我们想找的call,并且call之后回溯的call都不是我们想找的。
5. 这么多call总不能一个一个用注入工具测试吧,有一定排除方式的,首先我们选怪,怪物是不同的,肯定要传进call里面的,无论是压栈还是用寄存器存,其次传的值会跟随选的怪物不同而不同,从第一次回溯到的call我们开始观察,我们选中一个怪物,记录下参数的值,选中另一个怪物,再次观察参数的值,比较两次参数是否全都一样,如果全都一样毫无疑问这个call不是我们想要的,如果有不同的参数那么接下来就可以用代码注入工具测试了。测试失败的话我们再测试第二次回溯到的call,一次地推
最终我们找选怪call.
1081DB8A 6A 00 PUSH 0
1081DB8C 6A 01 PUSH 1
1081DB8E 56 PUSH ESI
1081DB8F 8BCF MOV ECX,EDI
1081DB91 E8 3AC2FEFF CALLem_temp2.10809DD0 ; 3
第三个参数一个是怪物的对象的指针(怪物死后这个值变为0),至于这个值该怎么寻找我们接下来继续先研究如何遍历地图上的怪物吧。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
