美文网首页Cheat Engine
Cheat Engine — 封弊者

Cheat Engine — 封弊者

作者: 喝豆腐脑加糖 | 来源:发表于2019-03-04 21:07 被阅读0次

    在看了腾讯游戏竞赛;发现对游戏了解太少,在调试的时候尽管可以跟进关键部分。但是不了解引擎,游戏坐标建模这些;感觉看到了也没什么感觉。所以就先学了下CE这个对游戏的作弊引擎;最起码能做出个改视角的题。

    CE作弊引擎,可以更改游戏中内存数据,视角的修改。而且其中还有代码注入,反汇编,调试的功能。在其中支持lua语言,D3D功能。其他的功能还要慢慢试了。

    最新的版本到了6.83,我用的是6.5。
    软件特意加了关卡,来帮助新手们学习使用CE-- Tutorial

    图片.png

    通过这个关卡来学习下使用

    step - 1

    图片.png

    算是告诉你怎么才算通关,只要满足某些条件;Next按钮就可以点击到下一步。

    step - 2 - 数值搜索

    图片.png

    要求是将我们的血量改为1000

    首先点击加载进程,找到Tutorial。


    图片.png 图片.png

    搜索血量值:100 ,会找到很多;这时就需要不断点击Hit me来改变血量来锁定具体数值。


    图片.png

    然后将找到的数据添加到下方的table中


    图片.png

    更改为1000进入下一关。

    step - 3 未知数值

    图片.png

    有些时候,我们看不到具体的血量,我们在攻击的时候可以看到减少的数值。将这个血量改为500

    图片.png

    这就是本关的情景,点击 new scan 开始新的搜索。

    图片.png

    将搜索类型改为未知

    图片.png

    之后添加到 table 中,改为 500 即可。

    step - 4 浮点类型

    图片.png

    将搜索的类型改为float double,其他和之前操作类似,更改为5000即可。

    step - 5 代码查找器

    图片.png

    储存数据的地址不是固定不变的,每一次重启游戏通常都会变动,甚至在你玩游戏的过程中地址都有可能改变,这一关讲解使用代码查找的方法。

    找到数值添加到 table 中,点击 find out what writes to address


    图片.png

    可以看到此处控制数据的变化,将这处汇编使用nop填充,之后数据的地址便不会更改。

    其实是在这个地方会下一个断点,为了不影响以后操作将断点 stop 取消。

    图片.png

    在高级选项中可以将更改的代码再次恢复 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 表中 ,找到此处数据所在的位置。


    图片.png

    点击More information

    图片.png

    记下这个数据,这是指针所在的地址,找到之后添加到 table 中


    图片.png

    记下这个数据的基址

    点击添加地址


    图片.png

    指针填的是基址,之后添加此地址,锁定更改数据即可

    图片.png

    step - 7 代码注入

    将伤害由 1 改为加 2
    

    找到
    通过show asemable 中的 tools,找到auto assemble


    图片.png

    之后就可以更改了


    图片.png

    step - 8 多级指针

    点击 Change pointer之后的 3 秒内 将新的数值锁定在 5000。
    
    在步骤6中,您有一个简单的级别1指针,找到的第一个地址已经是实际的基地址。
    然而,这个步骤是一个级别4指针。它有一个指向指向指向指向指向运行状况的指针的指针。
    
    图片.png

    同时记下地址数值,按照这个数据来找到指针


    图片.png

    通过
    Find out what accesses this address 来找到以下两条指令

    图片.png

    这里多级指针的意思就是不断向上级地址


    图片.png

    不断向上查找找到源头

    图片.png

    依次查到偏移为18 0 14 c


    图片.png

    (不清楚在那里出了错误,有一会所有地址都无法搜到,重启几次程序就好)

    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上面,所有的操作都会弹框报错就没有再管

    相关文章

      网友评论

        本文标题:Cheat Engine — 封弊者

        本文链接:https://www.haomeiwen.com/subject/ncwbuqtx.html