吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 118153|回复: 596
上一主题 下一主题

[游戏安全] 【原创】CE教程:《荒野行动》从内存数据修改到代码注入(不再更新)

    [复制链接]
跳转到指定楼层
楼主
Ganlv 发表于 2018-1-18 03:07 回帖奖励
本帖最后由 Ganlv 于 2018-1-28 22:48 编辑

(请注意:本帖内容最后更新于2018年1月21日)

本教程仅供学习交流内存修改、反汇编、代码注入等学习用途使用,请勿用于非法用途。

2018年1月26日有回帖称,已被秒封,请尽可能小心地进行破解

我已经卸载游戏了,教程不会继续更新了。

以下内容其实算不上教程,就是我在学习使用CE的时候摸索出来的一些方法吧。我对这个游戏本身已经没什么兴趣了,大部分只是在学习调试技术吧。

一、人物物品变黄色

2018年1月8日之后,某易似乎对hyxd的内存数据进行了简单的检测,原来的通过基址+偏移的方法改数据会被秒封。

物品红色gamma值地址:[[["hyxd.exe"+1B9A678]+AC]+E0]+E0,float类型,直接把该数值改成1000会导致账号被封,具体原因暂时不清楚。

研究过程:

1. 首先这个游戏有简单的反调试,Cheat Engine 菜单 > Edit > Settings > Debugger Options,改一下设置Debugger method: Use windows debugger,Debugger interface config: Try to prevent detection of debugger,简单粗暴的反反调试就可以了,至于“Try to prevent detection of debugger”具体做了什么暂时不太清楚,有待进一步研究。



2. 然后就可以对这个地址进行“Find out what accesses the address” > “Find what accesses the address pointed at by this pointer” 可以看到两条指令



经过测试,第一条是真正有用的代码,第二条大约每1秒触发1次,可能就是用来检测数据异常的。

既然直接改内存数据不太方便,那么不用内存数据修改的方法怎么办呢?

3. 代码注入



这三条指令,第一条是读取红色亮度,第二条是乘以白色亮度,第三条是存到[edi+40]。

代码注入原理很简单,就是二话不说,直接给[edi+40]赋值float的1000。

这块内存区域足够我们注入了,不需要申请新内存,直接在这块内存上修改即可。

原始代码:8 + 5 bytes

[Asm] 纯文本查看 复制代码
hyxd.exe+64F3EA - F3 0F59 86 EC000000   - mulss xmm0,[esi+000000EC]
hyxd.exe+64F3F2 - F3 0F11 47 40         - movss [edi+40],xmm0


修改后代码:7 + 6 * 1 bytes

[Asm] 纯文本查看 复制代码
mov [edi+40], (float)1000.0
nop
nop
nop
nop
nop
nop


这个就是最简单的代码注入了。

4. 然后就是在CE中实现了



[Asm] 纯文本查看 复制代码
[ENABLE]
"hyxd.exe"+64F3EA:
  mov [edi+40], (float)1000.0
  nop
  nop
  nop
  nop
  nop
  nop

[DISABLE]
"hyxd.exe"+64F3EA:
  mulss xmm0,[esi+000000EC]
  movss [edi+40],xmm0


保存到代码列表即可。

然而CE的自动汇编似乎每条指令不是同时写入的,连续的开关这个代码注入有时直接导致程序崩溃,所以我改为使用db直接拷贝字节数组,这样可以一次性写入,防止程序崩溃。


[Asm] 纯文本查看 复制代码
[ENABLE]
"hyxd.exe"+64F3EA:
  db C7 47 40 00 00 7A 44 90 90 90 90 90 90

[DISABLE]
"hyxd.exe"+64F3EA:
  db F3 0F 59 86 EC 00 00 00 F3 0F 11 47 40






这样基本可以完成了,2018年1月18日测试不会被封号。



二、摄像机抬高

关于这个游戏的摄像机位置,大家可能都知道了

人物站立搜1.65,蹲下搜1.30,趴下搜0.76,只剩下一个地址,这是跟随摄像机的高度。

不要直接修改这个数值,队友观战的情况下可以看到和你相同的画面(他们的视野也是提高的,或者说服务器会收到你修改的异常数据)。

对这个地址使用上述同样的方法,找出写入的代码,然后在原始内存上代码注入即可,比如设置成30,就可以拥有一个头上的无人侦察机了。

然而,简单的内存注入会使摄像机顶在天花板上,极其影响使用体验,所以,我们深入研究一下这段代码。

1. 人物站立搜1.65,蹲下搜1.30,趴下搜0.76,只剩下一个地址

2. Find out what accesses the address,只有一条指令,然后 Show disassembler



看到两条有用的指令

[Asm] 纯文本查看 复制代码
hyxd.exe+23954D - F3 0F10 86 C4000000   - movss xmm0,[esi+000000C4]
hyxd.exe+239555 - F3 0F11 45 C8         - movss [ebp-38],xmm0


把[esi+000000C4]赋值给[ebp-38]

于是我们就使用 Find out what addresses this instruction accesses 找出这条指令访问的地址



可以看到,找到的地址的值一直在变啊,我们下断点看看ESP(Stack Pointer,栈指针)的值,ESP和EBP比较接近,所以[ebp-38]指向的是一个栈内存的数据,很麻烦。

大家都知道,堆内存是分配完只要不销毁、无论怎么在函数间传递或调用都会一直存在的,也不会被其他数据占据,而栈是只在函数调用期间存在的,一旦这个函数调用结束,别的函数就会复用这块栈,这块数据会频繁的改变,所以栈内存根本没法使用普通方式修改,必须依赖代码注入。

[Asm] 纯文本查看 复制代码
mov [ebp-38],(float)30.0
nop
nop
nop
nop
nop
nop


这样就可以了,非常简单,不过顶在天花板上的问题还没解决呢。

3. 虽然栈是短暂的,在线程外访问会得到不确定的结果。但是,如果我们下了断点,让程序在这里沿着游戏的线程执行,就不会出现这个问题了,但是 Find out what addresses this instruction accesses 这种简单的方法就不行了。



首先F5下断点,然后看寄存器,并右键EBP选择 Show in hexview,并且往上找3行8字节(就是[ebp-38]),右键 Data breakpoint > Break on access,然后F9继续执行就可以了,程序会断在对[ebp-38]访问的指令上,我们可以确定,这条指令一定是有用的,而不会被其他函数复用了这块内存(因为这个数据刚写入,第一次访问一定是有用的访问)。



[Asm] 纯文本查看 复制代码
hyxd.exe+239B3D - F3 0F10 8E 84000000   - movss xmm1,[esi+00000084]
hyxd.exe+239B45 - F3 0F10 86 88000000   - movss xmm0,[esi+00000088]
hyxd.exe+239B4D - F3 0F58 96 80000000   - addss xmm2,[esi+00000080]
hyxd.exe+239B55 - F3 0F58 4D C8         - addss xmm1,[ebp-38]
hyxd.exe+239B5A - F3 0F58 45 C4         - addss xmm0,[ebp-3C]
hyxd.exe+239B5F - 0F14 D1               - unpcklps xmm2,xmm1
hyxd.exe+239B62 - 66 0FD6 17            - movq [edi],xmm2
hyxd.exe+239B66 - F3 0F11 45 A4         - movss [ebp-5C],xmm0


我们可以分析一下这段代码的意图,在hyxd.exe+239B45处下断点,查看XMM1寄存器,很显然[esi+00000084]存放的是当前人物的Y坐标(高度方向坐标),然后使用addss指令把[ebp-38]的相机高度加上,然后unpcklps把xmm1和xmm2寄存器各自的前4字节合成到xmm2的前8字节,写入[edi],我们可以看到edi在每局游戏中是固定的,这个就非常舒服,我们直接添加到地址列表中就可以研究了。



4. 我们可以尝试第一个实验,直接把 movq [edi],xmm2 改为 nop,右键该条指令, Replace with code that does nothing,我们发现镜头不会跟随我们了,然后我们可以对edi的地址用CE直接进行内存修改,发现镜头真的可以随数值移动,证明,EDI这个地址是有用的。

改完记得在右键 Restore with original code 还原代码

5. 然后,就是 Find out what writes the address,可以看到,在相机不碰到天花板的时候只有一条指令写入,在碰到天花板的时候有两条写入,我们直接把第二条nop掉。大功告成,我们可以在屋子里提高视野了。



于是我们又发现问题了,开镜、开车和观战的时候,步骤2中注入的代码不好使,搜索对EDI这个地址的写入,我们发现开镜、开车和观战的时候分别有不同的代码写入EDI这个地址,我们必须继续探究EDI这个地址到底之后被用来做什么了。

6. 还是熟悉的套路,右键刚才那个相机高度的地址,Find out what accesses the address,查找访问(访问包括写入和读取),可以看到通常情况下有4条指令,当进行某些复杂的相机位置计算的时候回多出来很多(比如顶到天花板,比如开镜)



注意,前面的计数器是相等的,很显然这些操作是一系列有顺序的操作,其中第二条是刚才写入[edi]的那条指令。

另外,这里显示的指令的顺序是非常重要的,CE按照触发顺序列出了所有的访问指令,我们要改的应该是哪一个呢?

肯定是最后一个嘛,我们的想法就是,前面无论你怎么算,让游戏随便算,我们到最后一步,把结果一改就OK啦。(你前面尽管算,结果对了算我输)

7. 开始修改

Show disassembler



[Asm] 纯文本查看 复制代码
hyxd.exe+21F7FB - F3 0F10 47 04         - movss xmm0,[edi+04]
hyxd.exe+21F800 - F3 0F5C C5            - subss xmm0,xmm5
hyxd.exe+21F804 - F3 0F11 45 90         - movss [ebp-70],xmm0


[edi]是X坐标,[edi+04]是Y坐标(相机高度)

我们要做什么你们懂吧,在 movss [ebp-70],xmm0 这句话之前,在xmm0上加30.0就可以了。

对这句指令进行 Auto Assemble,使用 Template > Full Injection 模板



CE提供了以下 Full Injection 模板

[Asm] 纯文本查看 复制代码
define(address,"hyxd.exe"+21F804) // 定义我们要修改的地址
define(bytes,F3 0F 11 45 90) // 这是改地址原来的指令机器码

[ENABLE]

assert(address,bytes) // 只有在我们要修改的地址为原来的指令的时候才继续
alloc(newmem,$1000) // 分配1KB内存

label(code) // 定义标签
label(return) // 定义标签

newmem: //这是我们刚分配的内存地址,在这里添加修改代码// ...
// ...
// ...
code: // 这是原来指令的拷贝(因为jmp newmem指令覆盖了原来的指令,所以需要把原来的指令搬到我们新分配的地址中来)
  movss [ebp-70],xmm0
  jmp return

address: // 这是原始的地址,这个标签之后的内容会覆盖原始指令(就是跳转到我们分配的那一段内存里)
  jmp newmem
return:

[DISABLE]

address:
  db bytes
  // movss [ebp-70],xmm0

dealloc(newmem)


代码中有解释,不过我还要再说明一下,newmem: code: address: return:这四个东西的用途是不一样的。newmem和address是具体的内存地址,他表示接下来所有指令将被写入这个内存地址。code和return是标签,不占据字节,不占据指令,他表示一个暂时不知道的地址,仅仅用于跳转,所以从newmem:到address:之间的指令都会写到新分配的地址中,address:到[DISABLE]之间的指令都会覆盖原始指令(实现代码注入的效果)

我们需要做的就是在newmem:后面添加几条指令,你们可以自行发挥(由于newmem:到address:之间的指令都会写到新分配的地址中,改code:之后的指令也是没有任何问题的)。

我的写法如下:

[Asm] 纯文本查看 复制代码
push (float)30.0
addss xmm0, [esp]
add esp, 4


由于ss系列指令不能接受具体的数值(应该叫立即数吧,我对ASM只是粗略的了解),所以我先直接往栈中压入一个数值,由于栈可以通过地址使用[esp]访问(ESP永远指向栈顶),然后再把栈指针增加4,恢复栈平衡。

这里基本就完事了。

我甚至发现一个有趣的东西,就是可以在天上开镜,甚至还可以打到人。看来这个游戏的命中检测是客户端做的。



如果在车上开提高视角,一旦屏幕中没有显示出自己的车子,屏幕就会非常卡,暂时不知道原因是什么。(所以在车里提高视角之后只能竖直向下看)

8. 课后拓展:

看到 movss [ebp-70],xmm0 这条指令,对[ebp-70]有没有什么兴趣。

ebp 和 esp 差不多,通常都是指向栈内存的,分析这个地址也需要单步或内存断点。

三、放大视野(自带8倍镜)

不开镜搜39.4,枪自带的镜或红点搜31.52,二倍镜搜39.4/2,四倍镜搜39.4/4,以此类推。

1. 先通过内存搜索把地址定下来,应该会有4个地址。

2. 你们可以一个一个试,找出访问这个地址的指令。

最后我定位到这段代码了



[Asm] 纯文本查看 复制代码
hyxd.exe+175FBD - F3 0F10 05 94DD4802   - movss xmm0,[hyxd.exe+168DD94] { [179.90] }
hyxd.exe+175FC5 - F3 0F10 0D 90DD4802   - movss xmm1,[hyxd.exe+168DD90] { [0.10] }
hyxd.exe+175FCD - F3 0F5D 86 FC010000   - minss xmm0,[esi+000001FC]
hyxd.exe+175FD5 - F3 0F5F C8            - maxss xmm1,xmm0
hyxd.exe+175FD9 - 84 C0                 - test al,al
hyxd.exe+175FDB - 75 32                 - jne hyxd.exe+17600F
hyxd.exe+175FDD - 0F2E 8F 98000000      - ucomiss xmm1,[edi+00000098]
hyxd.exe+175FE4 - 9F                    - lahf 
hyxd.exe+175FE5 - F6 C4 44              - test ah,44 { 68 }
hyxd.exe+175FE8 - 7B 25                 - jnp hyxd.exe+17600F
hyxd.exe+175FEA - 8B 4D 08              - mov ecx,[ebp+08]
hyxd.exe+175FED - F3 0F11 8F 98000000   - movss [edi+00000098],xmm1
hyxd.exe+175FF5 - F3 0F59 0D 8CDD4802   - mulss xmm1,[hyxd.exe+168DD8C] { [0.02] }
hyxd.exe+175FFD - 51                    - push ecx
hyxd.exe+175FFE - 8B 01                 - mov eax,[ecx]
hyxd.exe+176000 - F3 0F11 0C 24         - movss [esp],xmm1
hyxd.exe+176005 - FF 50 34              - call dword ptr [eax+34]
hyxd.exe+176008 - C7 45 FC FFFFFFFF     - mov [ebp-04],FFFFFFFF { -1 }
hyxd.exe+17600F - F3 0F10 86 00020000   - movss xmm0,[esi+00000200]


读取[esi+000001FC],然后与给定范围对比,最大179.9度,最小0.10度。

(然后后面那一堆代码可以不用理解,具体想研究的话需要去查ucomiss和lahf指令的具体含义,反正我研究了半天,也没什么大用)

如果 [edi+00000098] 不等于 xmm1 则令 [edi+00000098] 等于 xmm1,然后把 xmm1 乘以 0.02 存入 [esp],调用 [eax+34] 这个函数 。

这个0.02是四舍五入以后的,具体看一下那个内存地址是0.017,猜一猜嘛,高中数学,就是 π/180 呗。(就算知道了又怎样呢.....)

3. 我们需要做的很简单,把 maxss xmm1,xmm0 那一堆直接改成令 xmm1 = 39.4/8 就行了。(下面的代码没有填充nop,自己调整一下就好了)

[Asm] 纯文本查看 复制代码
push (float)5.0
movss xmm1,[esp]
add esp,4


这样其实就可以了。不过你会发现这样的放大视野并不会加载远处的东西,那怎么办呢?我还没研究出来

(还在探索中,不过真不太想玩这个游戏了)

四、高级代码注入

1. 抬高相机玩的还不够爽,毕竟只是改变一个Y轴。那么X轴和Z轴呢?

当然也可以改,不过问题来了,我怎么知道X轴、Z轴的数值要怎么改变呢,我们需要更人性化的使用方法。

以下代码实现的功能,简单来说就是一个隐形无人机:IJKL:控制方向,P/分号:上升/下降,左/右方括号:减速/加速

如果是可以开镜的枪,开镜使用就是一个具备攻击能力的隐形无人机。

以下内容需要对Windows的API有一定了解,对汇编有一定了解。如果你对汇编不太了解可以用C语言写,然后使用CE进行注入(不过这个我还没试过)。

[Asm] 纯文本查看 复制代码
// 首先定义了很多常量
// 这个代码地址是原来的计算已经结束的地方,我们的目的是在得到原始计算结果之后再进行修改
define(address,"hyxd.exe"+21F812)
define(bytes,F3 0F 11 45 CC)
define(VK_I,49)
define(VK_J,4A)
define(VK_K,4B)
define(VK_L,4C)
define(VK_P,50)
define(VK_OEM_1,BA) // 分号键
define(VK_OEM_4,DB) // 左方括号
define(VK_OEM_6,DD) // 右方括号

[ENABLE]

// 目标地址必须是指定指令才进行注入
assert(address,bytes)

// 分配代码内存
alloc(newmem,$1000)
// 分配变量内存
alloc(delta_x,4)
alloc(delta_y,4)
alloc(delta_z,4)
alloc(v_x,4)
alloc(v_y,4)
alloc(v_z,4)
alloc(v,4)
alloc(v_ratio,4)

// 定义标签
label(return)
label(uav)
label(not_press_VK_I)
label(not_press_VK_J)
label(not_press_VK_K)
label(not_press_VK_L)
label(not_press_VK_P)
label(not_press_VK_OEM_1)
label(not_press_VK_OEM_4)
label(not_press_VK_OEM_6)

// 变量初始化
delta_x:
  dd (float)0
delta_y:
  dd (float)0
delta_z:
  dd (float)0
v_x:
  dd (float)0
v_y:
  dd (float)1
v_z:
  dd (float)0
v:
  dd (float)0.5
v_ratio:
  dd (float)1.05

// 注入的代码
newmem:

  // 原来地址上的代码
  movss [ebp-34],xmm0

  // 把速度存下来,供其他部分使用
  // movss xmm3, [edi+0c]
  movss [v_x], xmm3
  // movss xmm5, [edi+10]
  movss [v_y], xmm5
  // movss xmm4, [edi+14]
  movss [v_z], xmm4
  // 检测键盘操作
  call uav
  // 在相机位置上加上偏移量
  movss xmm0,[ebp-6C]
  addss xmm0,[delta_x]
  movss [ebp-6C],xmm0
  movss xmm0,[ebp-70]
  addss xmm0,[delta_y]
  movss [ebp-70],xmm0
  movss xmm0,[ebp-34]
  addss xmm0,[delta_z]
  movss [ebp-34],xmm0
  // 我调试了半天才发现,call user32.GetAsyncKeyState会清空xmm寄存器
  // 恢复xmm寄存器
  movss xmm3, [edi+0c]
  movss xmm5, [edi+10]
  movss xmm4, [edi+14]
  jmp return

// 这个是我们通过键盘操控的代码
uav:
  // 记录寄存器和标志位
  push eax
  push ecx
  push edx
  pushf
  // GetAsyncKeyState接受一个参数,就是虚拟按键的编码
  push VK_I
  call user32.GetAsyncKeyState
  // 返回值保存到EAX,AX的最高位为1则按下,这里简单的判断EAX是否为0
  test eax,eax
  je not_press_VK_I
  // delta_x = delta_x + v * v_x
  movss xmm0,[delta_x]
  movss xmm1,[v_x]
  mulss xmm1,[v]
  addss xmm0,xmm1
  movss [delta_x],xmm0
  // 这里可以根据自己的喜好,选择注释或取消注释。
  // movss xmm0,[delta_y]
  // movss xmm1,[v_y]
  // mulss xmm1,[v]
  // addss xmm0,xmm1
  // movss [delta_y],xmm0
  movss xmm0,[delta_z]
  movss xmm1,[v_z]
  mulss xmm1,[v]
  addss xmm0,xmm1
  movss [delta_z],xmm0
not_press_VK_I:
  push VK_K
  call user32.GetAsyncKeyState
  test eax,eax
  je not_press_VK_K
  movss xmm0,[delta_x]
  movss xmm1,[v_x]
  mulss xmm1,[v]
  subss xmm0,xmm1
  movss [delta_x],xmm0
  // movss xmm0,[delta_y]
  // movss xmm1,[v_y]
  // mulss xmm1,[v]
  // subss xmm0,xmm1
  // movss [delta_y],xmm0  movss xmm0,[delta_z]
  movss xmm1,[v_z]
  mulss xmm1,[v]
  subss xmm0,xmm1
  movss [delta_z],xmm0
not_press_VK_K:
  push VK_J
  call user32.GetAsyncKeyState
  test eax,eax
  je not_press_VK_J
  // 左右移动需要动动脑子,delta_x = delta_x + v * v_z,delta_z = delta_z - v * v_x
  movss xmm0,[delta_x]
  movss xmm1,[v_z]
  mulss xmm1,[v]
  addss xmm0,xmm1
  movss [delta_x],xmm0
  movss xmm0,[delta_z]
  movss xmm1,[v_x]
  mulss xmm1,[v]
  subss xmm0,xmm1
  movss [delta_z],xmm0
not_press_VK_J:
  push VK_L
  call user32.GetAsyncKeyState
  test eax,eax
  je not_press_VK_L
  movss xmm0,[delta_x]
  movss xmm1,[v_z]
  mulss xmm1,[v]
  subss xmm0,xmm1
  movss [delta_x],xmm0
  movss xmm0,[delta_z]
  movss xmm1,[v_x]
  mulss xmm1,[v]
  addss xmm0,xmm1
  movss [delta_z],xmm0
not_press_VK_L:
  push VK_P
  call user32.GetAsyncKeyState
  test eax,eax
  je not_press_VK_P
  movss xmm0,[delta_y]
  addss xmm0,[v]
  movss [delta_y],xmm0
not_press_VK_P:
  push VK_OEM_1
  call user32.GetAsyncKeyState
  test eax,eax
  je not_press_VK_OEM_1
  movss xmm0,[delta_y]
  subss xmm0,[v]
  movss [delta_y],xmm0
not_press_VK_OEM_1:
  push VK_OEM_4
  call user32.GetAsyncKeyState
  test eax,eax
  je not_press_VK_OEM_4
  movss xmm0,[v]
  divss xmm0,[v_ratio]
  movss [v],xmm0
not_press_VK_OEM_4:
  push VK_OEM_6
  call user32.GetAsyncKeyState
  test eax,eax
  je not_press_VK_OEM_6
  movss xmm0,[v]
  mulss xmm0,[v_ratio]
  movss [v],xmm0
not_press_VK_OEM_6:
  // 恢复栈平衡
  popf
  pop edx
  pop ecx
  pop eax
  ret

address:
  jmp newmem
return:

[DISABLE]

address:
  db bytes
  // movss [ebp-34],xmm0

dealloc(newmem)
dealloc(delta_x)
dealloc(delta_y)
dealloc(delta_z)
dealloc(v_x)
dealloc(v_y)
dealloc(v_z)
dealloc(v)


这个代码是完全在绘图线程上做的,CE其实还可以支持createthread再建立一个自己的线程,在自己的线程完成移动视角的操作,这样就可以减轻原始线程的负担。


2. GetAsyncKeyState 函数

参考 https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293

判断当这个函数被调用时,某一个按键是否处于按下状态。如果处于按下状态,则返回值的最高位为1(返回值为-32767),通常简单的判断非零即可。

[C++] 纯文本查看 复制代码
SHORT WINAPI GetAsyncKeyState(_In_ int vKey);


他接受一个参数,就是虚拟按键码,Visual C++开发可以直接使用VK_*的常量来表示,这里需要我们自己定义。

3. WIN32 API

直接使用汇编语言调用API其实不是特别难,如果这个DLL已经加载了,那就更简单了,逆序push进去参数,call即可,返回值保存在EAX寄存器

参考 https://www.52pojie.cn/thread-434732-1-1.html

4. 位移速度时间计算,高中数学+物理,这个自行解决吧。

左右移动可能需要一些比如向量的乘法或者行列式之类的东西,不过这里简单的说一下,如下图,就两种情况,试一试就知道了。



5. 题外话:

现在的挂不就是比谁更牛逼嘛,飞天、遁地、穿墙又能怎样?

当你们还在用人体作战,我们已经拥有无人机了。

效果:







这个功能严重影响游戏平衡,请酌情使用!

可谓杀人于无形。

运筹帷幄之中,决胜千里之外。

(上面这句话的引用纯属娱乐,语文考生请勿如此使用)

外挂是百分之一的灵感加上百分之九十九的汗水。

6. 课后练习:

设计一个可以动态改变瞄准镜倍数的外挂。


其他:

1. 有人在回复询问,39.4是怎么找到的?

学习CE最开始肯定是破解CE自带的Tutorial.exe了,CE的第三步就是未知初始值查询。

首先我们不开镜选择Scan Type: Unknown initial value。至于 Value Type,对这个游戏研究一下就会发现他全都用的是 Float 类型,如果实在不知道可以选择 All,

然后就是开镜,Scan Type: Changed value,搜索,Scan Type: Unchanged value,搜索,搜索,搜索。关镜,Scan Type: Changed value,搜索,Scan Type: Unchanged value,搜索,搜索,搜索。如此反复。中间可以夹杂着一下比如 Bigger than ... 1e-9、Smaller than ... 1e9 之类的,把没用的地址去掉。

最后剩下的就是这个数值了。

同理:1.65、1.30、0.76 可以通过同样的方法获取到。

2. 人物颜色那个地址是哪来的?

恕我直言,我不知道怎么获取。

原贴地址: https://www.52pojie.cn/thread-674430-1-1.html

3. 基本上算是结帖了,有什么问题可以我也可以回复,这个游戏真的没什么意思了,到处都是神仙,上天入地满地乱爬的,希望大家也尽量少开挂,本着学习交流的心态去使用辅助工具。

4. 恕我直言,根据以上分析,这个游戏的命中检测肯定实在客户端做的,而且只在打枪的一方做,服务器和被打中的一方没有其他检测。恕我直言这个游戏吃枣药丸。真希望网易尽快解决这个问题。之前也在论坛里看到有人发不用瞄准,随便打,枪枪打中人的动态图,我希望这个功能的外挂我希望还是最好不要放出来。

5. 我已经卸载游戏了,教程不会继续更新了。

6. CE有自带的Trainer,可以将CE存档文件直接生成exe可执行文件

7. 我不会易语言,而且我也不想单独发布外挂,这个教程仅仅是个教程,具体怎么用就看你们自己的了,更何况附件的CE存档文件又不是不能用。

如果想使用其他编程语言编写外挂 可能需要 OpenProcess VirtualAllocEx WriteProcessMemory 等Windows API函数,如果要过检测,还需要Hook住相关的API,易语言可能有相关的模块,这个我不太懂。

8. 我在这方面只是研究了不到一个月,我是靠这个内容申请的吾爱破解账号( https://www.52pojie.cn/thread-686004-1-1.html )。之前只是对计算机其他东西有所了解,对反汇编、代码注入这方面仅仅只有不到一个月的水平。不要向我要联系方式,也不要提是否收徒这种问题,这篇文章是我在这方面研究的全部内容,就算收徒也不会带来其他的知识了。有相关问题可以回帖,在这个帖子凉之前我应该都会回答。私信我我会视情况回复的,如果是常见问题尽量还是在下面回帖提问。

9. 2018年1月26日有人回帖称,已被秒封,请尽可能小心地进行破解。

10. 有其他帖子有制作 Trainer 教程

原贴地址: https://www.52pojie.cn/thread-690777-1-1.html


附件:

附件是我自己的 Cheat Engine 存档文件(密码52pojie.cn)。

hyxd.zip

2.94 KB, 下载次数: 1852, 下载积分: 吾爱币 -1 CB

hyxd_20180121.zip

4.6 KB, 下载次数: 2550, 下载积分: 吾爱币 -1 CB

点评

很详细的教程,感谢楼主  发表于 2018-1-24 09:31
大佬 附件无法下载了,可以上传到云盘吗,另外教程很好,我学了不少东西,嘿嘿  发表于 2018-1-23 00:29
大佬,真牛,写的真的详细。。  发表于 2018-1-22 19:54

免费评分

参与人数 222吾爱币 +235 热心值 +215 收起 理由
jiangjian + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
aiq136 + 1 + 1 我很赞同!
feishicheng + 1 + 1 大佬,佩服
弈剑听雨 + 1 + 1 谢谢@Thanks!
oncemore996 + 1 + 1 用心讨论,共获提升!
一牛神一 + 1 + 1 用心讨论,共获提升!
无痕软件 + 3 + 1 谢谢@Thanks!
BINGIT + 1 + 1 用心讨论,共获提升!
JerryJerry + 1 + 1 我很赞同!
少年与梦 + 1 + 1 用心讨论,共获提升!
bianqi + 1 + 1 我很赞同!
hbwazxf + 1 + 1 技术相当高深的帖子,学习了……
lxf + 1 我很赞同!
Keange_miss + 1 谢谢@Thanks!
ms998784 + 1 + 1 大佬,写的十分详细,让我这种小白受益了。
虚滞 + 1 + 1 谢谢@Thanks!
q小辣 + 1 + 1 看不懂 但是还是赞一个
林小新 + 1 + 1 谢谢@Thanks!
辻堂先生 + 1 我很赞同!
qi01053 + 1 + 1 我很赞同!
大猪说有 + 1 + 1 我很赞同!
405900601 + 1 + 1 提示:现在已经用不了了
99859874 + 1 + 1 虽然我是小白,看不懂,但是膜拜dalao
LseKit + 1 + 1 谢谢@Thanks!
ai979520253 + 1 + 1 学习了,这套教程相当有用
坏掉了 + 1 这东西以后真的别再出了,不管你什么初心.结果都导致大量普通玩家糟心
GaTyz丶 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
夏末知秋 + 1 + 1 膜拜!学到很多
LINJINGMAO + 1 + 1 用心讨论,共获提升!
7892505647 + 1 谢谢@Thanks!
liu66434280 + 1 + 1 太厉害了。大佬!
disikejj + 1 + 1 用心讨论,共获提升!
WSNBB + 1 用心讨论,共获提升!
♂格式囮、 + 1 + 1 谢谢@Thanks!
SeeAua + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
无所谓我养你啊 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Jaydenchan + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
a3228467 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
XhyEax + 2 + 1 我很赞同!
ww957750676 + 1 + 1 无后怎么用
eumenides_ + 1 + 1 很好的一个教程
gwt0354 + 1 + 1 热心回复!
2676856274 + 1 + 1 谢谢@Thanks!
tchivs + 2 + 1 热心回复!
赤魂煌 + 1 + 1 热心回复!
syxxfx + 1 我很赞同!
gongwanlin + 1 我很赞同!
CROW_df + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
Doer + 1 + 1 我很赞同!
SomnusXZY + 1 + 1 热心回复!
hackeydg + 1 + 1 用心讨论,共获提升!
jiahao + 1 + 1 那个说开挂孤儿看好了这是分析贴,你还不如多回家吃点屎,比现在有用多了
305117352 + 1 + 1 铁头的来试试
慕冬 + 1 + 1 不玩这游戏,单纯过来送个分
a425869651 + 1 多开点挂,封死你们这些开挂的孤儿
1244913979 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
冰天雪地君 + 1 + 1 建议提升权限,避免被奸商利用
珺华Swich灬 + 1 + 1 谢谢@Thanks!
a8826603 + 1 + 1 谢谢@Thanks!
最佳配角 + 1 + 1 谢谢@Thanks!
rland + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
QS白 + 1 + 1 我很赞同!
qwe30245868913 + 1 + 1 佩服佩服
13201593650 + 1 + 1 确实强,我想自己用ce去试试
dyb9582 + 1 + 1 我很赞同!
ELLE + 1 + 1 用心讨论,共获提升!
iso9001 + 1 + 1 谢谢@Thanks!
sinceret + 1 + 1 谢谢@Thanks!
610100 + 1 膜拜!
lensong + 1 + 1 这个挂是我用过最最牛B的。。。只是担心被奸商利用
ii丶BigBreast + 2 + 1 我很赞同!
226tiger + 1 + 1 老哥稳
Saber_凛 + 1 + 1 步骤分享的那么细致 厉害了
810086218 + 1 透视的已经上头条了,兄弟 估计你也快了,希望你能持续更新支持一个
小学生黑大帅 + 1 + 1 谢谢@Thanks!
FearBa + 1 + 1 热心回复!
暗黑佟大为 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Vesslan + 1 + 1 热心回复!
cb19989 + 1 + 1 膜拜大佬,写的很详细
dayer + 1 + 1 我很赞同!
从0开始的小小怪 + 1 + 1 谢谢@Thanks!
jixun66 + 3 + 1 上天入地无所不能 666
qq2074319 + 1 + 1 谢谢@Thanks!
f4cku + 1 + 1 我很赞同!
qq6645856 + 1 + 1 你的CE比我的新啊
gamingnow + 1 + 1 用心讨论,共获提升!
若溪风 + 1 + 1 谢谢@Thanks!
Tar_Rasha + 1 + 1 用心讨论,共获提升!
ADCarry丶橙子 + 1 + 1 我很赞同!
zhiyi1120 + 1 + 1 谢谢@Thanks!
tianshiaina001 + 1 + 1 表示搞机械的深深的仰慕
Excuses + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Mmmmmmmorz + 1 + 1 鼓励转贴优秀软件安全工具和文档!
连晋 + 1 + 1 大佬 附件无法下载了,可以上传到云盘吗
qq308518933 + 1 + 1 我很赞同!
wz52pj + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xiaofengzi + 1 + 1 热心回复!
1绝对1 + 1 + 1 谢谢@Thanks!
liaozhen + 1 + 1 热心回复!
DK/F + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 2#
sunshine_昊 发表于 2018-1-29 11:14
过检测才是重点
来自 3#
yangwengu 发表于 2018-2-4 18:59
支持,不过新的版本直接用CE要被检测,建议加隐藏
推荐
L4Nce 发表于 2018-1-18 15:44
期待楼主完整分析(后续)文章,等楼主写完后续之后可以@我,我将对完整的教程进行高亮、加分加精等操作。
推荐
连晋 发表于 2018-1-23 12:28
Ganlv 发表于 2018-1-23 11:32
如果你是来看教程的,根本不需要下载附件,所有涉及的数据、地址、代码文中均有,如果你是来下载外挂的, ...

  已经参考楼主教程 弄出来了 就是   车辆颜色 和 人物颜色 还有 武器颜色 我不知道怎么找 所以才 想看他附件里面是怎么写的  

推荐
xd1225 发表于 2018-1-18 18:13
精彩,辛苦了.虽然我不知道讲了些什么鬼
推荐
snaki 发表于 2018-1-18 17:40
某易....
头像被屏蔽
推荐
zhanyeah 发表于 2018-2-1 23:31
提示: 该帖被管理员或版主屏蔽
推荐
 楼主| Ganlv 发表于 2018-1-28 05:52 来自手机 <
13201593650 发表于 2018-1-28 01:27
[at]楼主,我在自己破解的时候为什么调试器附加到荒野行动进程,游戏就会闪退啊?@Ganlv [/at]

开启设置里的反反调试的那个“避免调试器被发现”的选项。不过我不知道现在还可不可以,可能需要换级别更高的调试器。我不会过检测,这个真不会。
推荐
cosxiaobaitu 发表于 2018-1-22 14:12
某易的仓惶之作,有问题是肯定的,也不知道能修复到什么程度,真心的希望天下无挂
推荐
idon123 发表于 2018-1-21 23:38
楼主居然是这个技术贴申请通过会员的,厉害了
推荐
执子之手丶 发表于 2018-1-18 16:00
学习了,楼主写得很好啊,期待后续的摄像机抬高教程
13#
不良熊 发表于 2018-1-18 17:17
学习了1111111111
14#
a1231564123 发表于 2018-1-18 17:57
望尘莫及。。。。
15#
liuwz8585 发表于 2018-1-18 18:00
膜拜楼主  我什么时候才能向您一样优秀
16#
太阳下的月亮 发表于 2018-1-18 18:01
大佬,期待后续
17#
nyhsjc 发表于 2018-1-18 18:01
学习了,期待后续的摄像机抬高教程。
18#
AnkhSpirit 发表于 2018-1-18 18:01
学习学习,谢谢楼主教程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2019-12-15 09:16

Powered by Discuz!

© 2001-2017 Comsenz Inc.

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