Zhen-nii 发表于 2014-12-21 12:48:35

DNF怪物自杀call源码

XNF怪物自杀call源码

作用:
怪物自动消失,有经验和物品。
老规矩,献上思路给大家:
几个星期前朋友给了我一份动作CALL,叫我测试。
我测试的时候发现,用怪物内存地址来调用CALL,“12”的动作参数就可以让怪物直接消失
(类似于召唤师召唤的怪物时间结束后的那种,一阵烟过后就没了)
MOV ESI,[人物基址]
MOV EAX,
PUSH 0       //PUSH1
PUSH 0       //PUSH2
PUSH 0       //PUSH3
PUSH 0       //PUSH4
PUSH C       //PUSH5   动作参数2 是蹲下不动 ;12用于怪物就是“消失”
MOV ECX,ESI
CALL
以上就是秒怪思路,接下来就是全图秒怪;
然后我就想到了全图秒怪。
先前的思路是这样的:
怪物遍历+动作CALL+12   实现全图秒
但是测试的时候发现,遍历出正确的怪物内存地址很难。。
因为一旦用到了已经死亡的怪物基址或者其他无效的,调用CALL的结果就是卡死。
然后试了很久,还是遍历不行,所以放弃了。

两个星期后,9.18早晨,在调试XNF的时候,突然想到了另一个方法。。
思路来源:
几个星期前,偷海妖无敌的时候发现,海妖是修改的游戏中减血汇编代码,把关键地方修改成了JMP ,
跳转到了海妖的模块里,然后在里面进行了复杂的数据计算,以此实现了无敌。
所以,我就想这个动作CALL能不能也做一下手脚- -
说做就做,自己写了一个DLL,建了一个子程序,内容是:
置入代码({144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144}),置入了很多个144,也就是NOP空指令,然后进入游戏,加载OD,手动修改那些NOP(等于我用置入代码的方法开辟内存空间,来嵌接动作CALL)。
先试试CALL进去后马上RENT,结果游戏没卡死;
然后暂停游戏,一步一步地写判断……
下午吃饭完,终于写好了,哈~
思路讲解就到这,接下来是技术关键,上图:
1、
1.png
这里就是需要修改的地方。
2、
2.png
调用此CALL的相关参数,见右下角
3、
3.png
修改之后的汇编代码

4、
4.png
嵌接进去的汇编代码,请仔细看注释。。
稍微有汇编基础的人,仔细看图就能明白了。
这样一来,就成功HOOK了(不知道能否把这种称之为HOOK),只要非玩家的怪物或者APC一动(出走路之外的任何动作),就会更改当次调用CALL所PUSH的参数,实现另类功能。,把PUSH全改成0,就是“立正”。
很爽吧~
技术关键就到这,接下来是技术难点的实现:

很多人看着都觉得道理挺简单的吧,而且很容易。
其实并不是这样
①CALL 地址   //这里的“地址”不是0X********的地址,而是偏移地址。
所以如果在源码里直接写,是不行的,必须要得到子程序指针,然后取得置入代码()开头,再通过减运算取得偏移地址,再写入。比较麻烦的算法- -
②注意看上面的图,里面涉及到了EBP参数、子程序结构、堆栈平衡等等基础。

通过半天的努力,终于写出来了~
下面是测试图:
① 2 怪物蹲下不动
5.png
② 12 怪物消失
6.png
源码2HB,伸手党付出代价吧~

怪物自动下蹲、自杀(HOOK动作CALL).e

hjwgjd 发表于 2014-12-21 12:53:37

鄙视楼下的顶帖没我快,哈哈

卩s团团丨 发表于 2014-12-21 12:56:25

确实不错,顶先

hjwgjd 发表于 2014-12-21 13:07:41

楼下的接上

zhang_game 发表于 2015-1-2 23:56:40

打酱油的人拉,回复下赚取积分

ghost_z 发表于 2015-1-3 18:57:23

支持楼主,用户楼主,楼主英明呀!!!

45383469 发表于 2015-1-9 07:05:02

好,很好,非常好!

爱情里么小三╮ 发表于 2015-4-22 00:16:49

着玩意还是很有用处的。。。

麦芽糖 发表于 2015-5-27 17:20:25

好像现在 越来越给力了   呵呵

火狼飞侠 发表于 2015-7-2 03:14:13

谢谢楼主分享~
页: [1] 2
查看完整版本: XNF怪物自杀call源码