外挂教程——基址的寻找

Home / Article MrLee 2016-4-12 6740

游戏例一 游戏名:刀剑英雄2

image001

现在当前生命是 273  我们在CE 里查找 273

image002

搜出一大堆 先不管他 我们让 生命 变动一下 被怪打了几下  血变少了

image003

这个时候 我们发现 血 恢复的很快 根本来不及找 这个时候我们可以用 更改过的数值 来查找 *因为 相对于第一次找的 273 的值来说 我们目前的血值  已经改变了.

image004

好了 还是有一大堆 地址. 这个时候我们发现 有一个绿色的地址. 并且 他的值是 当前血的值,并且随之变化. *绿色的地址就是基址,这里面的数值不会因为游戏重开的原因而发生改变. 好了 当前血的基址已经找到了.并且重新打开游戏也不会发生改变.
游戏例二 游戏名:星尘传说 我们还是来找 当前血的基址

image005

当前血的值是 88

image006

在CE 里搜索 88  找出一堆地址  我们让 血的值变化一下

image008

因为 血 的值恢复的很慢 所以 我们可以直接输入 当前血的值 来寻找.

image009

剩下一个,但是 这个地址 并不是基址 (基址在CE中是绿色的)  也就是说 下次游戏启动后这个地址就不是当前血的地址了.所以我们需要找出他的基址.

image010

添加进去后  我们 右键点击 选择  查找写入改地址的代码 然后  我们在游戏里  把血 的值 变动下,(找个怪打2下) 然后切换到CE一看 发现 列表里出现2个地址

image011


到底2个谁是我们要找的呢? 我们先打开第一个 双击 一下 第一个地址

image013


这里的代码 是 mov [ecx],edx @  mov  通用数据传送指令
说明:1.MOV OPRD1,OPRD OPRD1 为目的操作数,可以是寄存器、存储器、累加器. OPRD2 为源操作数,可以是寄存器、存储器、累加器和立即数. @    2. MOV 指令以分为以下四种情况: <1> 寄存器与寄存器之间的数据传送指令 <2> 立即数到通用寄存器数据传送指令 <3> 寄存器与存储器之间的数据传送指令 <4> 立即数到存储器的数据传送 图中的汇编指令 就是 把 edx 的值 传入到  [ecx]  这里去.
*  [ecx]  [ ]  这个括号 在汇编里 表示 指针 的意思  指针的意思后面再讲.

image014


这个是第二行的代码 mov [ecx+4a0],eax 代码的意思 就是  把 EAX 的值 放入  ECX+4A0  这个地址中去 .EAX=55  转换成10进制=85 跟我们刚刚找 的 血值很像  ,为什么不是刚刚 我们第二次搜的值呢  , 因为血的值 在这段时间内已经恢复了一点. 这个就是我们要找的偏移  [ecx+4a0] 在 mov [ecx+4a0],eax  这个代码里 我们知道 EAX 就是当前血的值,那么[ECX+4A0]  就是 血的地址.  而这个代码的意思就是 把 当前血的值 放入 这个存放当前血的地址 里面去.  这里的 地址是 [ecx+4a0] 但是我们发现 重进游戏后  ECX的值也是会变的! 看来还得找 ECX的值

image015


* 不要忘记勾上 HEX  因为 ECX的值 是16进制的 找到 5个值 好了 全部选上  这次 我们用 查找访问该地址的代码 来寻找 * 这里为什么要用 查找访问该地址的代码 而不是用 写入 ?  因为 这里的值 再不重启游戏的情况下 是不会发生改变的 ,  而 当我们 人物血值发生改变的时候 游戏会先 访问 并 读取 这个偏移地址 然后找到  当前血值存放的地址 来更新 当前的血. 所以 按照这个思路 我们就可以认为  当去血的时候 CE的监视列表里如果出现 代码  那就表明 在 血值改变过程中 访问了这个代码. 每一个都 粗略的找一次  发现 后面2个 无论怎么操作 都没有出现代码 .所以我们放弃,现在剩下3个 我们先来 看第一个  列表里的 代码很多 .  我们来去掉一点血.  仔细看列表 我们会发现在 掉血的过程中 列表的代码 会增加  这表明 掉血的时候 读取了这个地址~ 再来看看 第二个  在血 减少的过程中  并没有 代码 增加 . 第三个 也是一样. 我们来看下 第一个  我们发现 他的偏移 都是 [ * +64]

image017


哪一个 是我们要找的呢? *其实 基本上来说  任何  一个 都是可以的 有些时候 基址并不只有一个~ 所以 我们只需要找 偏移 最少的一个 就可以了 我们先拿第一个来看 ~

image018


mov esi,[eax+64] P:我们 刚刚找的 090BE268  这个数值  到底 是ESI 还是 [EAX+64]? 我们说了 在 mov esi,eax 中  前面的表示 被存入的寄存器  而后面的 就是值了. 所以 我们这里 搜索的是 090BE268 这个值 也就是 [EAX+64]= 090BE268 *这里 初学者 可能会迷茫 , 不过 只要多 找几个不同的游戏 然后就会明白了. 然后 我们需要找 EAX 的地址 这里 我们又发现一个问题  在
mov esi,[eax+64]  上面的那行代码是 mov eax,[007c1b90]
我们上面说到 我们需要找 到 EAX的值 ,而汇编代码 是从上面开始一行一行往下面运行的,所以上面的EAX就是我们要找的数值  EAX=[007c1b90] 这里 的 [007c1b90]  就是基址了.  因为这里已经是 一个 明确的数值 了. 我们来整理一下 :
[ecx+4a0] ECX=[EAX +64] EAX= [007c1b90] ========================
[[[007c1b90]+64]+4a0]
这个就是 血的 基址+偏移  我们来试试

image019


呵呵 88 就是当前血的 地址. 而且 重新进游戏也可以正常显示. 这里已经告一段落了 如果你细心的话 会发现 在第二步中 监视 地址 090BE268 的过程中 会出现 很多 [* +64]  的偏移 在这里 我们来试试另外一个

image020


mov ecx,[edi+64]
这里 我们看看 附近  并没有  往EDI写入的 代码  所以我们直接搜索 EDI的值 (不要忘了勾上HEX)

image021


出现一个绿色的地址 , 上面我们说了  绿色的就是基址了. 这个值跟 我们 上面找的 是一样的. 这个时候 我发现又一个 不同的.

image022


这里的 ECX=90BE268  这个是不是有点眼熟?  其实就是我们上面 第二步搜的那个值.呵呵 如果你在去搜的话 就是绕圈子了 . 好了 这次教程到此结束~

本文链接:https://www.it72.com/9103.htm

推荐阅读
最新回复 (0)
返回