HOOK实现游戏无敌-直接修改客户端
作者:互联网
HOOK实现游戏无敌-直接修改客户端
首先找到关键数据
血量的基地址
利用CE的内存搜索,来筛选得到绿色的地址也就是人物血量的基地址
这里我搜索得到的是004B6CC4
扣血函数call
通过访问是什么来访问了人物血量可以定位关键代码,然后利用关键代码在的位置来找到对应的函数call
这里我一共挨了5次打,所以只有这个计数为5的符合条件,右键选中进入反汇编程序,可以看到关键代码是
这里我先把这个代码给它变没了,用nop填充
改了之后果然无敌了,但是有个问题是,改了之后我对怪物也没有伤害了,所以这里我猜这个函数是一个公用函数也就是是一个父类的函数然后参数是父类的指针,再在函数里面判断是怪物还是人进行攻击
函数的首地址是0041FD40
然后采用ollydbg动态调试看看
利用Ollydbg调试关键代码
刚刚找到了程序的关键代码关键函数的地址,直接用ollydbg到达关键函数的地址
然后给这个函数打上一个断点,在push esi哪里,因为前面我猜这个函数是根据函数的参数的不同来走不同的功能所以这里肯定是类里面的函数,而且它使用了MOV esi,ecx就更加坚定了我的想法就是这个是一个类的函数也就是一个thiscall
然后这里我直接dc esi,查看this指针指向的一个类的大概处理
这波是怪物打人,所以可以看到前面的一坨是怪物,后面的南宫飞云什么的应该是主角的名字
然后一进来就有一个cmp指令加jnz,这个一看就是一个if语句,和刚刚的猜想是一样的,就是进来先判断是不是主角或者怪物然后跳转具体的操作,这里是怪物打人,所以应该是把人传进来扣血,
这里比较的是esi+0x4和2进行比较,所以我直接查看dd esi+0x4
第一个确实是2表示了这个应该会跳转,所以这里我猜esi+0x4如果为2就表示是主角被打
然后我来打怪物试一下
这里可以很明显得看得到,如果我击打的是怪物,就会esi+0x4传入的就是1,而且这个函数是一个掉血的函数,所以我猜这里是怪物类会有一个数据为1来表示是怪物,主角类有一个数据为2来表示是主角
修改客户端实现无敌
这里用一个比较粗略的手段,就是直接在游戏客户端里面修改这个函数的代码逻辑,就是如果是2也就是主角被打,就把伤害改为0,也就是那个关键代码
这里的edi就可以修改为0,但是也要考虑到edi的问题
在edi进入的时候,就被[esp+0xc]修改过一次,然后esp+0xc没有被修改过,所以可以直接在函数的开始就跳转来修改esp+0xc
这里我选择直接在函数开始就先跳转进来,判断如果是2就让esp+0xc的值变为0,选择了一个空的地址 00434FAC
由于jmp需要用到五个字节,所以需要把函数的前五个字节的指令保存下来到自己用的内存里
这样修改后就真正无敌了
总结
就是找到关键函数代码,然后利用跳转来实现自己想的逻辑来实现无敌
标签:函数,代码,无敌,这里,HOOK,怪物,跳转,esi,客户端 来源: https://www.cnblogs.com/Sna1lGo/p/14517986.html