完整word版CE修改器傻瓜教程第9关.docx
- 文档编号:28639072
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:26
- 大小:925.75KB
完整word版CE修改器傻瓜教程第9关.docx
《完整word版CE修改器傻瓜教程第9关.docx》由会员分享,可在线阅读,更多相关《完整word版CE修改器傻瓜教程第9关.docx(26页珍藏版)》请在冰豆网上搜索。
完整word版CE修改器傻瓜教程第9关
CheatEngine6。
2TutorialStep9教程
作者:
NGKiller@Gmail。
Com原创。
转载请注明作者!
第9关说明:
Step9:
Sharedcode:
(PW=31337157)(密码在此)
Thisstepwillexplainhowtodealwithcodethatisusedforotherobjectofthesametype
Oftenwhenyou'vefoundhealthofaunitoryourownplayer,youwillfindthatifyouremovethecode,itaffects
enemiesaswell。
Inthesecasesyoumustfindouthowtodistinguishbetweenyourandtheenemiesobjects.
Sometimesthisisaseasyascheckingthefirst4bytes(Functionpointertable)whichoftenpointtoauniquelocation
fortheplayer,andsometimesit’sateamnumber,orapointertoapointertoapointertoapointertoapointertoa
playername。
Italldependsonthecomplexityofthegame,andyourluck
Theeasiestmethodisfindingwhataddressesthecodeyoufoundwritestoandthenusethedissectdatafeatureto
compareagainsttwostructures。
(Yourunit(s)/playerandtheenemies)Andthenseeifyoucanfindoutawayto
distinguishbetweenthem。
(注意红色部分,已经提示我们要使用解析资料、结构这个功能,找到敌我分组数据)
Whenyouhavefoundouthowtodistinguishbetweenyouandthecomputeryoucaninjectanassemblerscriptthat
checksfortheconditionandtheneitherdonotexecutethecodeordosomethingelse。
(Onehitkillsforexample)
Alternatively,youcanalsousethistobuildasocalled”Arrayofbyte”stringwhichyoucanusetosearchwhichwill
resultinalistofallyourortheenemiesplayers
InthistutorialIhaveimplementedthemostamazinggameyouwilleverplay.
Ithas4players.2Playersbelongtoyourteam,and2Playersbelongtothecomputer.
YourtaskistofindthecodethatwritesthehealthandmakeitsoyouwinthegameWITHOUTfreezingyourhealth
Tocontinue,press”Restartgameandautoplay”totestthatyourcodeiscorrect
Tip:
Healthisafloat(生命值是一个浮点数据)
Tip2:
Therearemultiplesolutions
下面先用CE加载进程,并查询浮点数100XXX
点击教程中的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)//2kbshouldbeenough
label(returnhere)
label(originalcode)
label(exit)
newmem:
//thisisallocatedmemory,youhaveread,write,executeaccess
//placeyourcodehere这里开始写我们的代码
originalcode:
原始代码是这个,要注意下面有个fldz,如果自己写代码,最后一句要把这个加上,至于为什么下面说明
mov[ebx+04],eax
fldz
exit:
jmpreturnhere
”Tutorial—i386。
exe”+250C6:
jmpnewmem
returnhere:
最后从这儿退出
下面是我写的代码,说明继续为蓝色(如果复制的话请把蓝色字全删除掉)。
alloc(newmem,2048)//2kbshouldbeenough
label(returnhere)
label(originalcode)
label(exit)
newmem:
//thisisallocatedmemory,youhaveread,write,executeaccess
//placeyourcodehere
cmp[ebx+10],1对比组,记得分析窗口里的偏移量吧,+10是组,队友是1,敌人是2
jeexit如果是队友,则跳转到exit处
originalcode:
如果不是队友而是敌人,上面的je不会跳转,会继续执行这儿
mov[ebx+04],eax原始的语句,让他减血
fldz
jmpreturnhere跳转退出
exit:
队友的话会跳转到这儿
nop什么也不做(即不减血)
fldz这个要加上,为什么加上,可以在注入后查看内存查看器窗口中,250C6下面的那一行在注入后消失了!
而这一行的代码就是fldz为了不使程序出错,这一句一定要手动加上
jmpreturnhere跳转退出,返回原程序继续执行
”Tutorial—i386。
exe"+250C6:
jmpnewmem
returnhere:
注入代码结束位置
点击运行,然后返回教程点击RestartgameandAutoplay,会看到自己的队友不减血而敌人一会儿就挂了。
下面说第2种注入方法。
先来考虑一种情况,如果要队友、敌人减血,那么至少应该有一个“减”运算操作吧,那么我们在内存查看器窗口中,从250C6处往上翻,如果没有程序调用(call*****这样的代码),那么往上第一个减运算一定是减血操作了。
我们往上看,到2509D(不同电脑地址可能不同!
)这儿果然看到了fsubr(这代表什么意思请自觉汇编语言):
好了,现在开始另一种注入方法,直接改写这儿的代码,如果是敌人就减血,如果是自己的队友就加血,而且可以实现一击必死(直接减敌人100W的血,他不死才怪)。
选中2509D这一行,点工具—自动汇编,然后点模板—代码注入。
这里直接上我自己写的代码并附解释:
alloc(newmem,2048)//2kbshouldbeenough
label(returnhere)
label(originalcode)
label(exit)
newmem:
//thisisallocatedmemory,youhaveread,write,executeaccess
//placeyourcodehere
cmp[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:
jmpnewmem
nop
returnhere:
返回原程序
好了,点击Restartgameandautoplay,看到如下结果,队友不仅没减血,而且还加血了.搞定!
如何实现一击必死呢?
可以参考如下代码,是CE论坛上找到的,不做说明,自己看吧。
//MadebysvchostwithCheatEngine6.2RC1
//4thMay,2012
[ENABLE]
alloc(StoreHealthAddress,2048)
label(StoreHealthAddressReturn)
alloc(WriteHealthAddress,2048)
label(WriteHealthAddressReturn)
globalalloc(Player1_Dave,4)
globalalloc(Player2_Eric,4)
globalalloc(Enemy1_Hal,4)
globalalloc(Enemy2_Kitt,4)
label(WriteOrignal)
label(IsPlayer1_Dave)
label(IsPlayer2_Eric)
label(IsEnemy1_Hal)
label(IsEnemy2_Kitt)
//-—--——-—--—---————--——————---——-—---——--
//ReadAndStoreAddressForLaterComparison
//-—————-——------—--———----------——------—
//At”tutorial-i386。
exe”+2504Caddress,ebxisconstantforHealthAddressCalculation
”tutorial-i386.exe"+2504C:
jmpStoreHealthAddress
nop
nop
nop
nop
nop
nop
StoreHealthAddressReturn:
StoreHealthAddress:
//FrombelowIcalculatedManuallyHealthAddress
//AndstoredattheCustomAddress
//Note:
-ForHealthaddress,add4toit。
eg.add[Player1_Dave],4
//meansvalueatthe[Player1_Dave]istheHealthAddress。
pushecx
movecx,[ebx+49C]//Offset-〉49CPlayer1
mov[Player1_Dave],ecx
popecx
pushecx
movecx,[ebx+4A0]//Offset—>4A0Player2
mov[Player2_Eric],ecx
popecx
pushecx
movecx,[ebx+4A4]//Offset->4A4Enemy1
mov[Enemy1_Hal],ecx
popecx
pushecx
movecx,[ebx+4A8]//Offset—〉4A8Enemy2
mov[Enemy2_Kitt],ecx
popecx
//Frombelowitisorignalcodeatthe”tutorial-i386.exe”+2504C
movebx,eax
movesi,edx
mov[ebp—3C],00000000
jmpStoreHealthAddressReturn
//--------—-—-—-—--——-———-—————-————-—-—-—
//WriteAddress
//—-———-——-—--——---—--—--—----——--—-—-----
//AtthisAddressFriendlyaswellasEnemyHealthisDecreasing
"Tutorial-i386.exe”+250C6:
jmpWriteHealthAddress
WriteHealthAddressReturn:
//NowI’mcheckingtheHealthaddressForeachplayerseperately。
WriteHealthAddress:
cmpebx,[Player1_Dave]
jeIsPlayer1_Dave
cmpebx,[Player2_Eric]
jeIsPlayer2_Eric
cmpebx,[Enemy1_Hal]
jeIsEnemy1_Hal
cmpebx,[Enemy2_Kitt]
jeIsEnemy2_Kitt
jmpWriteOrignal
jmpWriteHealthAddressReturn
//—-——--——--——-——-—-—-————-—-—-————-
IsPlayer1_Dave:
mov[ebx+04],(float)99999
fldz
jmpWriteHealthAddressReturn
IsPlayer2_Eric:
mov[ebx+04],(float)99999
fldz
jmpWriteHealthAddressReturn
IsEnemy1_Hal:
mov[ebx+04],(float)0
fldz
jmpWriteHealthAddressReturn
IsEnemy2_Kitt:
mov[ebx+04],(float)0
fldz
jmpWriteHealthAddressReturn
//—-—-——-—--—---———-——-——-——--—--—-—
WriteOrignal:
mov[ebx+04],eax
fldz
jmpWriteHealthAddressReturn
[DISABLE]
dealloc(StoreHealthAddress)
"tutorial-i386.exe"+2504C:
movebx,eax
movesi,edx
mov[ebp-3C],00000000
dealloc(WriteHealthAddress)
"Tutorial—i386.exe”+250C6:
mov[ebx+04],eax
fldz
注意上面的偏移地址有所不同,要记得按自己的实际情况来修改。
第8关、9关视频教程下载地址(下载后设置下载地址为其他颜色即可查看):
下载地址
http:
//pan。
baidu。
com/share/link?
shareid=52597&uk=2802192375
作者:
NGKiller@Gmail。
Com原创.转载请注明作者!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word CE 修改 傻瓜 教程