Cheat Engine最强大的地方,莫过于他的内存反汇编功能了,这给我们提供了无限的可能。那么,什么是汇编呢?引用来自互动百科的内容——
汇编程序把汇编语言翻译成机器语言的过程称为汇编。汇编语合中用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。
简单来解释就是,在不考虑组译器的情况下(实际上修改游戏的话也不需要关注这个),可以理解为,我们的CPU在处理程序时所用的低级机器语言就是汇编。
很不幸的是,汇编不愧为低级语言,学习起来极其复杂,我周围连能够看懂汇编的人都寥寥无几,更不要说会用的人了。还好我们并不需要用汇编来写程序,只需要把最常用的几个命令了解即可。所以我的汇编水平也是非常之烂,恐怕还有无数的错误,只能勉强应付一下常用的反汇编修改了。那么我就现学现卖一次好了^_^。
这一次,我们的目标是最近很火热的小游戏《植物大战僵尸》。
进入开始游戏,准备开始修改。
召唤出我们的CE。改钱的步骤太简单了,就不再浪费时间。现在我们已经找到了太阳币的地址,点右键,选择寻找写入这个地址的地址。
回游戏,点个太阳加点钱,然后回来,果然他已经找到了操作码。双击打开额外信息对话框,这里实际上我们可以看到非常多有用的内容,比如说关于太阳币的指针是[eax+00005560]。关于指针修改的内容之前已经讲过了,所以这里不再重复。
不过要注意的话,直接搜索eax的数值,会出来很多个地址,令人难以确定。所以我们可以稍微往上看一行,“mov eax, [esi+04]”这一段操作码,可以看到实际上esi里的地址就是真正的eax,添加指针的时候只要输入10455E40+5560即可。
好了,回正题。
我们右键打开详细的内存区域,来看一下之前找到的那段操作码。好,现在开始准备对他进行自动汇编。点击菜单栏的工具-自动汇编(或者按快捷键Ctrl+A)。
在弹出的对话框中点击模板-脚本注入。现在就会生成图中的内容。add [eax+00005560],ecx就是我刚才点击了一个太阳加钱时的操作码,意思是,给指针[eax+00005560]增加数值ecx。
现在我们简单的修改一下,改成 add [eax+00005560],500。点击执行,提示注入成功。
要注意的是,在这里所有的数值都是16进制的,也就是说500h换算为十进制,实际上是1280。
现在再回游戏点一下太阳,怎么样,钱不是增加了1280。
当然,自动汇编还可以有很多好玩的用处,比如说每造一个向日葵就自动增加50个太阳币之类,只要再原来的地址下面新增一行即可。我懒得继续写下去了,有兴趣可以自行尝试。



直接搜索eax的数值,会出来很多个地址,令人难以确定。所以我们可以稍微往上看一行,“mov eax, [esi+04]”这一段操作码,可以看到实际上esi里的地址就是真正的eax,添加指针的时候只要输入10455E40+5560即可。
这里我怎么也看不懂呢。ESI=1052A610,并不是10455E40,
而且,ESI还要+4呢。怎么就是真正的EAX了呢。QQ464946597请指教啊!
这个可能是因为缺少一些汇编的基础所以才会感到迷茫吧,你可以看看这里
http://www.lolibeta.com/pc/1207.html
关于你的问题,实际上那个是两段汇编代码
mov eax, [esi+04] 意思是把eax里的值改为esi+04这个指针里的值(地址)
然后add [eax+00005560], ecx 意为把内存地址中eax+00005560的值加上刚刚得到的ecx
这样连起来之后就明白了吧。对不起,这确实是因为我的文章写的还不够简单易懂,下次会注意的>_<
教程写的不错,回去慢慢研究。有问题还要向大神请教。
你好,东方口袋战争……还真的没有玩过…………
不过按照你说的情况,原因通常是因为,他可能没有上级的指针了。。。
004057B1 – eb 25 – jmp _getexceptdllinfo+477f
004057B3 – 83 ff 02 – cmp edi,02
004057B6 – 75 0e – jne _getexceptdllinfo+476d
004057B8 – 83 3b 00 – cmp dword ptr [ebx],00
004057BB – 74 1b – je _getexceptdllinfo+477f
004057BD – 8b 03 – mov eax,[ebx]
004057BF – e8 a0 2f 00 00 – call _getexceptdllinfo+770b
004057C4 – eb 12 – jmp _getexceptdllinfo+477f
004057C6 – 83 7b 08 03 – cmp dword ptr [ebx+08],03
004057CA – 75 0c – jne _getexceptdllinfo+477f
004057CC – 83 3b 00 – cmp dword ptr [ebx],00
004057CF – 74 07 – je _getexceptdllinfo+477f
004057D1 – 8b 03 – mov eax,[ebx]
004057D3 – e8 fc ea ff ff – call _getexceptdllinfo+327b
004057D8 – 8b 16 – mov edx,[esi]
004057DA – 89 13 – mov [ebx],edx <–这个是我搜到的成长值
004057DC – 8b 56 04 – mov edx,[esi+04]
004057DF – 89 53 04 – mov [ebx+04],edx
004057E2 – 8b 56 08 – mov edx,[esi+08]
004057E5 – 89 53 08 – mov [ebx+08],edx
004057E8 – 5d – pop ebp
004057E9 – 5f – pop edi
004057EA – 5e – pop esi
004057EB – 5b – pop ebx
004057EC – c3 – ret
唔,这是我对搜索到值的位置进行反汇编前后的一部分代码,对于汇编接近0了解的俺只能是通过CE所给的提示知道我所搜到的值是通过调用子程序获得的,而子程序之前还有一段限定大小的代码,w大能否为俺解释一下这一段,同时求教是否该搜索那个子程序,该如何搜索,拜谢了
^_^!
呃,其实我的汇编知识不比你多多多少啦……看起来了确实是调用了一个子程序,如果是的话我也无能为力了,因为自己也没有确实的接触过这方面内容的修改,非常抱歉>_<
我也改过这个 改过里面的钱和卡属性 就是一开游戏 或者一读档 内存就变 而且好像有时候还搜不到一部分地址 要读档或者 重开 让他变下就能找到。。
w啊 我好像不能像以前那样登录你这了 就是写账号和密码那样 是怎么回事啊?
文章不错,学习过了,继续更新博客啊,期待中。。。。
我菜鸟
我用ce读下 植物大战僵尸内存 一切换到ce就 植物大战僵尸就暂停了 ce是不是就读不出来数据了 怎么让他不暂停
你看你看,
我就是从这位仁兄处知道你的大名滴。。。
他说你可是技术帝喔
http://bbs.emu-zone.org/newbbs/viewthread.php?tid=647682
我要对你碎碎念诺~
我不是要外挂 嘛 。。。
我只是要一个《丝路传说》遍历基址的工具啊。。。
拜托~~
难道你希望你SM你?!
(EmuCheat官方论坛)..开始是在里面看到某人转贵兄的CE教程…现在在用CE 5.4中文版,TUT教程坐到步骤7就懵了..找不着方向了= =然后看了贵兄的 CE自动汇编教程 之后..便豁然开朗。。。终于把步骤7给攻破了- -看到步骤 8: 多级指针:。。。吃饭了,有空继续研究
看了你的教程真的收获很大,但还是有个问题很困惑:自动汇编的结果如何保存或做成修改器,难道每次重开游戏都要重新弄一遍
可以在制作修改器的时候选择添加代码的,你试试看>_<