12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 307|回复: 0

【原创】CE实现对《NBA2kOnline》游戏人物的穿墙

[复制链接]
发表于 2020-2-28 10:49:50 | 显示全部楼层 |阅读模式
前言:来论坛有一些时间了,没发过什么帖子。最近看了论坛里Ganlv大神的CE教程,拿一个我以前“搞过”的游戏进行一些趣味修改,主要实现人物的穿墙功能,下面开始我们教程。
一.准备工作
操作系统:Windows 10 企业版 1024
游戏:NBA2kOnline
工具:CE6.4,PChunterx64
二.过CE非法及反调试
1.打开PChunterx64选中游戏右键结束掉TenSLX.dll的三个线程。



2.打开CE-设置-调试器选项-Debugget method,选择VEH调试器。VEH调试器是注入DLL到要调试的进程,一般TX游戏都会对这个地方进行HOOK。我们打开PChunterx64对NBA2KOL进程钩子进行
扫描。发现了这个 ntdll.dll->LdrInitializeThunk,右键恢复它就行了。
(说明:Windows 的 DLL 装入(除 ntdll.dll 外)和连接是通过 ntdll.dll 中的一个函数LdrInitializeThunk()实现的.)


PS:老早之前调试的时候还需要恢复OBJ钩子,否则无图标,打开不了进程。现在都不需要了:-)
三.人物坐标寻找以及穿墙实现
1.人物坐标的寻找
1.1)进入训练场CE搜索未知的数值,然后往前走一步,搜索变大的数值,往后退一步搜变小的数值。搜来搜去发现还剩几千个怎么办,全部移下来,然后选中一小片改小一点,如果人物位置没有
改变,那就可以删掉了。因为我们是在竖直方向运动搜索,姑且把这个叫做人物Y坐标吧。

1.2).同样的原理,我们搜人物Y坐标。首先未知的值搜一下,往左走一步搜变大的值,往右走一步搜变小的值。然后跟之前一样,移下来改小一点,确定人物X坐标。

1.3).坐标找到了后我们随便修改就可以实现瞬移了,发现只能瞬移半场。但是篮球场要打就要打全场对不对,游戏把我们限制在一个半场里。打得就不舒服,下面我们开始实现穿墙。

PS:修改数据的时候,可能会发现视角会动一下,因为你走动的时候相机位也改变了,有兴趣的可以自己研究一下相机位地址:-)
2.实现穿墙
2.1).当你往边界走的时候,为了把你限制在半场内,肯定会有个函数进行判断,然后修正你的坐标。那么我们往边界走的时候可以看看是那个函数修改了我们的坐标。
右击人物Y坐标,选择是什么写入了这个地址。发现有一个地址是不停写入的,这个我们不管。然后往边界走,这时候出现了第二个地址,你没走一次,他就会往人物Y坐标写入数据

那我们跟进3451658C这个地址看一下他是怎么实现的。右键数据,浏览内存区域,Ctrl+G,跳转到3451658C。

2.1)下面分析一下这边的逻辑实现


主要看这几句:
fld dword ptr [ebp+0C]     
fld st(0)
fadd dword ptr [eax+38]
fstp dword ptr [eax+38]
下面我们来分析一下这几条汇编的意思:
ebp+0C地址保存的值我认为是修正值,fld将ebp+0C地址里面的浮点数据压入堆栈st(0)。(浮点运算(FPU)的处理器有8个寄存器,分别为ST0~ST7)
fld st(0)意思是把堆栈寄存器ST(0)的值再压进栈。而之前压入的值被放进st(1)。
fadd dword ptr [eax+38]意思是把地址eax+38的值(人物Y坐标值)跟st(0)相加在保存到st(0)。
fstp dword ptr [eax+38]意思是将st(0)的数据保存到eax+38的地址里面,然后再弹出st(0)


理解了这几条语句那我们就可以开始修改了那么我们只要修改把修正值改为0,就可以了,让它还是传回当前的坐标就行了。
FLDZ  '把0压入
fld st(0)
fadd dword ptr [eax+38]
fstp dword ptr [eax+38]
然后我们返回游戏看一下,Y方向的能不能穿墙了。发现可以穿墙,可以上沙滩上打球了。

2.1)人物X坐标上也是同理,汇编代码在Y坐标上面一点,下面我主要分析一下
fld dword ptr [eax+30]   'X坐标值压入堆栈
mov esi,[edi+14]
fld dword ptr [ebp+08]    '纠正值压入堆栈
add esi,000000A0
fld st(0)                        '复制st(0)值,并压入堆栈
faddp st(2),st(0)       'st(2)=st(2)+st(0),并弹出st(0)
fxch st(1)                'st(1)跟st(0)交换
fstp dword ptr [eax+30] '将st(0)值保存到eax+30也就是X坐标地址里面,然后弹出

修改也是同样道理直接把纠正值改成0就行了,第一局改成FLDZ 。然后发现左边绿地也能进去了。


至此我们完成了修改。可以全场打球了!
四.后续
当我们在场外投篮的时候发现,人物会瞬移到场内,说明此处还有一个投篮坐标的判断,我们来修改一下。同样的道理选择一个坐标,选择是什么写入了这个地址。然后再场外头一个球。
观察向此地址写入的地址,发现一个地址瞬移完就不写入了,那么很可能就是这个地址。我么来这个地址看一下。

经过之前的修改,相信已经轻车熟路了,看到eax+30和eax+38这两个地址。我么直接将fld和fstp关于这两个值的地方全部NOP掉,就可以全场穿墙投篮啦。


五.总结
以上修改是在训练场做的,在联网对战中修改是无效的,会直接退出游戏,比赛不记录(这也是市面上2K中断挂的原理,当然只要是涉及联网判断的数据都会中断)。
还有巅峰赛的一些数据的搜索教程,我可能会下次发出来吧,第一次发帖感觉蛮累的,感谢大家!
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-5-14 19:55 , Processed in 0.093750 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表