如何通过修改人物坐标来实现瞬移
XXX梦境是网易新出的游戏 还未公测 我们有幸拿到测试资格 以下数据是我们在内测期间得到的人物坐标数据来实现瞬间移动 下面我们就开始
首先我们打开CE工具 附加游戏
然后数值类型选着浮点数 大部分游戏的坐标一般都是选用浮点数的多一下 但是也不排除整数等类型
扫描类型为未知初始值 我们会得到很多 然后我们改变我们游戏内的坐标 向前走一步 在搜索变动的
然后保值不动 在搜索未变动的值 这样反复搜索
到后面我们扫描到6个
这时我们对其挨个修改 看看 游戏内是否有变化
发现其中有一个是可以改变的 并且没有被修正
那么我们在改一下远一点的地方 验证一下 是否真实有效
因为有时距离太近的话 在我们眼里是瞬移 实则是跑过去的
只是我们看不到
更改了一个远一点的 发现我们已经跑到地图外了
坐标并没有被修正 那么就说明 我们可以使用这个坐标达到瞬移的效果
那么我们现在可以打开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 人物基址
现在我们看这个公式很简单 他附近还有一些别的人物数据 有同学感兴趣的可以再去分析别的数据
下一篇我们分析下人物基础信息
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)