|
发表于 2010-1-25 02:37:40
|显示全部楼层
第7步 密码=013370
代码注入是一个将一小段代码注入到目标进程中的技巧,然后使这个进程执行你写入的自己的代码。
在这一步教程中,你将有一个生命值和一个按钮,这个按钮每按一次将减少1点生命值。你的任务是使用代码注入来增加这个生命值,使得每按一次按钮增加2点生命值。
开始查找这个地址然后进入“找到写这个地址的东西”。
然后减小生命值,当你已经找到地址后,显示反汇编程序(Show disassembler), 并找到这个地址,然后打开自动汇编窗口(Tools菜单->Auto Assemble)(Ctrl+a)
在tmplate上点击然后再点击Code Injection,并给出减少生命值的地址(如果程序没有正确填写的话)
那样,将产生一个基本的自动汇编程序窗口你可以用于你的代码.
注意alloc, 那将用于为你的代码分配一块内存, 而在Win2000系统之前, 这种行为存在安全隐患,是不安全的(HZH:在Win200以前,对系统内存进行分配及代码查找之类的操作,可能会导致系统崩溃),幸运的是这种情况在win200以后的版本得到改善.
同样,也要注意line newmem语句及原始代码,以及文本"Place your code here",正如你猜测的那样,在这儿写下你每次增加2点生命值的代码.
在这种情况下,一个有用的汇编指令是"ADD".
下面是一些示例:
"ADD [00901234],9" 使[00901234]地址的值增加9
"ADD [ESP+4],9" 使地址指针[ESP+4]的值增加9
注意:
推荐你从原始生成代码中删除减少你生命值的那行代码, 否则你将不得不增加3点生命值(你增加3点,而原始代码减少1点,那样最终结果是增加2点),这样可能会造成混乱.
注意2:
在一些游戏中,原始代码可能存在在多指令之外,并且某些时候(并非一直如此),这可能会发生在其他地方跳转到你的跳转指令结束,那样将引起未知的行为.如果这种情况发生的话,你通常应该查看附近的指令,查看跳转情况并进行修改,或者选择使用一个不同的代码注入开始地址.
最后,点击 Write code.
第八步: 多级指针 (密码=525927)
Step 8: Multilevel pointers: (PW=525927)
................................
这个窗口的下方的数值2025 还有Change value和Change pointer两个按钮。
开始指针扫描,选择CE输入扫描数值,如有看到New Scan先点击它后才输入数值。
Value :2025
Scan type :Exact Value
Value type:4 Bytes
点击First Scan →Found:1 →选择TUT并点击Change value →双击列表上找到的地址将它加入
下方的列表并右击地址,即Address下面(不是数值哦)。在右键菜单选择
“Find out what writes to this address”,这会弹出“The following opcodes ch...."
一个空的列表窗口。选择TUT点击ChangeValue这就会将改变的地址加入空列表中并选择它后点击
Show Disassembler按钮,这会弹出“Memory Viewer”窗口。在窗口列表选择最上面的地址并记住它,
然后点击列表右边滚动条上面的箭头,将地址滚向下面要记住刚才的地址哦,
列如:
5. :00456153 - a1 18 c.. - mov eax,[0045cc18] 这记下0045cc18
4. :00456158 - 8b 40 0c - mov eax,[eax+0c]
3. :0045615B - 8b 40 14 - mov eax,[eax+14]
2. :0045615E - 89 00 - mov eax,[eax]
1. 是最上面的地址 :00456160 - 89 70 18 - mov [eax+18],esi 向下滚动后到这里,
现在要写下这以上的4个地址的数值,这要从下向上数。我将倒数的地如下:
1. :00456160 - 89 70 18 - mov [eax+18],esi 这记下 18
2. :0045615E - 89 00 - mov eax,[eax] 没有+号这记下 0
3. :0045615B - 8b 40 14 - mov eax,[eax+14] 这记下 14
4. :00456158 - 8b 40 0c - mov eax,[eax+0c] 不要0这记下 c
记下了就选择CE然后点击“Add address manually”,这会弹出Add address对话板,
将Pointer旁边的小方格打勾,点击3次Add pointer按钮,这样就有4个Address of pointer,
然后将数值填入
Address of pointer:不填 Offset (Hex):18
Address of pointer:不填 Offset (Hex):0
Address of pointer:不填 Offset (Hex):14
Address of pointer: 0045cc18 Offset (Hex):c
然后点击OK键。现在双击CE下方列表地址前面带有P->00D722E8地址的数值(Value),这会弹出
Value对话板,将数值修改为5000,先不要点OK键并将Value对话板移到TUT的Change pointer
按钮的下方,既是当我选择了TUT的时候也能看得见Value对话板的OK键,这样我就可以在点了
TUT的Change pointer按钮后能快速的点击得到Value对话板的OK键(3秒钟内)。
我哈哈!!点到了。
选择TUT点击Next进入.......Tutorial End。噢!完成了第八步骤。嘻嘻嘻!
学CE自己做CT表!
首先,下载CE(也可以用ME,ME与CE原理相同)
然后开始教程
CHEAT ENGINE 这是老外编的内存修改工具,我在网上找了很久才找到这个教程.现把它放这里,主要是怕它失传了.内容比较乱,不过这也是网上唯一一篇教材了.
---------------------------------------------------------------------
CHEAT ENGINE(以下简称CE)是我见过的最优秀的游戏作弊工具。它的优点多不胜数,虽然单独从搜索游戏里面的数值来说,它并不比其他同类软件强多少,但它不仅仅是个游戏修改工具,它还有其他游戏修改软件所没有的一些特点,例如:它有强大的反汇编功能,这个是别的游戏工具中几乎没有的;还有,它本身就自带了外挂制作工具,可以直接由它生成外挂。而它的界面非常简洁朴素,这也是我喜欢它的原因之一。同类软件中,我觉得TSEARCH可以和它媲美,但TSEARCH的界面比较混乱,操作过于复杂,所以我个人并不喜欢TSEARCH。
在这个教程里面,你不会看到任何图片,因为我觉得我能用纯文字教你使用CE,如果你觉得没有图片就一定学不会,我想你没必要看下去了,因为我没空做图片,并且我觉得文字已经足够表达,没必要用多余的图片。
还有如果你喜欢这个入门教程,你可以把它转载到任何地方,但在转载之前,请你征得本人的同意,并且在转载时注明作者为CCB。
好了,废话少说,进入正题吧。
其实,使用CE的基本步骤,可以简单到一句话:
1.运行CE->2.运行游戏->3.在CE中指定要修改的游戏->4.首次搜索一个数值->5.回游戏中让这个数值增加或减少 ->6.回CE按数值增减的情况再次搜索->7.重复5和6直到得到一个或很少的几个结果->8.在这几个结果中判断哪一个是真正的结 果。
而下面的这个教程,就是要对上面说的这些步骤进行详细的解释,然后再用一个具体的例子来让大家真正掌握CE的用法。
当然,要用一个具体的例子来讲解CE的用法,需要一个游戏,以这个游戏的修改来讲解。不过,如果真正的用一个游戏来做例子,那么大家也得找到我用的游戏, 就算找得到,还有可能要安装,确实比较麻烦。幸好,CE本身带了一个TUTORIAL,就是教程的意思,不过这个TUTORIAL,本身也是一个程序,它 是作者为了让使用的人进行练习而编写的,它不但会一步一步地教你怎么用CE,而且它本身也和游戏差不多,除了没有游戏的画面。如果你能使用CE按这个 TUTORIAL的要求对它进行修改,我想你也应该能用CE对真正的游戏进行修改了。
OK,LET'S GO!
第九步:注入++(密码:31337157)
在这个步骤中,我们会尽基本上与在第7步相同,但现在一点点变得更加困难。
现在你要编辑代码实现当生命值大于等于30,把生命值改为1000,如果小于30则改为2000
这使用auto assembler脚本API CALL调用一些例程,以获取当前时间,但这里使用C-Script注入会更容易些
找到生命值的地址,打开Script engine(在Memory view中按CTRL+ALT+A或者菜单项Tools->Script engine)
具体步骤如下:
1.搜索生命值
2.将找到的地址加入列表(我找出来的地址是D629F8)
3.在地址上点右键“Find out what writes to this address”,然后“Hit me”
4.在"the following opcodes changed the...."窗口中得到汇编代码,点击"More information"
6.在"Extra info"窗口中得到代码:0045dea - dec[ebx+310]
7.在"the following opcodes changed the...."窗口中点击Show disassembler出现"Memory Viewer"窗口
8.Ctral+Alt+A出现"Script engine"窗口
9.填入下列代码
#include <time.h>
struct tm *timep;
time_t c;
c=time(0);
timep=localtime(&c);
if (timep->tm_sec>=30)
*(int *)0x00D629F8=1000;//第二步中得到的地址
else
*(int *)0x00D629F8=2000;//第二步中得到的地址
10.点击菜单"Inject->Inject into current process"
11.出现"Auto assemble"窗口,出现的代码中有一句"Call 010A0105"
12."Template->Code injection" 填入0045dea(第六步中得到的地址)
13.得到如下代码:
//Call this code to execute the script from assembler
call 011E0103 //(该值可能不同)
//eax==0 when successfully executed
//'call underc_geterror' to get a pointer to the last generated error buffer
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)
00455dea:
jmp newmem
nop
returnhere:
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
dec [ebx+00000310]
exit:
jmp returnhere
14.修改成如下代码:
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)
00455dea:
jmp newmem
nop
returnhere:
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
call 011E0103 //(该值可能不同)
exit:
jmp returnhere
15.点击Execute
16.回到"Cheat Engine Tutorial",点击"Hit me",这时"Next"就变得Enable
终于做完第九步了!大家主要注意这里*(int *)0x00D629F8=1000;//第二步中得到的地址
else
*(int *)0x00D629F8=2000;//第二步中得到的地址 |
|