开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1464|回复: 1
收起左侧

[图文资料] 如何通过修改人物坐标实现瞬移

[复制链接]
发表于 2021-1-31 06:08:56 | 显示全部楼层 |阅读模式   吉林省通化市
如何通过修改人物坐标实现瞬移
1_副本.jpg
XXX梦境是新出的游戏 还未公测 我们有幸拿到测试资格 以下数据是我们在内测期间得到的人物坐标数据来实现瞬间移动 下面我们就开始
首先我们打开CE工具 附加游戏
然后数值类型选着浮点数 大部分游戏的坐标一般都是选用浮点数的多一下 但是也不排除整数等类型
扫描类型为未知初始值 我们会得到很多 然后我们改变我们游戏内的坐标 向前走一步 在搜索变动的
2.png
然后保值不动 在搜索未变动的值 这样反复搜索
到后面我们扫描到6个
3.png
这时我们对其挨个修改 看看 游戏内是否有变化
4.png
发现其中有一个是可以改变的 并且没有被修正
那么我们在改一下远一点的地方 验证一下 是否真实有效
因为有时距离太近的话 在我们眼里是瞬移 实则是跑过去的
只是我们看不到
更改了一个远一点的 发现我们已经跑到地图外了
坐标并没有被修正 那么就说明 我们可以使用这个坐标达到瞬移的效果
那么我们现在可以打开x64_dbg(调试工具)
附加游戏 输入我们的地址
在下面的代码中我们断到了一个+88偏移 有同学总是会问 我要最哪个 怎么确定 哪个寄存器是我要追的
最简单的方式 就是标记一下我们用CE搜出来的地址
然后我们在断下的位置 看一眼寄存器 右键窗口跟随
然后发现 我们刚刚标记的位置 和我们刚刚打开的这个寄存器的地址 就是差偏移的位置
那么就可以确定需要追那个寄存器了
$+192 | E8 C3 DF EE FF | call nightmarebreaker.7FF718FDFA30 |
$+197 | 85 C0 | test eax,eax |
$+199 | 75 0A | jne nightmarebreaker.7FF7190F1A7B |
$+19B | 8B 44 24 40 | mov eax,dword ptr ss:[rsp+40] |
$+19F | 89 83 A8 00 00 00 | mov dword ptr ds:[rbx+A8],eax |
$+1A5 | 4C 89 B3 9C 00 00 00 | mov qword ptr ds:[rbx+9C],r14 |
$+1AC | 48 8B 45 F8 | mov rax,qword ptr ss:[rbp-8] |
$+1B0 | 48 89 83 8C 00 00 00 | mov qword ptr ds:[rbx+8C],rax |
$+1B7 | 45 33 C0 | xor r8d,r8d |
$+1BA | 8B 54 24 40 | mov edx,dword ptr ss:[rsp+40] |
$+1BE | 48 8B CB | mov rcx,rbx |
$+1C1 | E8 F4 7D FB FF | call nightmarebreaker.7FF7190A9890 |
$+1C6 | F2 48 0F 2C C0 | cvttsd2si rax,xmm0 |
$+1CB | 48 89 83 94 00 00 00 | mov qword ptr ds:[rbx+94],rax |
$+1D2 | 41 8B 8D 88 00 00 00 | mov ecx,dword ptr ds:[r13+88] | +88
$+1D9 | 84 C9 | test cl,cl |
$+1DB | 78 2B | js nightmarebreaker.7FF7190F1ADE |
$+1DD | 8B 44 24 40 | mov eax,dword ptr ss:[rsp+40] |
$+1E1 | 41 39 85 80 00 00 00 | cmp dword ptr ds:[r13+80],eax |
$+1E8 | 75 0C | jne nightmarebreaker.7FF7190F1ACC |
$+1EA | 41 83 BD 24 02 00 00 00 | cmp dword ptr ds:[r13+224],0 |
$+1F2 | 8B C6 | mov eax,esi |
$+1F4 | 75 05 | jne nightmarebreaker.7FF7190F1AD1 |
$+1F6 | B8 80 00 00 00 | mov eax,80 |
$+1FB | 0F BA F1 07 | btr ecx,7 |
$+1FF | 0B C8 | or ecx,eax |
$+201 | 41 89 8D 88 00 00 00 | mov dword ptr ds:[r13+88],ecx |
$+208 | 8B 54 24 40 | mov edx,dword ptr ss:[rsp+40] |
$+20C | 49 8B CD | mov rcx,r13 |
然后我们继续向上追
中间有一些返回的地方就不在这里复制了 就和我们所学的一样 正常追寄存器
然后我们追到一个rax 学过我们的前面基础课程的都知道
rax是有什么特性 rax遇到CALL就需要我们进到CALL里面去追
CALL外面下断 然后F7步进 进到CALL里面后 F8步过 一直走出这个CALL
当返回CALL了 我们就按减号键返回 去追rax
然后看到了 基址
这时我们发现这地方附近很不好定位
那么我们在代码里搜索下 常数
这时我们来到这
$+64 | 74 47 | je nightmarebreaker.7FF718F41F2C |
$+66 | 89 3D 25 8E 89 02 | mov dword ptr ds:[7FF71B7DAD10],edi |
$+6C | 48 8B 0D 6E 93 89 02 | mov rcx,qword ptr ds:[7FF71B7DB260] |
$+73 | 48 85 C9 | test rcx,rcx |
$+76 | 75 1F | jne nightmarebreaker.7FF718F41F16 |
$+78 | 48 8D 0D 0A 0A 72 01 | lea rcx,qword ptr ds:[7FF71A662908] |
$+7F | E8 2D 9F 08 00 | call nightmarebreaker.7FF718FCBE30 |
$+84 | 48 89 05 56 93 89 02 | mov qword ptr ds:[7FF71B7DB260],rax |
$+8B | E8 11 A0 09 00 | call nightmarebreaker.7FF718FDBF20 |
$+90 | 48 8B 0D 4A 93 89 02 | mov rcx,qword ptr ds:[7FF71B7DB260] |
$+97 | 33 D2 | xor edx,edx |
$+99 | E8 43 29 30 FF | call nightmarebreaker.7FF718244860 |
$+9E | 48 8B C8 | mov rcx,rax |
$+A1 | E8 3B 84 0E 00 | call nightmarebreaker.7FF71902A360 |
$+A6 | 48 89 05 DC 8D 89 02 | mov qword ptr ds:[7FF71B7DAD08],rax | 人物坐标基址
$+AD | FF 15 DE 8A 40 01 | call qword ptr ds:[<&GetTickCount>] |
$+B3 | 89 05 D8 8D 89 02 | mov dword ptr ds:[7FF71B7DAD10],eax |
$+B9 | F3 0F 10 93 8C 00 00 00 | movss xmm2,dword ptr ds:[rbx+8C] |
$+C1 | F3 0F 5C 93 70 03 00 00 | subss xmm2,dword ptr ds:[rbx+370] |
$+C9 | F3 0F 10 83 88 00 00 00 | movss xmm0,dword ptr ds:[rbx+88] |
$+D1 | F3 0F 5C 83 6C 03 00 00 | subss xmm0,dword ptr ds:[rbx+36C] |
$+D9 | F3 0F 10 8B 90 00 00 00 | movss xmm1,dword ptr ds:[rbx+90] |
$+E1 | F3 0F 5C 8B 74 03 00 00 | subss xmm1,dword ptr ds:[rbx+374] |
$+E9 | F3 0F 59 D2 | mulss xmm2,xmm2 |
$+ED | F3 0F 59 C0 | mulss xmm0,xmm0 |
$+F1 | F3 0F 58 D0 | addss xmm2,xmm0 |
$+F5 | F3 0F 59 C9 | mulss xmm1,xmm1 |
$+F9 | F3 0F 58 D1 | addss xmm2,xmm1 |
我们在这段代码里看到 人物坐标基址 附近比较好定位一下
那我们就选用这里
这时我们就可以写公式了
[0x7ff71b7dad08]+88 人物X坐标 DWORD
[0x7ff71b7dad08]+8C 人物Y坐标 DWORD
[0x7ff71b7dad08]+90 人物Z坐标 DWORD
因为游戏是动态加载的 这时我们需要用基址减去模块地址 算出偏移
nightmarebreaker.exe+383AD08 人物坐标基址
特征码:
40 57 48 83 EC 60 48 C7 44 24 30 FE FF FF FF 48 89 5C 24 70 48 8B D9 33 FF 89 B9 78 03 00 00
向下+A6 QWORD 人物基址
现在我们看这个公式很简单 他附近还有一些别的人物数据 有同学感兴趣的可以再去分析别的数据
下一篇我们分析下人物基础信息


结帖率:100% (8/8)

签到天数: 20 天

发表于 2021-1-31 10:14:04 | 显示全部楼层   山东省烟台市
单独买2019那个灵魂起源有折扣不。大佬
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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