在看了腾讯游戏竞赛;发现对游戏了解太少,在调试的时候尽管可以跟进关键部分。但是不了解引擎,游戏坐标建模这些;感觉看到了也没什么感觉。所以就先学了下CE这个对游戏的作弊引擎;最起码能做出个改视角的题。
CE作弊引擎,可以更改游戏中内存数据,视角的修改。而且其中还有代码注入,反汇编,调试的功能。在其中支持lua语言,D3D功能。其他的功能还要慢慢试了。
最新的版本到了6.83,我用的是6.5。
软件特意加了关卡,来帮助新手们学习使用CE-- Tutorial
通过这个关卡来学习下使用
step - 1
算是告诉你怎么才算通关,只要满足某些条件;Next按钮就可以点击到下一步。
step - 2 - 数值搜索
要求是将我们的血量改为1000
首先点击加载进程,找到Tutorial。
搜索血量值:100 ,会找到很多;这时就需要不断点击Hit me来改变血量来锁定具体数值。
然后将找到的数据添加到下方的table中
更改为1000进入下一关。
step - 3 未知数值
有些时候,我们看不到具体的血量,我们在攻击的时候可以看到减少的数值。将这个血量改为500
这就是本关的情景,点击 new scan 开始新的搜索。
将搜索类型改为未知
之后添加到 table 中,改为 500 即可。
step - 4 浮点类型
将搜索的类型改为float double,其他和之前操作类似,更改为5000即可。
step - 5 代码查找器
储存数据的地址不是固定不变的,每一次重启游戏通常都会变动,甚至在你玩游戏的过程中地址都有可能改变,这一关讲解使用代码查找的方法。
找到数值添加到 table 中,点击 find out what writes to address
可以看到此处控制数据的变化,将这处汇编使用nop填充,之后数据的地址便不会更改。
其实是在这个地方会下一个断点,为了不影响以后操作将断点 stop 取消。
在高级选项中可以将更改的代码再次恢复 restore with ordinal code
step - 6 指针
在前面的步骤中,我解释了如何使用代码查找器来处理更改的位置。但仅此方法就很难找到设置所需值的地址。
这就是为什么有指针:
底部有两个按钮。一个更改值,另一个更改值和值的位置。
对于这一步,您不需要真正了解汇编程序,但如果您了解汇编程序,它会有很大帮助。
首先找到值的地址。当您找到它时,使用函数来找出访问这个地址的对象。
再次更改该值,列表中将显示一个项目。双击该项目。(或选择并单击“更多信息”),将打开一个新窗口,其中包含有关运行指令时发生的情况的详细信息。
如果汇编程序指令在“[”and“]”之间没有任何内容,则使用列表中的另一项。
如果它做了,它会说它认为什么是你需要的指针的值。
返回到作弊引擎主窗口(如果需要,您可以保持这个额外的信息窗口打开,但如果关闭它,请记住[和]之间的内容),并用十六进制对额外信息告诉您的值进行4字节扫描。
扫描完成后,它可能会返回1个或几百个地址。大多数时候,你需要的地址都是最小的。现在单击“手动添加”并选中“指针”复选框。
窗口将更改并允许您键入指针地址和偏移量。
把你刚找到的地址填成地址。
如果汇编程序指令在末尾有一个计算(例如:[ESI+12]),则在末尾键入该值。否则,请保留0。如果是更复杂的指令,请看计算。
更复杂的指令示例:
[eax*2+edx+00000310]eax=4c,edx=00801234。
在这种情况下,edx是指针的值,eax*2+00000310是偏移量,所以您要填写的偏移量是2*4c+00000310=3a8。(这都是十六进制的,使用科学模式下Windows中的calc.exe进行计算)
回到教程中,单击“确定”,地址将被添加,如果一切正常,地址将显示P->XXXXXXX,其中XXXXXXX是您找到的值的地址。如果这不正确,你就做错了。
现在,使用您在5000中添加的指针更改值并冻结它。然后单击“更改指针”,如果一切都结束
右键“下一步”按钮将变为可见。
额外的:
你也可以使用指针扫描器找到指向这个地址的指针
说的很详细,操作细节都写上了;这里说的是另外一种更改数据的方法,通过指针进行查找。
还是先找到数据添加到 table 表中 ,找到此处数据所在的位置。
点击More information
记下这个数据,这是指针所在的地址,找到之后添加到 table 中
记下这个数据的基址
点击添加地址
指针填的是基址,之后添加此地址,锁定更改数据即可
step - 7 代码注入
将伤害由 1 改为加 2
找到
通过show asemable 中的 tools,找到auto assemble
之后就可以更改了
step - 8 多级指针
点击 Change pointer之后的 3 秒内 将新的数值锁定在 5000。
在步骤6中,您有一个简单的级别1指针,找到的第一个地址已经是实际的基地址。
然而,这个步骤是一个级别4指针。它有一个指向指向指向指向指向运行状况的指针的指针。
同时记下地址数值,按照这个数据来找到指针
通过
Find out what accesses this address 来找到以下两条指令
这里多级指针的意思就是不断向上级地址
不断向上查找找到源头
依次查到偏移为18 0 14 c
(不清楚在那里出了错误,有一会所有地址都无法搜到,重启几次程序就好)
step - 9 共享代码
有时候使敌人掉血的代码和使自己掉血的代码是同一个代码,单纯修改这个代码会使要么同时对自己和敌人有利,要么同时有害,而不是对自己有利,对敌人有害。
这一关重现了这样一种情况:己方初始血量很少,且被攻击一次掉血很多,敌方初始血量很多,且每次攻击只掉1滴血。
你需要做的是:不使用锁定,让己方不死,而敌方阵亡。
按照之前的找到四个数据,进行代码注入
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
mov [ebx+04],eax
fldz
exit:
jmp returnhere
"Tutorial-i386.exe"+261D7:
jmp newmem
returnhere:
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(no_decrese_health) // 在这里定义一个标签
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
// 在这里添加代码
cmp [ebx+10], 1 // 判断 [ebx+10] 是否为 1
je no_decrese_health // 如果相等的话,则跳转到 no_decrese_health 标签
originalcode:
mov [ebx+04],eax
no_decrese_health: // 在这里使用这个标签
fldz
exit:
jmp returnhere
"Tutorial-i386.exe"+265B7:
jmp newmem
returnhere:
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(no_decrese_health) // 在这里定义一个标签
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
// 在这里添加代码
cmp byte ptr [ebx+15], 44 // 判断 [ebx+15] 是否为 D
je no_decrese_health // 如果相等的话,则跳转到 no_decrese_health 标签
cmp byte ptr [ebx+15], 45 // 判断 [ebx+15] 是否为 E
je no_decrese_health // 如果相等的话,则跳转到 no_decrese_health 标签
originalcode:
mov [ebx+04],eax
no_decrese_health: // 在这里使用这个标签
fldz
exit:
jmp returnhere
"Tutorial-i386.exe"+265B7:
jmp newmem
returnhere:
这是找的两个方法,点击重启便会退出,不过其他人的会显示一个well done 提示框,就很难受。
ps:我没有用新版本的原因是在win10上面,所有的操作都会弹框报错就没有再管