您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 股票报告 > CE修改器傻瓜教程-第9关
CheatEngine6.2TutorialStep9教程作者:NGKiller@Gmail.Com原创。转载请注明作者!第9关说明:Step9:Sharedcode:(PW=31337157)(密码在此)ThisstepwillexplainhowtodealwithcodethatisusedforotherobjectofthesametypeOftenwhenyou'vefoundhealthofaunitoryourownplayer,youwillfindthatifyouremovethecode,itaffectsenemiesaswell.Inthesecasesyoumustfindouthowtodistinguishbetweenyourandtheenemiesobjects.Sometimesthisisaseasyascheckingthefirst4bytes(Functionpointertable)whichoftenpointtoauniquelocationfortheplayer,andsometimesit'sateamnumber,orapointertoapointertoapointertoapointertoapointertoaplayername.Italldependsonthecomplexityofthegame,andyourluckTheeasiestmethodisfindingwhataddressesthecodeyoufoundwritestoandthenusethedissectdatafeaturetocompareagainsttwostructures.(Yourunit(s)/playerandtheenemies)Andthenseeifyoucanfindoutawaytodistinguishbetweenthem.(注意红色部分,已经提示我们要使用解析资料、结构这个功能,找到敌我分组数据)Whenyouhavefoundouthowtodistinguishbetweenyouandthecomputeryoucaninjectanassemblerscriptthatchecksfortheconditionandtheneitherdonotexecutethecodeordosomethingelse.(Onehitkillsforexample)Alternatively,youcanalsousethistobuildasocalledArrayofbytestringwhichyoucanusetosearchwhichwillresultinalistofallyourortheenemiesplayersInthistutorialIhaveimplementedthemostamazinggameyouwilleverplay.Ithas4players.2Playersbelongtoyourteam,and2Playersbelongtothecomputer.YourtaskistofindthecodethatwritesthehealthandmakeitsoyouwinthegameWITHOUTfreezingyourhealthTocontinue,pressRestartgameandautoplaytotestthatyourcodeiscorrectTip:Healthisafloat(生命值是一个浮点数据)Tip2:Therearemultiplesolutions下面先用CE加载进程,并查询浮点数1002点击教程中的Attach减少数值,然后加入变化的搜索结果。同理查找500(浮点)并点击Attach,加入敌人的HP数值段,如下(不同电脑地址可能不同!):右击P1,选择:什么改写了这个地址。点击教程中Player1处的Attach,调试窗口出现如下变化点详细信息,打开图中红色就是改写的代码,意思是将eax中的数值写入ebx+04这个地址指向的地址,注意用“[]”括起来的地址是一个指针,指向另一个地址。这里我们记住偏移量是+04,后面解析数据时要用到回到CE主窗口,点击任一一个地址,选择:浏览相关内存区域,会发现都指向250C6这个地址(不同电脑地址可能不同!)。说明当攻击敌人或者队友时,都是通过同一个程序调用输出数值(为什么可以用同一个程序调用指向不同的地方?因为ebx可以存储不同的位置指针,所以可以指向不同的地方,这个学过编程就明白了)到这里,我们就要开始分析数据了,这是最重要的一个环节。在内存查看器窗口中点击工具-解析资料、结构这里要把先前查询到的4个地址都填写进去(不同电脑地址可能不同!),用来分析这4组数据有什么共同、不同点,然后为自动注入代码做准备。回到CE主窗口,看到这4个地址在结构分析窗口,点击文件-加入额外的地址,再加3个,一同是4个,分别将先前的4个地址填写进去,记得前面我让你记住的偏移量吗?是+04(不同电脑偏移地址可能不同!),这里要注意把这个偏移量减掉结构分析窗口还可以进行分组,这个自己尝试,我们将敌我分2个组,最终效果见图:点击结构-定义新的结构,一路点确定(3个对话框),开始结构分析。当看到这个窗口,相信大家已经有了大概的修改框架,如图,玩家的名字、以及队伍分组(现在只能是猜测),都一目了然,这里要注意,我们要记下玩家分组的偏移量是10,即+10(不同电脑偏移地址可能不同!),这个是区别队友与敌人的标识,当然目前来说是我们的猜测,但实际上确实如此。这里大家也许有个疑问,为什么要在地址后面-04呢?那么用player1举例说明。我们回头来看:什么改写了这个地址窗口-详细。如图,打开Windows自带的计算机,选择程序员类型,改为十六进制,计算机一下018B7FE8+04=018B7FEC,你能看出什么?这里你要懂一些编程方面的知识了。如果把一个人物的信息用编程语言来表示,那么就应该有如下结构:structpeople{stringname;floatlife;……};这里,当一个结构开始,偏移量为0,name的偏移量+2,life的偏移量+4,依次类推,往后就是偏移量+数字了。这里我们看:018B7FE8+00开始018B7FE8+04=018B7FEC血量018B7FE8+10组018B7FE8+15名字这下明白了吗?我们要从这个结构的最开始进行分析,那么就要从018B7FE8开始,而这个怎么得来呢?从018B7FEC-04就可以了。其他玩家也是一样的。但在游戏中可能要比这个复杂得多,因为这个教程本来就是面向初学者,再不多说。下面我们就开始代码注入,进行修改并完成这个教程。这里有2种方法。先说一种比较简单的。现在我们已经确定,250C6这个地址(不同电脑地址可能不同!)是把计算的结果显示出来的,那么我就可以在这里下手进行判断,如果是队友,那么就不执行这个操作,直接用nop代替不做任何事,如果是敌人就按原来的代码执行,减去血量。在内容查看窗口,选中250C6这一行,然后选择工具-自动汇编,然后选择模板-代码注入,弹出的对话框点确定。自动生成的代码如下,我的说明是蓝色字体:alloc(newmem,2048)//2kbshouldbeenoughlabel(returnhere)label(originalcode)label(exit)newmem://thisisallocatedmemory,youhaveread,write,executeaccess//placeyourcodehere这里开始写我们的代码originalcode:原始代码是这个,要注意下面有个fldz,如果自己写代码,最后一句要把这个加上,至于为什么下面说明mov[ebx+04],eaxfldzexit:jmpreturnhereTutorial-i386.exe+250C6:jmpnewmemreturnhere:最后从这儿退出下面是我写的代码,说明继续为蓝色(如果复制的话请把蓝色字全删除掉)。alloc(newmem,2048)//2kbshouldbeenoughlabel(returnhere)label(originalcode)label(exit)newmem://thisisallocatedmemory,youhaveread,write,executeaccess//placeyourcodeherecmp[ebx+10],1对比组,记得分析窗口里的偏移量吧,+10是组,队友是1,敌人是2jeexit如果是队友,则跳转到exit处originalcode:如果不是队友而是敌人,上面的je不会跳转,会继续执行这儿mov[ebx+04],eax原始的语句,让他减血fldzjmpreturnhere跳转退出exit:队友的话会跳转到这儿nop什么也不做(即不减血)fldz这个要加上,为什么加上,可以在注入后查看内存查看器窗口中,250C6下面的那一行在注入后消失了!而这一行的代码就是fldz为了不使程序出错,这一句一定要手动加上jmpreturnhere跳转退出,返回原程序继续执行Tutorial-i386.exe+250C6:jmpnewmemreturnhere:注入代码结束位置点击运行,然后返回教程点击RestartgameandAutoplay,会看到自己的队友不减血而敌人一会儿就挂了。下面说第2种注入方法。先来考虑一种情况,如果要队友、敌人减血,那么至少应该有一个“减”运算操作吧,那么我们在内存查看器窗口中,从250C6处往上翻,如果没有程序调用(call*****这样的代码),那么往上第一个减运算一定是减血操作了。我们往上看,到2509D(不同电脑地址可能不同!)这儿果然看到了fsubr(这代表什么意思请自觉汇编语言):好了,现在开始另一种注入方法,直接改写这儿的代码,如果是敌人就减血,如果是自己的队友就加血,而且可以实现一击必死(直接减敌人100W的血,他不死才怪)。选中2509D这一行,点工具-自动汇编,然后点模板-代码注入。这里直接上我自己写的代码并附解释:alloc(newmem,2048)//2kbshouldbeenoughlabel(returnhere)label(originalcode)label(exit)newmem://thisisallocatedmemory,youhaveread,write,executeaccess//placeyourcodeherecmp[ebx+10],1判断是否是队友jeexit如果是队友则跳转到exit处,否则继续往下执行originalcode:原始语句fsubrdwordptr[ebx+04]如果是敌人,直接减血fstpdwordptr[ebp-30]jmpreturnhere减血完毕,返回原程序exit:如果是队友来到这儿fadddwordptr[ebx+04]改fsubr为fadd,执行加血命令fstpdwordptr[ebp-30]jmpreturnhere加血完毕,返回原程序Tutorial-i386.exe+2509D:jmpnewmemnopreturnhere:返回原程序好了,点击Restartgameandautoplay,看到如下结果,队友不仅没减血,而且还加血了。搞定!如何实现一击必死呢?可以参考如下代码,是CE论坛上找到的,不做说明,自己看吧。//MadebysvchostwithCheatEngine6.2RC1//4thMay,2012[ENABLE]alloc(StoreHealthAddress,2048)label(StoreHealthAddressReturn)alloc(WriteHealthAddress,2048)label(WriteHealthAddressReturn)globalalloc(Player1_Dave,4)global
本文标题:CE修改器傻瓜教程-第9关
链接地址:https://www.777doc.com/doc-4572200 .html