游戏例一 游戏名:刀剑英雄2
游戏例二 游戏名:星尘传说 我们还是来找 当前血的基址
到底2个谁是我们要找的呢? 我们先打开第一个 双击 一下 第一个地址
这里的代码 是 mov [ecx],edx @ mov 通用数据传送指令
说明:1.MOV OPRD1,OPRD OPRD1 为目的操作数,可以是寄存器、存储器、累加器. OPRD2 为源操作数,可以是寄存器、存储器、累加器和立即数. @ 2. MOV 指令以分为以下四种情况: <1> 寄存器与寄存器之间的数据传送指令 <2> 立即数到通用寄存器数据传送指令 <3> 寄存器与存储器之间的数据传送指令 <4> 立即数到存储器的数据传送 图中的汇编指令 就是 把 edx 的值 传入到 [ecx] 这里去.
* [ecx] [ ] 这个括号 在汇编里 表示 指针 的意思 指针的意思后面再讲.
这个是第二行的代码 mov [ecx+4a0],eax 代码的意思 就是 把 EAX 的值 放入 ECX+4A0 这个地址中去 .EAX=55 转换成10进制=85 跟我们刚刚找 的 血值很像 ,为什么不是刚刚 我们第二次搜的值呢 , 因为血的值 在这段时间内已经恢复了一点. 这个就是我们要找的偏移 [ecx+4a0] 在 mov [ecx+4a0],eax 这个代码里 我们知道 EAX 就是当前血的值,那么[ECX+4A0] 就是 血的地址. 而这个代码的意思就是 把 当前血的值 放入 这个存放当前血的地址 里面去. 这里的 地址是 [ecx+4a0] 但是我们发现 重进游戏后 ECX的值也是会变的! 看来还得找 ECX的值
* 不要忘记勾上 HEX 因为 ECX的值 是16进制的 找到 5个值 好了 全部选上 这次 我们用 查找访问该地址的代码 来寻找 * 这里为什么要用 查找访问该地址的代码 而不是用 写入 ? 因为 这里的值 再不重启游戏的情况下 是不会发生改变的 , 而 当我们 人物血值发生改变的时候 游戏会先 访问 并 读取 这个偏移地址 然后找到 当前血值存放的地址 来更新 当前的血. 所以 按照这个思路 我们就可以认为 当去血的时候 CE的监视列表里如果出现 代码 那就表明 在 血值改变过程中 访问了这个代码. 每一个都 粗略的找一次 发现 后面2个 无论怎么操作 都没有出现代码 .所以我们放弃,现在剩下3个 我们先来 看第一个 列表里的 代码很多 . 我们来去掉一点血. 仔细看列表 我们会发现在 掉血的过程中 列表的代码 会增加 这表明 掉血的时候 读取了这个地址~ 再来看看 第二个 在血 减少的过程中 并没有 代码 增加 . 第三个 也是一样. 我们来看下 第一个 我们发现 他的偏移 都是 [ * +64]
哪一个 是我们要找的呢? *其实 基本上来说 任何 一个 都是可以的 有些时候 基址并不只有一个~ 所以 我们只需要找 偏移 最少的一个 就可以了 我们先拿第一个来看 ~
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]
这个就是 血的 基址+偏移 我们来试试
呵呵 88 就是当前血的 地址. 而且 重新进游戏也可以正常显示. 这里已经告一段落了 如果你细心的话 会发现 在第二步中 监视 地址 090BE268 的过程中 会出现 很多 [* +64] 的偏移 在这里 我们来试试另外一个
mov ecx,[edi+64]
这里 我们看看 附近 并没有 往EDI写入的 代码 所以我们直接搜索 EDI的值 (不要忘了勾上HEX)
出现一个绿色的地址 , 上面我们说了 绿色的就是基址了. 这个值跟 我们 上面找的 是一样的. 这个时候 我发现又一个 不同的.
这里的 ECX=90BE268 这个是不是有点眼熟? 其实就是我们上面 第二步搜的那个值.呵呵 如果你在去搜的话 就是绕圈子了 . 好了 这次教程到此结束~
游戏例二 游戏名:星尘传说 我们还是来找 当前血的基址
到底2个谁是我们要找的呢? 我们先打开第一个 双击 一下 第一个地址
这里的代码 是 mov [ecx],edx @ mov 通用数据传送指令
说明:1.MOV OPRD1,OPRD OPRD1 为目的操作数,可以是寄存器、存储器、累加器. OPRD2 为源操作数,可以是寄存器、存储器、累加器和立即数. @ 2. MOV 指令以分为以下四种情况: <1> 寄存器与寄存器之间的数据传送指令 <2> 立即数到通用寄存器数据传送指令 <3> 寄存器与存储器之间的数据传送指令 <4> 立即数到存储器的数据传送 图中的汇编指令 就是 把 edx 的值 传入到 [ecx] 这里去.
* [ecx] [ ] 这个括号 在汇编里 表示 指针 的意思 指针的意思后面再讲.
这个是第二行的代码 mov [ecx+4a0],eax 代码的意思 就是 把 EAX 的值 放入 ECX+4A0 这个地址中去 .EAX=55 转换成10进制=85 跟我们刚刚找 的 血值很像 ,为什么不是刚刚 我们第二次搜的值呢 , 因为血的值 在这段时间内已经恢复了一点. 这个就是我们要找的偏移 [ecx+4a0] 在 mov [ecx+4a0],eax 这个代码里 我们知道 EAX 就是当前血的值,那么[ECX+4A0] 就是 血的地址. 而这个代码的意思就是 把 当前血的值 放入 这个存放当前血的地址 里面去. 这里的 地址是 [ecx+4a0] 但是我们发现 重进游戏后 ECX的值也是会变的! 看来还得找 ECX的值
* 不要忘记勾上 HEX 因为 ECX的值 是16进制的 找到 5个值 好了 全部选上 这次 我们用 查找访问该地址的代码 来寻找 * 这里为什么要用 查找访问该地址的代码 而不是用 写入 ? 因为 这里的值 再不重启游戏的情况下 是不会发生改变的 , 而 当我们 人物血值发生改变的时候 游戏会先 访问 并 读取 这个偏移地址 然后找到 当前血值存放的地址 来更新 当前的血. 所以 按照这个思路 我们就可以认为 当去血的时候 CE的监视列表里如果出现 代码 那就表明 在 血值改变过程中 访问了这个代码. 每一个都 粗略的找一次 发现 后面2个 无论怎么操作 都没有出现代码 .所以我们放弃,现在剩下3个 我们先来 看第一个 列表里的 代码很多 . 我们来去掉一点血. 仔细看列表 我们会发现在 掉血的过程中 列表的代码 会增加 这表明 掉血的时候 读取了这个地址~ 再来看看 第二个 在血 减少的过程中 并没有 代码 增加 . 第三个 也是一样. 我们来看下 第一个 我们发现 他的偏移 都是 [ * +64]
哪一个 是我们要找的呢? *其实 基本上来说 任何 一个 都是可以的 有些时候 基址并不只有一个~ 所以 我们只需要找 偏移 最少的一个 就可以了 我们先拿第一个来看 ~
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]
这个就是 血的 基址+偏移 我们来试试
呵呵 88 就是当前血的 地址. 而且 重新进游戏也可以正常显示. 这里已经告一段落了 如果你细心的话 会发现 在第二步中 监视 地址 090BE268 的过程中 会出现 很多 [* +64] 的偏移 在这里 我们来试试另外一个
mov ecx,[edi+64]
这里 我们看看 附近 并没有 往EDI写入的 代码 所以我们直接搜索 EDI的值 (不要忘了勾上HEX)
出现一个绿色的地址 , 上面我们说了 绿色的就是基址了. 这个值跟 我们 上面找的 是一样的. 这个时候 我发现又一个 不同的.
这里的 ECX=90BE268 这个是不是有点眼熟? 其实就是我们上面 第二步搜的那个值.呵呵 如果你在去搜的话 就是绕圈子了 . 好了 这次教程到此结束~
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2300
- 用户1336
- 访客10859399
每日一句
True success inspires others to act.
真正的成功是激励他人行动。
真正的成功是激励他人行动。
语法错误: 意外的令牌“标识符”
全面理解Gradle - 定义Task
Motrix全能下载工具 (支持 BT / 磁力链 / 百度网盘)
谷歌Pixel正在开始起飞?
获取ElementUI Table排序后的数据
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
亲测!虚拟机VirtualBox安装MAC OS 10.12图文教程
华为手机app闪退重启界面清空log日志问题
android ndk开发之asm/page.h: not found
手机屏幕碎了怎么备份操作?
免ROOT实现模拟点击任意位置
新手必看修改DSDT教程
thinkpad t470p装黑苹果系统10.13.2
新会员