ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HOOK实现游戏无敌-直接修改客户端

2021-03-11 15:01:44  阅读:354  来源: 互联网

标签:函数 代码 无敌 这里 HOOK 怪物 跳转 esi 客户端


HOOK实现游戏无敌-直接修改客户端

首先找到关键数据

血量的基地址

利用CE的内存搜索,来筛选得到绿色的地址也就是人物血量的基地址

这里我搜索得到的是004B6CC4

 

 

扣血函数call

通过访问是什么来访问了人物血量可以定位关键代码,然后利用关键代码在的位置来找到对应的函数call

 

 

这里我一共挨了5次打,所以只有这个计数为5的符合条件,右键选中进入反汇编程序,可以看到关键代码是image-20210311131328811

这里我先把这个代码给它变没了,用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,也就是那个关键代码 image-20210311140115690

这里的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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有