ce6.5.11怎么用

CE傻瓜教程一_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
CE傻瓜教程一
上传于||文档简介
&&Cheat Engine
CE傻瓜教程一
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩42页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢后使用快捷导航没有帐号?
查看: 1031|回复: 9
最后登录QQ注册时间阅读权限20精华0积分2110帖子
领先者, 积分 2110, 距离下一级还需 390 积分
本帖最后由 ?韩雨轩 于
19:27 编辑
如题。我飞车121、电信区、求一情侣、要3岁以下的这样有飞车内容了吧。
[img=160,134]http://b173.photo./psb?/V12A20Dl3H3J8L/4e3yfi27tLdSskvKVKQDwjjzsBs6n59ay5aU
最后登录QQ注册时间阅读权限20精华0积分1318帖子
领先者, 积分 1318, 距离下一级还需 1182 积分
字太少了。
我曾丧心病狂过。[/c
最后登录注册时间阅读权限200精华0积分311815帖子
闪电车神 , 积分 311815, 距离下一级还需 88185 积分
这样的内容与飞车无关哦
趁版版还没进来修改一下哈
最后登录注册时间阅读权限20精华0积分3705帖子
猎豹先锋, 积分 3705, 距离下一级还需 1295 积分
你好,百度+迅雷欢迎你
最后登录注册时间阅读权限200精华1260积分636660帖子
一人为单 二人为伴
首先 ,现在的悬赏是以活动的形式发表 ,或者文字150以上 ,
其次 ,楼主的帖子有点水 ,没有飞车内容 ,
所以楼主还是配合修改下帖子哈。
最后登录注册时间阅读权限200精华0积分220807帖子
风速车神, 积分 220807, 距离下一级还需 29193 积分
先留名& && &
最后登录注册时间阅读权限200精华0积分311815帖子
闪电车神 , 积分 311815, 距离下一级还需 88185 积分
标题麻烦修改一下哈
祝你早日找到呢
最后登录注册时间阅读权限200精华0积分464640帖子
   今天没吃药  感觉自己萌萌哒 
  (? ??)
雷霆车神, 积分 464640, 距离下一级还需 135360 积分
年龄要求太大了
最后登录QQ注册时间阅读权限20精华0积分2110帖子
领先者, 积分 2110, 距离下一级还需 390 积分
豆mm  ﹌ 发表于
年龄要求太大了
一般一般为了添加点飞车内容而已
[img=160,134]http://b173.photo./psb?/V12A20Dl3H3J8L/4e3yfi27tLdSskvKVKQDwjjzsBs6n59ay5aU
最后登录QQ注册时间阅读权限20精华0积分2110帖子
领先者, 积分 2110, 距离下一级还需 390 积分
没人有CE修改器吗?
[img=160,134]http://b173.photo./psb?/V12A20Dl3H3J8L/4e3yfi27tLdSskvKVKQDwjjzsBs6n59ay5aU
长期对论坛的繁荣而不断努力、在线时间较长的会员
为论坛做出突出贡献的会员
在版面经常回帖帮助版友解决问题
Powered by无毒、无插件的单机游戏下载网站
您的位置:
→ CE修改器6.1 中文汉化版 评论
【游戏介绍】
本补丁为 CE修改器6.1中文汉化版。
Cheat Engine 的作者最新放出 6.1&版的 CE,与 6.0 最大的区别就是添加了修改器制作工具,甚至比之前就是添加了修改器制作工具,甚至比之前&nb
游戏大小:6.2M‖点亮‖CE全方位教程及CE6.2中文新版下载(图文) _ 脚本制作教程 - 按键精灵论坛
腾讯微博:
软件版本:2014.03软件大小:71.2M更新时间:10-25
软件版本:3.1.7软件大小:52.1M更新时间:12-12
软件版本:1.2.4软件大小:29.2M更新时间:10-28
软件版本:1.1.0软件大小:12.3M更新时间:12-29
查看: 18999|回复: 312
按键精灵开发者1级可通过提升认证等级来升级勋章:
本帖最后由 qwe231 于
13:34 编辑 CE是什么?Cheat Engine它允许你修改你的游戏,所以你将得到其他人没有的功能。它包括16进制程序,内存查找工具。与同类相比,它具有强大的反汇编功能,且自身附带了制作工具,可以用它直接生成修改器。修改内存?这里可能就有人不明白了。内存还能修改?我可以非常清楚的告诉你不全是,内存修改可以有很多功能达到,但他不能像外挂一样什么都可以修改,只可以修改一些本地运算的内存,像单机,可以比喻他是独立的,并没有服务器,所以非常好修改,而网游就不一样了,他是有服务器运算的有的加密进行运算,所以说如果网游修改量力而行。忘说了,网游CE修改至少可以修改成所谓的”自慰“ 说这么多应该有所了解了吧!学好CE修改可能会对脚本有非常大的帮助,可以了解原理,做成修改器可以做出一些自慰的功能,辅助的功能(自己想吧,真心强大)CE6.2 新增D3D_HOOK(CF方块透视原理)这个是目前ce的最新版本,支持到d3d hook,如图,其实就是cf方块透视的原理。需要向游戏注入一个钩子dll,去hook游戏的得d3d函数,在人物角色初始化的时候,得d3d函数会被调用到,不过此时的函数已经被调包,并且新增了一个图标进去。就比如cf透视辅助把 每个人的身上都会出现一个小的方块图,这个小的方块图是辅助作者加上去的。(具体我也没试过,不过CF应该可以吧)这样一来,我们就可以看到人物了。所谓透视,其实就是往每个人物图像上 增加一个 自己的图片即可。" ^! p1 \7 T+ }0 |, O2 _% s# r' O不过需要像ce6.2一样去hook 游戏的到d3d函数。+ J9 O4 X9 K& Y0 L0 r! R" l((((((((((2155如今ce6.2也实现了这个功能。" }3 O4 Y. [3 c/ I: G6 |/ |; B受到这个技术的启发,关于游戏黑屏优化也非常容易搞定。包括隐藏建筑物和穿墙。CE教程一:基本操作 先简单介绍下什么叫CE,CE的全称是Cheat Engine,最新的版本是6.2(作者是 Dark Byte)CE是目前最优秀的游戏修改器,不是之一,这个工具绝对值得你去学习(只要花一点时间就够了)。忘记金山游侠,GM8,FPE之类的修改工具的吧,CE会让你爱不释手。一、先下载CE6.2,这个汉化版相当不错哦(不需要安装),推荐各位下载使用。下载地址请移下面二、打开CE目录下的2个文件:三、附加进程(图示):*选择进程的目的就是修改这个进程的内存 为了让大家明白,建议看下面前先打开CE6.2教程工具:Tutorial-i386.exe 6.2可能是英文的看起来不方便,不过没关系,借鉴下面的来使用,慢慢就会了解了。CE教程二:精确数值扫描进入教程第二关,需要扫描的精确数值是100现在开始搜索精确数值 100
数值中输入 100 点击 首次扫描 按钮一般游戏就是4字节,这里不需要改动,默认就好。这次扫描我们得到 59 个结果,里面肯定有我们要找的那个血值,不过好像太多了。(第一次59个结果不是一定的哦,不要死脑筋!)关键一步:回到 Tutorial 点击 打我 按钮,此时血值已有变化了: 我们再输入 96 点击 再次扫描 按钮 结果只剩1个(这就是我们要找的),我们双击此地址将其添加到地址栏:只有1个结果了,这个就是我们要找的内存地址,双击将其加入到地址栏 图示操作: 把 95 改成 1000 点击 确定 按钮 此时教程的 下一步 按钮变成可用闯关成功。操作虽然简单,但是大家需要明白这其实是一个筛选的过程,这样操作就能把地址找出来。本关的小技巧:1、双击下图对应位置可快速更改数值。 2、双击地址可快速将其加入到地址栏 CE傻瓜教程三:未知初始数值第3关的密码是 419482这一关很重要,因为某些游戏中血显示的不是数字而是血条,这样的话教程2中的方法就失效了。本关就你要教会你如何修改这些讨厌的未知数此时点击 新扫描 然后选择 未知初始数值点击 首次扫描 然后出现了肯定是N多的结果,因为太多了,CE没有显示出来。老办法,回到 Tutorial ,点击打我,CE会告诉你血量减了多少,比如-1这里面我们换个思路,假设CE没告诉我减少了多少或者我根本没看清,这时应该怎么办呢?注意看下面的操作一、扫描减少的数值下拉框,选择减少了的数值,按再次扫描(此时血量减少了)二、扫描不变的数值然后选择 没变动的数值(此时血量没有变化) 三、反复操作再回到Tutorial ,点击 打我 => 扫描减少了的数值 => 扫描没变动的数值 反复操作,最后就会只剩14个地址四、简单判断简单判断下(Tutorial中告诉你了这个数值是小于500的),很容易就找到了最终的地址。 双击把地址加到地址栏,然后更改数值为5000,就可以过关了(前面教程有说过,这里就不再重复了)闯关成功。大家一定要明白这样操作的思路:血量减少=>CE搜索减少的数值血量不变=>CE搜索不变的数值血量增加=>CE搜索增加的数值 这样反复筛减,就能很容易找到最终的结果。 CE傻瓜教程四:浮点数第4关的密码是 890124这一关的操作和前面和基本相同,主要是介绍一下什么浮点数:浮点数就是带小数点的数字如何扫描呢:1、首先将数值类型改成 浮点数。2、浮点数扫描时不必输入后的小数 94.444 扫描时输入94就可以了其它的操作和前面的基本相同。大家也注意到了(上图),浮点数也分为2种:1、浮点数 也叫单精度浮点数 英文是Single Float2、双浮点数 也叫双精度浮点数 英文是Double Float
这里面要强调的是:浮点数的长度是4字节,使用4字节也可搜索到浮点数,但需要使用模糊搜索。下图: 双浮点数的长度是8字节,使用8字节也可搜索到浮点数,但需要使用模糊搜索小技巧:1、双击图中红圈处可快速更改数值类型。 2、浮点数在4字节中大多以11开头。 现在好多游戏都采用浮点数来处理,比如疯狂农场中的时间。例如您在扫描游戏时发现一个数值是
这时候您就要想到它是浮点数。4字节的
= 浮点数的 100目前的游戏大多以4字节(含浮点数)为主,双浮点数大家知道就行了。将 血 和 子弹 都改成 5000 就可进入下一关,操作和第二关基本相同。 CE傻瓜教程五:寻找代码本关密码:密码=888899前面的教程已经教会你内存的基本搜索方法。本关有点特别:本关的目的就是要让改变数值的按钮失效,很神奇,但是有什么用呢?1、在游戏中我们可以利用此功能使金钱数量不会发生变化。2、可以利用此功能让怪物攻击失效,从而实现无敌的效果。3、让弹药不会减少,从而实现无限弹药的效果好处太多了,本关的方法就可以轻松实现上面的功能。先找到血量的内存地址,不会找的先去看前面几关,这里就不重复了,然后 在地址上 右键=>找出是什么改写了这个地址:点击确定弹出一个小窗口然后点击教程中的 改变数值 按钮小窗口中会出现一行代码,选中代码,然后点击替换最后一步:直接按确定就可以然后回到 按改变数值的按钮,你会发现按钮已经没有用了。本关操作已经结束了操作非常简单,但是为什么这样就会使按钮的功能失效:改变数值按钮其实是通过 代码 0045aecb - 89 10 - mov [eax],edx 来实现数值改变的。我们在的最后一步操作就是要把这行代码替换成什么也不做(英文是 Nop),这样就会让按钮的功能失效。大家可以找一些小的游戏改一改,试试这种方法究竟好不好使。CE傻瓜教程六:指针 第六关的密码是 098712
这一关是相当重要的一关,请各位务必要学会找指针的方法。为什么要找指针,在前面的教程中,如果各位细心观察的话就会发现 在我截图中的出现地址和你的地址并不相同。也就是说,这些地址是一直在变化的,我们把它叫做动态地址。问题:电脑是如何每次都知道这个动态地址究竟是多少的?其实并不是所有的地址都会变化的,不会变化的地址,我们把它叫做基址。实现思路:用不变的地址定位会变化的地址,即用基址定位动态地址。上面介绍了2个简单的概念,现在开始我们的具体操作 首先找到血量的地址,加入到地址栏,然后在地址上按 右键=>找出是什么改写了这个地址,然后点击 改变数值 按钮,出现一行代码(见),双击那行代码(或者点击详细信息)然后出现一个信息框,具体的代码是什么意思就不解释了,CE会告诉你下一步该做什么,图:CE让我们下一步找 01da6d48(在你电脑显示可能不是这个地址,因为它是动态地址),继续操作:回到CE,点击新扫描,先勾上HEX,点击首次扫描一定要勾上HEX,否则CE在搜索16进制字母时会报错。搜索结果出来了:这个地址 460c34 显示的是 绿色 的,你的电脑上也应该是这个地址,因为它就是基址。记住:在CE中显示绿色的地址是基址,黑色的地址是动态地址添加指针:点击 手动添加地址图示操作,输入 460c34 然后点击确定注意看:指针在地址栏显示的是 p-> 地址 这种类型的我们将数值改成5000,再点击前面的锁定然后点击 Tutorial 中的 改变指针 按钮,这关就可以过了。 注意前面一个概念没有说明,添加指针的时候出现,就是偏移,这个指针的偏移就是 0。 也有不是0的情况,大家可以对着教程实战一下这一关相当重要,大家一定要多多练习(学会前六关,你已经可以修改大部分的游戏了)小说明:1、并不是所有的游戏都要找基址然后做指针,有的游戏直接就是基址。2、基址是绿色的,如果找到最后有多个绿色地址,在一般情况下选择第1个。最后介绍下CE中的模块地址:双击基址您会发现显示的竟然是 Tutorial.exe+60C34 而不是
00460c34 这是为什么呢?其实 Tutorial.exe+60C34 就等于 00460c34 一般来说游戏在电脑中申请的地址是从开始的,Tutorial.exe代表的就是
然后加上 60c34 自然就等于
00460c34。但是在某些情况下游戏的起始地址并不是从开始的,或者说每次启动申请的地址都不相同;那么就不能用 00460c34 来添加指针了,真正科学添加指针的方法是:CE傻瓜教程七:代码注入第七关的密码是 013370从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。看看教程让我们做什么:原来每按一次按钮减少1点血,改成每按一次按钮增加2点血。还记得第5关的不伤血的修改方法吗?这一关就是第5关的加强版。查找血量的地址,然后再地址上 右键=> 查找写入的地址然后按一下打我按钮,会出现一行汇编代码
- ff 8b 10 03 00 00 - dec [ebx+]双击那行代码,看下详细信息:这行代码什么意思呢?dec 大家都知道是英文减少的意思图示红框处:EBX=01e0ee18我们用计算器算一下(注意是16进制的)01e0ee18 + 310
= 01E0F128 正好是血量的地址。dec [ebx+] = dec [01E0F128] 够清楚了吧,这就是让血量减1的代码(1省略了),其实CE中也有提示 Decrement by 1 。明白了这行代码的意思,我们回去看看Tutorial的要求:把减1改成加2。继续操作。选择反汇编程序点击工具,选择自动汇编 第一步选择作弊框架代码 第二步选择代码注入 对应的地址不要搞错了,是 然后按确定,会自动生成汇编代码,这些代码是什么意思,我们先不管,找到关键的一行:dec [ebx+] 把代码注释掉(删除也行),改成 add [ebx+ 保存即可,然后在地址栏就可以看到这个脚本了,点击前面的 单选框 执行,然后点击Tutorial中的打我,这关就可以过了。你感觉到他的神奇了吗?逆天级的修改:1、怪物每次打我从伤血变成加血。2、子弹越打越多。3、钱越花越多。如果你学会了这一关,你已经脱离菜鸟的行列了,不要再提金山游侠,FPE,GM8之类的修改工具了,告诉你们的朋友快来学习CE吧。最后,再强调一下CE中的模块地址:在第6关的后面有提到过CE的模块地址,我说过这是科学的添加方法。这一关也同样适用,就是在代码注入的时候。 变成了 Tutorial.exe+5A063 注入的时候也应该是小技巧:这种方法并不是百试百灵的,对于某些变态的游戏可能并不好使。如何判断这种方法是否有效呢?很简单:在上面选中 显示模块地址 后,如果
变成了 Tutorial.exe+5A063 说明这种方法好使。反之如果
则说明这种方法失效了。至于为什么,你以后会明白。学会此关,您已经可以对付绝大部分的游戏了。但这仅仅开始,CE比您想像中的还要强大。CE傻瓜教程八:多级指针 这关是第6关的加强版,CE 5.6.1教程中的4级指针比5.4的要简单些。多级指针就像玩解谜游戏一样,谜团不只一个,盒子中还有盒子。这里面是4级指针,游戏中也有比如8级指针,12级指针等等,思路都是一样的。查找一级指针:找到血量地址 01E13B3C (动态地址),然后右键 => 查找写入然后点击改变 数值按钮
出现代码的详细信息。 这个该怎么看呢?EBX = 01E13B24 EBX + 18 =
01E13B3C 就是血量的地址,也就是说。想找到血量的地址就要找到EBX(01E13B24 ),注意看了图中一行字:要查找地址的指针的可能值是 01E13B24 如果您觉得分析太麻烦,就按CE的建议来,这里面要提醒各位注意 可能 这个词,也就是说不一定全对。第6关也提到过偏移的概念。这里面的一级偏移是 18查找二级指针:下面找EBX,勾上HEX(16进制),输入 01E13B24 新扫描。然后把新地址 01E136D4 添加到地址栏,在地址上右键=>选择 查找访问的地址。一定要注意:这里面和上面的操作不同,第一次是查找写入的地址,这次选择的是查找访问的地址。 如果没有出现代码信息。我们就到 Tutorial 中点击一下 改变数值 按钮 这里分析和上面一样的,直接看CE的建议就好了。二级偏移是 0查找三级指针:再搜索
01E136D4 得到 01E12414在地址01E12414上 右键=>选择 查找访问的地址如果没有出现代码信息。我们就到 Tutorial 中点击一下 改变数值 按钮 三级偏移是 14 查找四级指针:重复操作(和前面一样,该找什么CE会告诉你的) 4级偏移是 c再查找 1e12f64 得到一个绿色地址,这就是最终结果了。 一定要记住:在CE中显示绿色的地址是基址,黑色的是动态地址。如果有多个绿色地址,一般情况下我们选择第一个。最后添加指针点击手动添加地址
如下操作 输入基址和偏移: 这样输入才完全对(第6关和第7关有提到模块地址的概念):然后把数值改成5000,点击前面的锁定,再点击 Tutorial 改变指针按钮,这关就可以过了。多级指针要注意的地方:1、1级指针是 查找写入,其余全是 查找访问。2、绿色的地址是基址,黑色是动态地址。3、添加指针时注意用模块地址。指针是由基址在偏移组成的,所以在教程中我们只要找到4个偏移和1个基址就可以了。计算机系统自带隐藏功能:您所在的用户组无法下载或查看附件转科学型然后就出现您所在的用户组无法下载或查看附件图标,选择 高级选项您所在的用户组无法下载或查看附件图示选择您所在的用户组无法下载或查看附件具体的不说明了,就和按键小精灵差不多可以自己设置界面也可以生成一个热键启动的功能键。以下是由浅入深学习游戏修改(十课)***** 该内容需您才可浏览 *****
附件:您需要才可以下载或查看附件。没有帐号?
不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅
按键精灵开发者1级可通过提升认证等级来升级勋章:
本帖最后由 qwe231 于
20:54 编辑
CE解说教程②(推荐):[p=25, null, left]Cheat Engine 6.2 Download:
(压缩包 6.9 MB,中文绿色版,解压即可使用,汉化版本1.0.1)[p=25, null, left]Cheat Engine 6.1 Download:[p=25, null, left]
(压缩包 6.22 MB,绿色版,解压便可以使用,无需再设置,汉化版本 1.0.1)[p=25, null, left]
(压缩包 6.22 MB,绿色版中英文版,解压后请查看中文说明设置后使用,汉化版本 1.0.1) [p=25, null, left]
(安装包 6.30 MB,汉化版本 1.0.1)[p=25, null, left]
(云端版 4.39 MB,方便使用云端的朋友下载导入,无需再设置,汉化版本 1.0.1)[p=25, null, left]Cheat Engine 6.0 Download:[p=25, null, left]
(支持64位计算机系统,官方原版安装包)[p=25, null, left]Cheat Engine 5.6.1 Download:[p=25, null, left]
(压缩包 2.96M ,无需安装,解压即可使用,汉化版本 1.1.9) [p=25, null, left]
(安装包 4.69M ,汉化版本 1.1.9) [p=25, null, left]
(压缩包 1.21M ,解压覆盖原文件即可,适合已下载前版本汉化包的用户升级更新,汉化版本 1.1.9)[p=25, null, left]Cheat Engine 5.6 Download:[p=25, null, left]
(压缩包 2.30M ,无需安装,解压即可使用,汉化版本 1.1.2)[p=25, null, left]
(压缩包 1.02M,解压覆盖原文件即可,已下载前一版汉化的网友适用)[p=25, null, left]Cheat Engine 5.5 Download:[p=25, null, left]
(压缩包 2.73M ,无需安装,解压即可使用,汉化版本 1.0.5,停止更新)[p=25, null, left]Cheat Engine Others Download:[p=25, null, left]
[p=25, null, left]
[p=25, null, left]
Cheat Engine 6.0
以前用到的 (通常各种游戏会自动安装该文件,如缺少,请下载拷贝至系统文件夹下,如: WinXp 的 System32 文件夹)
不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅
按键精灵开发者1级可通过提升认证等级来升级勋章:
本帖最后由 qwe231 于
13:43 编辑 【共用代码~分辨自己与敌方单位】共用代码~分辨自己与敌方单位: (PW=)这一步骤将会解释如何处理游戏中的共用代码, 这种代码是通用在除了自己以外的其他同类型对像上常常你在修改游戏的时候, 你找到了一个单位的HP, 或是你自己角色的HP, 你会发现一种情况: 如果你把HP相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了.在这种情况下, 你必须想办法区分自己与敌人.有时候很简单, 你只要检查最前面的4个字节(函数指针表), 它通常指向一个独一无二的地址, 代表着游戏玩家角色.而有的时候它是一个团体号码, 或者也可能是一个指针, 它指向另一个指针, 该址针又指向下一个指针,搞不好还指向下下一个指针, 最后指向一个玩家名子. 总之完全取决于游戏的复杂度, 以及你的运气(或是人品)最简单的方法是以"找出是什么改写了这个地址"去找出游戏代码, 然后使用"分析数据/结构"的功能去比较两种结构. (你的单位和敌人的单位)然后看看是不是可以找到一个区分两者的方法.当你找到如何区分你和电脑单位的方法后, 你可以注入一段自动汇编脚本来检查状态, 然后看是要运行游戏的代码还是要做其他的修改. (例如一击必杀)另外, 你还可以用这个方法去创建一般所说的"字节数组"的字串, 它可以用来搜寻并产生一份所有你的单位或是敌人单位的列表在这个教程中, 我已经实做了你将会遇到的最屌爆的游戏.这个游戏有4个玩家. 2个属于你的阵容, 另外两个属于电脑方.你的任务是找到改写HP的代码, 并且修改以至于你可以获得胜利, 但"绝不能"使用锁定HP的方法.完成修改以后, 按下"Restart game and autoplay" (重新开始并自动运行游戏) 来测试你的修改是否正确.提示: HP是单精浮点数(float)提示2: 解法不只一种看解答前请先自己玩一玩这一关其实很简单, 就是教大家用"分析数据/结构"这个功能
不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅
按键精灵开发者1级可通过提升认证等级来升级勋章:
本帖最后由 qwe231 于
13:46 编辑 自动汇编(Auto Assemble)帮助文件 (译)自动汇编(Auto Assemble)帮助文件
译: axdx原文:摘自CheatEngine Help (v6.1)翻译:axdx自动汇编可以让你用写脚本的方式,在不同的地址写入汇编代码。自动汇编可以在”内存浏览”(Memory View)的”工具”(Tools)中找到。有三个特殊命令可以使用:ALLOC,LABEL,以及FULLACCESS。使用LABEL,你可以事先宣告一个名子, 并把它附给一个地址,接下来,你就可以用这个名子代替地址来使用。基本上,ALLOC也是相同的功用,只不过ALLOC还可以分配内存给你。使用方式:LABEL(标签名):让标签名可以被当作一个地址使用。ALLOC(分配的内存标签名, 字节数):使用方式同LABEL,同时分配内存,指向被分配的内存地址。ALLOC(分配的内存标签名, 字节数, 优先考虑的内存区域):同上。DEALLOC(分配的内存标签名):释放使用ALLOC分配的内存空间。不管DEALLOC被放在脚本的什么地方,它永远是最后才被运行,且只在所有脚本分配的空间都被释放的时候,它才会真正地释放内存。只适用在添加到作弊列表中的脚本〈使用在作弊取消时〉。FULLACCESS(地址, 字节数): 使指定的地址,至少所需的字节数,拥有可读、可写、可运行的属性。REGISTERSYMBOL(符号名):将符号名加入到使用者自定义的符号表中。该符号名可以在作弊列表以及内存浏览中,被视为一个地址使用。符号名被使用前必须在脚本中先宣告。UNREGISTERSYMBOL(符号名):从使用者自定义符号表中,删除此符号名。即使符号名不存在,也不会产生错误信息。DEFINE(名子, 任意字符串):将指定的名子取代为任意字符串。INCLUDE(档案名):在此命令的所处位置,包含进另一个自动汇编的脚本档案。LOADBINARY(地址, 档案名):在指定的地址载入一个二进制档案。CREATETHREAD(地址):于目标进程中,在指定的地址创建线程。LOADLIBRARY(档案名):注入指定的DLL到目标进程中。READMEM(地址, 字节数):在此命令的所处位置,复制写入指定的地址的资料。相当于内存复制。GLOBALALLOC(名子, 字节数):分配内存空间,并且注册一个符号名到使用者自定义符号表中。因此可以在作弊列表的另一个脚本中使用该名子。在另一个脚本中,对同一个名子使用GLOBALALLOC,将不会再次分配新的内存,而是使用已经分配过的内存〈或者,如果不存在已经分配的内存,则会分配新的内存〉。ASSERT(地址, 字节数组):检查指定地址的字节数组,是否与给定的字节数组相同。如果不相同,自动汇编脚本将不会运行。AOBSCAN(名子, 字节数组):在内存中搜寻给定的字节数组〈支援通配符〉,并将找到的地址附给指定的名子。如果没有找到地址,自动汇编脚本不会运行。通配符:使用??或*代表未知字节。数值表达方式:一般来说,在自动汇编脚本中,所有的数值都是以十六进制来表示的,不过也有方法可以取代,你可以输入十进制数值,甚至也可以是浮点数值。举例来说,一个十进制数值100可以写成十六进制的64,不过你也可以写成 #100,或是 (int)100。对于浮点数值像是100.1,你可以写成 (float)100.1。对于double双浮点数,你可以写成 (double)100.1。基本示例::jmp nopnopnop:mov [],esimov [esi+80],ebxxor eax,eaxjmp LABEL示例:label(mylabel):jmp nopnopnopmylabel::mov [],esimov [esi+80],ebxxor eax,eaxjmp mylabelALLOC示例:alloc(alloc1,4):jmp nopnopnop:mov [alloc1],esimov [esi+80],ebxxor eax,eaxjmp ALLOC以及LABEL示例:alloc(alloc1,4)label(mylabel):jmp nopnopnopmylabel::mov [alloc1],esimov [esi+80],ebxxor eax,eaxjmp mylabelFULLACCESS示例:FULLACCESS() //通常是只读、不可运行,此行使它可写、可运行:jmp nopnopnop:mov [],esimov [esi+80],ebxxor eax,eaxjmp DEFINE示例:DEFINE(clear_eax,xor eax,eax):clear_eaxREADMEM示例:alloc(x,16)alloc(script,2048)script:mov eax,[x]mov edx,[x+c]retx:readmem() //将地址的内容放至地址X处AOBSCAN示例:aobscan(codestart,8b 4c 24 24 ?? ?? 0c d8 07 00)[ENABLE]codestart+ 0A:db 90
90[DISABLE]codestart+ 0A:jne0054233c//Alt: db 0F 85 7A 01 00 00学习自动汇编最好的方法绝对就是练习。在开始的时候,跟着训练教程,一步步练习,并且运用到游戏上。用的越多,你就可以写得越快越强大。虽然它一开始看起来令人生畏〈像一门编程语言〉,但是如果你对游戏修改抱有认真的态度,自动汇编将会是你最好的新朋友。
不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅
按键精灵开发者1级可通过提升认证等级来升级勋章:
本帖最后由 qwe231 于
13:47 编辑 一、数据传输指令  二、算术运算指令  三、逻辑运算指令  四、串指令  五、程序转移指令  六、伪指令8088 汇编速查手册一、数据传输指令───────────────────────────────────────  它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.  1. 通用数据传送指令.    MOV 传送字或字节.    MOVSX  先符号扩展,再传送.    MOVZX  先零扩展,再传送.    PUSH  把字压入堆栈.    POP   把字弹出堆栈.    PUSHA  把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.    POPA  把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.    PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.    POPAD  把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.    BSWAP  交换32位寄存器里字节的顺序    XCHG  交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)    CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )    XADD  先交换再累加.( 结果在第一个操作数里 )    XLAT  字节查表转换.        ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即        0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )  2. 输入输出端口传送指令.    IN   I/O端口输入. ( 语法: IN 累加器, )    OUT   I/O端口输出. ( 语法: OUT ,累加器 )    输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, 其范围是 0-65535.  3. 目的地址传送指令.    LEA  装入有效地址.    例: LEA DX,string ;把偏移地址存到DX.    LDS  传送目标指针,把指针内容装入DS.    例: LDS SI,string ;把段地址:偏移地址存到DS:SI.    LES  传送目标指针,把指针内容装入ES.    例: LES DI,string ;把段地址:偏移地址存到ESI.    LFS  传送目标指针,把指针内容装入FS.    例: LFS DI,string ;把段地址:偏移地址存到FSI.    LGS  传送目标指针,把指针内容装入GS.    例: LGS DI,string ;把段地址:偏移地址存到GSI.    LSS  传送目标指针,把指针内容装入SS.    例: LSS DI,string ;把段地址:偏移地址存到SSI.  4. 标志传送指令.    LAHF  标志寄存器传送,把标志装入AH.    SAHF  标志寄存器传送,把AH内容装入标志寄存器.    PUSHF  标志入栈.    POPF  标志出栈.    PUSHD  32位标志入栈.    POPD  32位标志出栈.二、算术运算指令───────────────────────────────────────    ADD   加法.    ADC   带进位加法.    INC   加 1.    AAA   加法的ASCII码调整.    DAA   加法的十进制调整.    SUB   减法.    SBB   带借位减法.    DEC   减 1.    NEC   求反(以 0 减之).    CMP   比较.(两操作数作减法,仅修改标志位,不回送结果).    AAS   减法的ASCII码调整.    DAS   减法的十进制调整.    MUL   无符号乘法.    IMUL  整数乘法.    以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算).    AAM   乘法的ASCII码调整.    DIV   无符号除法.    IDIV  整数除法.    以上两条,结果回送:    商回送AL,余数回送AH, (字节运算); 或商回送AX,余数回送DX, (字运算).    AAD   除法的ASCII码调整.    CBW   字节转换为字. (把AL中字节的符号扩展到AH中去)    CWD   字转换为双字. (把AX中的字的符号扩展到DX中去)    CWDE  字转换为双字. (把AX中的字符号扩展到EAX中去)    CDQ   双字扩展.   (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────    AND  与运算.    OR   或运算.    XOR  异或运算.    NOT  取反.    TEST  测试.(两操作数作与运算,仅修改标志位,不回送结果).    SHL  逻辑左移.    SAL  算术左移.(=SHL)    SHR  逻辑右移.    SAR  算术右移.(=SHR)    ROL  循环左移.    ROR  循环右移.    RCL  通过进位的循环左移.    RCR  通过进位的循环右移.    以上八种移位指令,其移位次数可达255次.    移位一次时, 可直接用操作码. 如 SHL AX,1.    移位>1次时, 则由寄存器CL给出移位次数.    如   MOV CL,04        SHL AX,CL四、串指令───────────────────────────────────────    DS:SI  源串段寄存器 :源串变址.    ESI  目标串段寄存器:目标串变址.    CX   重复次数计数器.    AL/AX  扫描值.    D标志  0表示重复操作中SI和DI应自动增量; 1表示应自动减量.    Z标志  用来控制扫描或比较操作的结束.    MOVS  串传送.    ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )    CMPS  串比较.    ( CMPSB 比较字符. CMPSW 比较字. )    SCAS  串扫描.    把AL或AX的内容与目标串作比较,比较结果反映在标志位.    LODS  装入串.    把源串中的元素(字或字节)逐一装入AL或AX中.    ( LODSB 传送字符.  LODSW 传送字.  LODSD 传送双字. )    STOS  保存串.    是LODS的逆过程.    REP       当CX/ECX0时重复.    REPE/REPZ   当ZF=1或比较结果相等,且CX/ECX0时重复.    REPNE/REPNZ  当ZF=0或比较结果不相等,且CX/ECX0时重复.    REPC      当CF=1且CX/ECX0时重复.    REPNC     当CF=0且CX/ECX0时重复.五、程序转移指令───────────────────────────────────────   1>无条件转移指令 (长转移)    JMP       无条件转移指令    CALL      过程调用    RET/RETF    过程返回.   2>条件转移指令 (短转移,-128到+127的距离内)    ( 当且仅当(SF XOR OF)=1时,OP1      JA/JNBE     不小于或不等于时转移.    JAE/JNB     大于或等于转移.    JB/JNAE     小于转移.    JBE/JNA     小于或等于转移.    以上四条,测试无符号整数运算的结果(标志C和Z).    JG/JNLE 大于转移.    JGE/JNL 大于或等于转移.    JL/JNGE 小于转移.    JLE/JNG 小于或等于转移.    以上四条,测试带符号整数运算的结果(标志S,O和Z).    JE/JZ      等于转移.    JNE/JNZ     不等于时转移.    JC       有进位时转移.    JNC       无进位时转移.    JNO       不溢出时转移.    JNP/JPO     奇偶性为奇数时转移.    JNS       符号位为 "0" 时转移.    JO       溢出转移.    JP/JPE     奇偶性为偶数时转移.    JS       符号位为 "1" 时转移.  3>循环控制指令(短转移)    LOOP      CX不为零时循环.    LOOPE/LOOPZ   CX不为零且标志Z=1时循环.    LOOPNE/LOOPNZ  CX不为零且标志Z=0时循环.    JCXZ      CX为零时转移.    JECXZ      ECX为零时转移.  4>中断指令    INT       中断指令    INTO      溢出中断    IRET      中断返回  5>处理器控制指令    HLT       处理器暂停, 直到出现中断或复位信号才继续.    WAIT      当芯片引线TEST为高电平时使CPU进入等待状态.    ESC       转换到外处理器.    LOCK      封锁总线.    NOP       空操作.    STC       置进位标志位.    CLC       清进位标志位.    CMC       进位标志取反.    STD       置方向标志位.    CLD       清方向标志位.    STI       置中断允许位.    CLI       清中断允许位.六、伪指令───────────────────────────────────────    DW       定义字(2字节).    PROC      定义过程.    ENDP      过程结束.    SEGMENT     定义段.    ASSUME     建立段寄存器寻址.    ENDS      段结束.    END       程序结束. 七、自己领悟───────────────────────────────────────TEST=or
不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅
按键精灵开发者1级可通过提升认证等级来升级勋章:
本帖最后由 qwe231 于
13:52 编辑 CEAA教程:A Very In Depth Tutorial on Auto Assembler(译)此文很适合AA入门,看上去很长,但作者一直用一种比较诙谐的讲述方式,读下来并不难,而且本文的内容一点都不难。本人英语渣,出现误译及错别字请多包涵。原文地址: (非手打,直接复制转载所以需要看原文并且游览器自动翻译就去原文去看------------------------------ 内容表------------------------------ I. 介绍 II. 寄存器 II.a 32位寄存器 II.b 16位寄存器 III. 指令 III.a JMP III.b MOV III.c Push/Pop + The Stack III.d alloc/label/registersymbol III.e Call and Ret III.f 其他 IV. Array of Bytes V. 结尾 VI. 人员名单/致谢词
额外内容: 写一个脚本
------------------------------ I. 介绍 ------------------------------ '哟,我猜你在读这个是因为下面两件事中的一个。
1) 你正在试图学习自动汇编 (我不会叫你菜鸟,因为每个人都是从哪里开始的,对吧 =) ) or 2) 你想测试你的自动汇编知识 (作为扩展)。
那么,如果你是前者,那就慢慢的体会好每个部分,并且在继续进行前确认自己已经明白了这章。Dark
Byte wrote:大多数人都认为AA很难,其实它可容易了。来自CE作者自己的话如果是后者,那我不会给你提任何的建议,即使我想帮忙。如果你发现有什么错了,或者含糊或者认为我可以做的更好,请告诉我。我一直处于自我学习的状态! 等等!别问,我知道你在想什么。
为什么我非要听一个还在学习的人的话?好,我来告诉你,我的朋友。即使我仍然在学习,我了解AA,并且我认为与你分享知识是一件很棒的事。 =) Edit: 这个是很久以前写的,但是现在我学到了很多,并且已经重新检查了。现在,让我们投身入奇幻的电脑世界 ------------------------------ II. 寄存器------------------------------ 这些也许你已经在一些脚本中看到过,它们被非常广泛的使用。有两种寄存器被使用,接下来来进行讲解。
--------------- II.a 32 Bit --------------- 首先,我将解释每个寄存器是如何得到它们的名字的,这会帮助你记住它们哪个是哪个。首先,以E开头 (如果你注意了下面,你会发现所有的寄存器都是以E开头的) 它告诉你这个寄存器是32位寄存器。而A,B,C,D的含义你看完描述就能明显得体会到了。像SI, DI, BP,SP,IP也是一样。在 EAX, EBX, ECX, EDX后面的X,他简单的表示已经没有更多的字母了。有点像一个 NOP 命令 (之后你将读到)。如果你注意了,你会发现每个32位寄存器都是3个字母。
EAX: 累加器(Acculmulator register)。能够用来当存储器EBX: 从前, 它是个基础寄存器,但现在只是个闲着的存储器ECX: 计数器(Counting register)。也能用来当存储器EDX: 数据寄存器(Data register)。 跟之前三个一样,能用来当存储器。 ESI: 源址变址寄存器(SourceIndex register)。 是字符串形式的指针变量,但你现在还不用担心那部分。 能够用来当存储器。 EDI: 目的变址寄存器(DestinyIndex register)。又一次,能够当作存储器,并且是个字符串形式的指针变量, 但别担心。 EBP: 机制指针寄存器(Base Pointer register)。 是用来临时存储ESP, 当然也可以像常规的存储器那样使用。 ESP: 原址指针寄存器(Source Pointer register)。它在堆栈里指向寄存器和地址(这个内容待会再说)。
EIP: 指令指针寄存器(Instruction Pointer register)。 错误的使用会使你正在试图修改的程序崩溃。 ---------------II.b 16 Bit---------------16位寄存器和32位寄存器很相似,他们间有两个区别。一是,32位寄存器名字是三个字母,而16位寄存器是两个字母。还有一件事就是16位寄存器比32位寄存器多但别担心。16位寄存器我们一般都用不上。AX: 参照 EAXBX: 参照EBXCX: 参照ECXDX: 参照EDXSI: 参照ESIDI: 参照EDIBP: 参照EBPSP: 参照ESPIP: 参照EIP--------------- 关于寄存器的内容还很多。 如果你想学习更多关于寄存器的只是, 那就去拜Google大神吧。 对于绝大多数的学习者来说求知欲都是很重要的。 ------------------------------ III. 命令 ------------------------------ 当今,什么语言没有它自己的函数和命令呢? 与英文相比,命令像个单词,而操作代码像个句子。操作代码并不难,比如:
jmp 00123EAA关于操作代码你应该知道两点。首先, 在操作码里,一般都会有个地址或者寄存器,以及一个显而易见的命令。地址是Hex形式的,是Hexadecimal的缩写。Hexadecimal是16进制数。 就如同10进制那样。 按照这种思路想一想。如同上面提到的那样,我们一般使用十进制。这就意味着我们在一个列里不能有“10”, 因为它占了两个地方。 而16进制,10至15都可以放在一个列里头。但是你会发现,“10”并没有出现在列里头。 先冷静, 这是因为在Hex进制里,10是用A表示的,而11是用B,直到15是F。再往后,它就是10,然后11,直到1F, 如果超过了20(十进制)就得从15(十六进制)往后算。有个简单的转换方法就是用操作系统自带的计算器,这里不赘述了。还有,每一个地址都有它的操作码和字节码。这个字节数就是代表操作码是什么, 每一个命令都一一对应已经定义好的字节码。我知道那些常用函数的字节码是什么,如果你想知道那些字节码的话,你还是指望别人吧,推荐去拜Google大神 =)
最后,想注释很方便。 要注释的话, 就把"//"放在命令后边或某块空处,然后打上你想打的。如果你不打 "//" ,那电脑就会以为你在打命令呢。现在,让我们来了解每个命令都是干啥的。--------------- III.a JMP --------------- JMP 命令是最常使用的命令之一 (就如同 MOV 那样, 接下来会讲)。 也许你在操作码和脚本里看到的"JMP" 不像"MOV" 那么多,那是因为 JMP 命令有很多变种。下面就是列表。
JMP: 始终跳转(Always jump to)JE/JZ: 相等则跳转(Jump to if equal) JNE/JNZ: 不等则跳转(Jump to if not equal)JA: 无符号大于则跳转( Jump to if Above) JG: 有符号大于则跳转(Jump to if Greater) JNA: 无符号不大于则跳转(Jump to if not Above) JNG: 有符号不大于则跳转(Jump to if not Greater) JB: 无符号小于则跳转(Jump to if Below) JL: 有符号小于则跳转(Jump to if Lower) JNB: 无符号不小于则跳转(Jump to if not Below) JNL: 有符号不小于则跳转(Jump to if not Lower) JAE: 无符号大于等于则跳转(Jump to if Above or Equal)
JGE: 有符号大于等于则跳转(Jump to if Greater orEqual) JNAE: 无符号不大于等于则跳转(Jump to if not Above orEqual (即 JB) )JNGE: 有符号不大于等于则跳转(Jump to if not greaterthan or Equal (即JL) )现在你大致了解了,应该有些疑惑。 "Jump to if greater"或者JG都是条件跳转。 条件跳转都如同它们名字所描述的那样,会在条件成立的情况下跳转。通常,都会有CMP或者其他的比较函数在上面,这个待会再提。以上大抵就是JMP的故事。
--------------- III.b MOV --------------- 前文已经提过, MOV 命令是最被广泛实用的命令,因为它是那么给力。 下面就是MOV的例子:
mov eax,ebx这个的意思是 "把ebx里存的地址放到eax里"。注意在两个寄存器之间还有个逗号,而不是空格。 最开始这可能有些令人费解,但是它真的很容易,下面来好好解释一下。
"Mov"是"move"的意思。 寄存器自身表示"这个寄存器里存的地址"。 基本上来说, "把ebx里存的地址放到eax的地址里面去", 这会把eax之前的值覆盖并彻底消灭掉。=D你可以通过这个方法复制ebx并把它粘贴到eax里。
另一种Mov命令。
mov eax,[ebx]这个的意思是把ebx里面的值存到eax所存的地址里,很简单, 把寄存器或者地址用[]那么一括,就表示寄存器或者地址的值了。下面这段代码什么效果都没有。Code:
mov [eax],[ebx]没效果,上面的代码啥用没有。你不能!你不能直接把一个值存在另一个值里面。你可以间接得先把值存在其他的东西里 ;) 参考下面的代码。
//先让eax入栈—这个待会解释
mov eax,[0100200A]
//把值0100200A存到eax里
mov [ebx],eax
//把(值0100200A) 存到ebx的值里面
//然后让eax出栈,这个也待会讲 解释这个是为了MOV函数。继续... --------------- III.c Push and Pop + The Stack ---------------
你已经看了上面的Push和Pop 命令的用法。等等!我是尤里!我能读你的思想!
那个push和pop都是干啥的?还有啥是stack?好,你读了前文, 在"Push"之后,我是这么注释的。
//Push eax onto the stack (让eax入栈)这个基本上就是把eax存到堆栈里。而pop eax 基本上就是把eax从堆栈中清除。CEF的Skyone写了一个非常非常好的关于堆栈的解释,我甚至无法容忍自己不让你像我那样获得对此学习的快乐;)
堆栈是用来存放可变的空白的值。它就如同: 你有用来做作业的一张纸, 但是之后你的朋友打电话叫你给Phil打电话,他的电话是 555-6405。 你慌了,没地方记啊,所以你把它写在了作业本上了。
之后你撂下电话, 就可以把Phil's电话写在电话薄上了。 在写完号码之后, 你就把号码从作业本用橡皮擦掉了, 然后打电话给Phil,并且继续做作业。把值push to stack
(入栈)就是 "在作业本上写下Phil的电话号码" 而pop就是 "把电话号码录入到电话薄上,
然后再从作业本上擦掉。" 继续... --------------- III.d Alloc/Label/RegisterSymbol --------------- 我一般喜欢用两种方法来区分Auto Assembler脚本 1) 简单的地址改变 如同下面的简单代码:
mov eax,ebx
mov ebx,eax
这是在改变地址00ABC123里面的操作码。
但是也有非常复杂的脚本,就如同dICE 或 pID00的脚本。 (我不会在这里介绍, 因为那真的没什么必要去学)
在非常复杂的脚本当中,你会在最顶上看到某些函数,(注意,我并没有经常使用)在一个复杂的脚本当中通常会出现"alloc","label"函数,有时还会出现"registersymbol"。```````````` Label ```````````` 我认为"label"函数是三个函数中最有重要的。 他能够允许你用在脚本中使用"label"定义的变量,如同下面这样。 (摸丸:label用于定义用于跳转的标签)
label(Continue)
AutoAssembler:
mov eax,02
cmp eax,03
jne Continue
je SayWhat
jmp 0 //insta-crash! =D
首先应该注意此脚本的一些问题,这个脚本没有 "alloc" 函数, 之后我就讲接着,如果你明白为什么程序执行了对应jne的label,那你做得不错。注意所有的labels(跳转标签)都在我的脚本中定义了,否则他们不会编译。```````````` Alloc```````````` 现在开始讲解"alloc"函数。 它是用来按照你的设想来分配X量的内存的函数 (hence,alloc,allocate)。 这些内存不是那些用过的, 而是那些你在运行程序中可以覆盖的没有被使用的内存。 就如同我说的,它会分配X量的内存。 X是个字节数的变量。1024bytes, 或者1 kb(kilobyte) 一般就足够你用了。现在我们了解了alloc函数,让我来演示下如何来使用它,并利用之前所学到的一切。(摸丸:按照尺寸划分一块内存,并给它起个名字)
alloc(AutoAssembler,1024)
alloc(SayWhat,1024)
label(Continue)
AutoAssembler:
mov eax,02
cmp eax,03
jne Continue
je SayWhat
注意为什么我不这么做
label(AutoAssembler) 或者
label(SayWhat) 因为当用alloc划分出内存的时候,他们在Cheat Engine的词典中就自动得已经定义好了,便于我们调用。 ```````````` RegisterSymbol```````````` 最后,函数"registersymbol"。 它可以添加你Cheat Table中你注册的标志。注意,你始终需要去为它分配内存。让我们在我们的脚本中试一试。Code:
alloc(AutoAssembler,1024)
alloc(SayWhat,1024)
alloc(WooHoo,1024)
label(Continue)
registersymbol(WooHoo)
AutoAssembler:
mov eax,02
cmp eax,03
jne Continue
je SayWhat
cmp eax,[WooHoo]
```````````` Counterparts ```````````` 现在,让我们来继续最后的一小段: the counterparts。
有两种使用AutoAssembler script的方法。第一种,你可以注入一些东西。第二种,你可以把它添加到Cheat Table中。如果你决定要把它填到cheat table (当今大多数脚本都是如此), 那你的代码需要enable和disable两部分代码,如下。
alloc(AutoAssembler,1024)
alloc(SayWhat,1024)
alloc(WooHoo,1024)
label(Continue)
registersymbol(WooHoo)
AutoAssembler:
mov eax,02
cmp eax,03
jne Continue
je SayWhat
cmp eax,[WooHoo]
现在,你会注意到,Disable部分什么也没有,不过一会就不会了!;)
你在Disable部分中所想达到的就是:撤销你在Enable部分中所做的。如何撤销内存分配和注册中的标记。现在,我感觉有个问题要来了You
wrote:你是怎么办的?简单来说,我的朋友。通过dealloc和 unregister symbol 函数! 哦,等等又有问题要来了。 "那label怎么办?" 你问? 嗯,没必要去撤销label。 =) 这意味着在Disable部分中,你大概要从开始那段中扔掉一半的代码! =)
那我们为什么不把学的加进脚本里呢?
alloc(AutoAssembler,1024)
alloc(SayWhat,1024)
alloc(WooHoo,1024)
label(Continue)
registersymbol(WooHoo)
AutoAssembler:
mov eax,02
cmp eax,03
jne Continue
je SayWhat
cmp eax,[WooHoo]
dealloc(AutoAssembler)
dealloc(SayWhat)
dealloc(WooHoo)
unregistersymbol(WooHoo)
哦这儿...还有个问题。
为什么你不用那个"1024"了?因为计算机知道你分配的AutoAssembler是大小为1024 bytes 的 (我们就把它当个例子试一试吧),你只是需要deallocAutoAssembler,它就知道应该取消分配AutoAssembler的全部1024 bytes了。(很抱歉,解释的有些迷糊)--------------- III.e Call and Ret ---------------
Call 函数和JMP 函数很相似。 唯一的不同是Call有个返回到之前代码的功能。这个简单例子利用了下面的两个函数。
mov [0100579C],10
//把地址的值改成10
cmp [0100579C],0
//把它和0进行比较
call NameGoesHere
//调用或者跳转到 NameGoesHere
jmp 01002FF5
NameGoesHere:
dec [0100579C]
//地址的值减1
cmp [0100579C],0
//跟0进行比较
jne NameGoesHere
//如果不想等就返回到
//NameGoesHere的开始,否则 继续
//返回到之前,刚好是调用(call)函数之后--------------- III.f Others --------------- 现在,很显然,在Auto Assembler还有很多很多其他的函数,不然它就是个很局限的语言。我会继续尽我所能解释更多的函数。 (哦,老兄...)
````` Nop ````` Nop: 这个我之前提过。 它意味着 "无操作", 大体上它可以抵消它之前的代码。
````` Inc/Dec `````
Inc: 加一。 用于给寄存器或地址加一。 用法如下。
inc eax Dec: 减一,跟Inc似的
````` Add/Sub `````
Add: 加法。 用法如下。
add eax,02 //给eax加2,并且将结果保存在eax中Sub: 减法,用法类似Add ````` Lea ````` 这个有点让人迷糊, 但还是继续吧。看下边的脚本。
mov eax,00123ABC
lea ebx,[eax+DEF] 也许你分不清楚,[eax+DEF] 是一个指针。 LEA把后面被指向的[eax+DEF]的地址替换给前面被指向的ebx里。
````` And/Or/Xor ````` 好,我不知道如何清晰的说明“异或(xor)”在英文中的含义 –很多网站都只是用几行字这么描述的...
我估计你明白这些逻辑操作符的行为如果谁能给我用英文为XOR做个定义我将感激不尽。即使如此,我还是不需要帮助就能解释它们是如何在汇编中工作的。 ;) 首先,它们都有着类似于add、sub命令一样的语法,如下。
and eax,ebx 每个eax 和 ebx 都可能是任何东西。哦不对, 他不可能是 "mymom"。 -。-; 回到脚本。来处理这个,(对,我知道我们都不是电脑...) 我们先要给两个寄存器值。就把12给eax,把27给ebx吧。下面,我们把它换成二进制的—那个零和一的语言。 =O 有问题吗?
怎么把十进制转成二进制啊?
我的傻朋友啊, 你怎么把你的好友计算器给忘了,用十进制把数输入,然后再点二进制啊! 有些事情需要注意,计算器不允许输入小数,它会简单的四舍五入下然后再转成二进制。我搞出了:
EBX = 11011 好,还能回想起小学时做的数学填空题吗?让我们在这儿做下。
and eax,ebx
EBX = 11011
------------
现在,ADD(与)方法是如果都是1则是1,否则就是0。那就让我们来做出这道题吧。
and eax,ebx
EAX = 01100
(加个0更轻松)
EBX = 11011
-----------------
现在我们把01000改成十进制,我们就会得到8,那个被存在EAX里的值。接下来, 是OR(或) 函数。 现在让我们用相同的方法来轻松一下
or eax,ebx
EAX = 01100
EBX = 11011
-----------------
OR函数的功能与AND函数正相反。都是0,则得0, 否则就得1。
or eax,ebx
EAX = 01100
EBX = 11011
------------------
把11111转成十进制,那会得到31,是EAX里存的值。最后,是XOR(异或)函数。还是用那个方法。Code:
xor eax,ebx
EAX = 01100
EBX = 11011
-----------------
好,XOR函数是如果两个数相同就得0,不同就得1。
xor eax,ebx
EAX = 01100
EBX = 11011
-----------------
我们把它转换成23,而23就是储存在EAX里的值。顺便一提,无论当我们写的是脚本、代码还是别的什么,你都不需要考虑EAX里面装的什么BlahBlahBlah的东西, 我之所以这么做是让你知道它是如何工作的。````` 好,这就是你所有需要知道的命令,(伙计,这可真长...) 让我们开始下一章节吧...------------------------------ IV. Array of Bytes ------------------------------ 好,想象一下。你已经有了你的代码你的脚本你的地址,你准备开始hack。万事俱备,只欠……。哦不! 补丁! 但别慌。现在你不用担心等待别人发布新的内存地址!
我慌了?没印象啊...
你没慌?! 哦,你还不知道该怎么做好,接下来让我来告诉你,我的朋友
1) 打开你的CE并附加上正在Hacking的游戏进程。
2) 点作弊表右上方的"手动添加地址(AddAddress Manually)"。
3) 点那个"地址(Address)"文本框,并且键入你想获得的AOB码的内存地址。
4) 点击下拉框,点开"类型(Type)"并选择“字节数组(Array of Byte)”
5) 在 number of bytes 或是Nr. of bytes键入8。
6) 点确认。 =) 好,现在你就得到了与你地址对应的AOB码了,但是打补丁之后怎么办呢?
1) 打开你的CE,然后加载你想hack的游戏。
2) 在CE上方中间的搜索部分中选择下拉框中的值类型,并选择字节数组。
3) 现在,键入或者从记事本里把AOB码粘贴到值的框里。
4) 先扫描,然后地址就应该出现了。如果没有一个地址出现,那就把AOB码弄短点 (从后面删掉一组值),然后再扫描。(摸丸:这里还应该勾选上“同时扫描只读内存”) 好,你已经得到了地址... 现在你要拿它做什么呢? 把它转换成你想要的脚本—就让我们用 v.38版的Maplestory上帝模式脚本做例子吧。
je 0068133e
jne 0068133e
既然你有了新地址,那就在Enable和Disable块中删除"6803EC", 并且粘贴上你的新地址。 要确认别在那儿把冒号给忘了。 嗯,这就是AOB(Array of Bytes)...
------------------------------ V. Conclusion ------------------------------
...还有很多关于自动汇编的教程! 嘿等等, 我感觉到一个问题要来?
wrote:真的就这么简单吗? 就这样? 没有更多的窍门或者其他类似的了吗? 没,就这样! 又一次,我应该引用CE作者的话...
"大多数人都认为ASM很难,但事实上,它非常简单。"~Dark Byte himself 即使如此,在此之后我还有一个关于写脚本的小教程,请稍等, 兄弟! 你没必要读"Writinga Script" 教程的,那只是个额外的部分,虽然我强烈推荐。
------------------------------ VI. Credits/Acknowledgements ------------------------------
在给出人员表之前,有很多需要感谢的人。首先, 首要的,Wizet,他制作了Maplestory所以我才能去hacking。 ; ) 第二, Dark Byte,他创建了我们今天hack的基础,并且为Cheat Engine制造了教程。 嘿, 我们都有个开始! 第三, Sponge和Labyrnth帮我做脚本。第四, 所有教程的作者,我学到了很多知识。谢谢你们!
`````````` 人员名单 ``````````
注意, 排名不分先后。
------------------------------ Bonus. Writing a Script ------------------------------
既然你读了教程,那也应该很了解了,但你还是想知道更多。 我明白, 就如同我体会过的—遗憾。我不认为有任何关于写脚本的教程是我用的上的。
alloc(AutoAssembler,1024)
alloc(SayWhat,1024)
alloc(WooHoo,1024)
label(Continue)
registersymbol(WooHoo)
AutoAssembler:
mov eax,02
cmp eax,03
jne Continue
je SayWhat
cmp eax,[WooHoo]
dealloc(AutoAssembler)
dealloc(SayWhat)
dealloc(WooHoo)
unregistersymbol(WooHoo)
还记得之前的这个脚本吗? 现在让我们用我们所学的大量内容把它弄完整。
alloc(AutoAssembler,1024)
alloc(SayWhat,1024)
alloc(WooHoo,1024)
label(Continue)
registersymbol(WooHoo)
AutoAssembler:
mov eax,02
cmp eax,03
jne Continue
je SayWhat
cmp eax,[WooHoo]
dealloc(AutoAssembler)
dealloc(SayWhat)
dealloc(WooHoo)
unregistersymbol(WooHoo)
对于脚本你需要有些东西, 一个你试图hack的程序的真实内存的地址。 无论如何, 它都不能是一个随机的地址, 或者是一些你不希望它发生但是会导致其发生的地址(崩溃,也许)。这个地址对于这件事很重要。但是为什么我们需要一个地址? 就如同之前我所说的,alloc 函数在你的程序中分配一块未使用内存。因为这是未使用的,程序不会访问这里,所以,你要让程序访问它。 当你干预这些地址时,你需要注意一些至关重要的事情。第一, 你必须用与源码相同总量的字节。 如何知道一个操作码字节的数量呢? 简单,看在地址和操作码中间,那儿应该有一堆两个一组两个一组的字符,他们被称为Array of Bytes。
nop 函数对于这种情况非常有帮助。就如同我之前解释的那样,它的含义是“无操作”。并且它只用一个字节。这意味着,如果你用不了所有的字节位置,那你就可以用nop把它填满。 当填字节时你可能会遇到三种情况。我已经描述了第一种你的代码比源码少的情况。剩下两种情况的一个是,你的代码所占的字节数和源码字节数相等,一切刚刚好。但最后一种情况有些令人困惑,那就是你的代码的字节比源码的多。现在,你的代码的字节会把下面的代码字节覆盖,直到字节的位置够用。为什么我们不玩Minesweeper呢? 一段时间之前,我还在学习写脚本的时候,我写了一小段代码(我还是我,但那时我还知道的很少)。
alloc(WhatNowMinesweeper,256)
alloc(ChiliDog,4)
label(ReturnHere)
registersymbol(ChiliDog)
//用于参考引用,表示ChiliDog的值是从0开始
//这个地址是为MineSweeper写入时间的
jmp WhatNowMinesweeper
//我重写了操作码,让它跳转到我的脚本
//填充了最后的字节
ReturnHere:
//这个是干什么的我待会告诉你
WhatNowMinesweeper:
//我的实际代码
//保存eax, 我们不这么做就会有问题
mov eax,[ChiliDog]
//把ChiliDog的值传入eax
mov [0100579C],eax
//把存有ChiliDog值的eax存入时间
//让eax出栈,因为我们已经用完了
jmp ReturnHere
//跳转到ReturnHere, 待会解释
dealloc(WhatNowMinesweeper)
//取消分配内存
dealloc(ChiliDog)
unregistersymbol(ChiliDog)
//反注册标识
//这是我修改来跳入我的代码的地址
inc [0100579C]
//这是源操作码用以防止崩溃
现在,最最先要做的。我要告诉你"ReturnHere"是什么。 如你所知,一个被告知要执行一个操作码的程序进程,他们会自动移动到下一个操作码,然后继续。 这就如同一个无限的轮回。这样,如果我们弄了条死路,即代码之后已经没有代码了,那这个程序几乎就会崩溃。因此, 我们要让它执行过我们的代码之后再返回到调用跳转之后的位置上,这样代码就可以继续了—并且我们也不会崩溃! =D 关于写脚本还有很多内容。 请自由的提问并且评论你是否喜欢。 =)
不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅
按键精灵开发者1级可通过提升认证等级来升级勋章:
本帖最后由 qwe231 于
13:56 编辑 不解释了,看完CE就能达到一定境界了,别问我,我也没多少境界 转来的感谢我爱秘籍 和 我师傅小剑 另外打个广告,有谁愿意做我师傅!
不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅咒你!不回复的画个圈圈诅咒你。不送花的画个方块诅
盒子会员盒子会员专属勋章按键精灵开发者5级可通过提升认证等级来升级勋章:
anjianjlzh
CE全方位教程及CE6.2中文
按键精灵开发者4级可通过提升认证等级来升级勋章:
ddddddddddd
桂林美食网
xiaoqiang527
按键精灵开发者2级可通过提升认证等级来升级勋章:
好家伙太厉害了。
snwhcsl2013
好东西~要顶起来收藏学习了
鹰眼勋章鹰眼注册用户专属勋章学有所成学有所成勋章,新手步入按键学堂的第一枚勋章按键精灵开发者2级可通过提升认证等级来升级勋章:
顶楼主啦..希望楼主多发精品好帖啦.....
弱弱的问下,现在的网游都直接限制CE,你的ce怎么能过NP啊?过不了NP的话就是再好的工具也用不上劲了吧。
一用写入就游戏关闭
按键精灵开发者5级可通过提升认证等级来升级勋章:
按键精灵开发者6级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章黄瓜勋章(永久)体验商业小精灵活动的奖励认证考霸(90天)参加考霸活动,对认证考了十次以上用户的鼓励兔年勋章(360天)兔年纪念勋章(360天)
& && && && && &&&承接中小型脚本,纯按键。
& && && && && &&&免费帮人解答中小型纯按键问题。
& && && && && &&&QQ:& && && &&&
& && && && && && && && && && && && && && && &————追梦lsh

我要回帖

更多关于 pdi ce 6.1.0.1 196 的文章

 

随机推荐