在看了騰訊游戲競(jìng)賽;發(fā)現(xiàn)對(duì)游戲了解太少充包,在調(diào)試的時(shí)候盡管可以跟進(jìn)關(guān)鍵部分椎椰。但是不了解引擎,游戲坐標(biāo)建模這些楣责;感覺(jué)看到了也沒(méi)什么感覺(jué)笋轨。所以就先學(xué)了下CE這個(gè)對(duì)游戲的作弊引擎;最起碼能做出個(gè)改視角的題家浇。
CE作弊引擎本砰,可以更改游戲中內(nèi)存數(shù)據(jù),視角的修改钢悲。而且其中還有代碼注入点额,反匯編,調(diào)試的功能莺琳。在其中支持lua語(yǔ)言,D3D功能还棱。其他的功能還要慢慢試了。
最新的版本到了6.83惭等,我用的是6.5珍手。
軟件特意加了關(guān)卡,來(lái)幫助新手們學(xué)習(xí)使用CE-- Tutorial
通過(guò)這個(gè)關(guān)卡來(lái)學(xué)習(xí)下使用
step - 1
算是告訴你怎么才算通關(guān)辞做,只要滿足某些條件琳要;Next按鈕就可以點(diǎn)擊到下一步。
step - 2 - 數(shù)值搜索
要求是將我們的血量改為1000
首先點(diǎn)擊加載進(jìn)程凭豪,找到Tutorial焙蹭。
搜索血量值:100 ,會(huì)找到很多嫂伞;這時(shí)就需要不斷點(diǎn)擊Hit me來(lái)改變血量來(lái)鎖定具體數(shù)值孔厉。
然后將找到的數(shù)據(jù)添加到下方的table中
更改為1000進(jìn)入下一關(guān)。
step - 3 未知數(shù)值
有些時(shí)候帖努,我們看不到具體的血量撰豺,我們?cè)诠舻臅r(shí)候可以看到減少的數(shù)值。將這個(gè)血量改為500
這就是本關(guān)的情景拼余,點(diǎn)擊 new scan 開(kāi)始新的搜索污桦。
將搜索類(lèi)型改為未知
之后添加到 table 中,改為 500 即可匙监。
step - 4 浮點(diǎn)類(lèi)型
將搜索的類(lèi)型改為float double凡橱,其他和之前操作類(lèi)似,更改為5000即可亭姥。
step - 5 代碼查找器
儲(chǔ)存數(shù)據(jù)的地址不是固定不變的稼钩,每一次重啟游戲通常都會(huì)變動(dòng),甚至在你玩游戲的過(guò)程中地址都有可能改變达罗,這一關(guān)講解使用代碼查找的方法坝撑。
找到數(shù)值添加到 table 中静秆,點(diǎn)擊 find out what writes to address
可以看到此處控制數(shù)據(jù)的變化,將這處匯編使用nop填充巡李,之后數(shù)據(jù)的地址便不會(huì)更改抚笔。
其實(shí)是在這個(gè)地方會(huì)下一個(gè)斷點(diǎn),為了不影響以后操作將斷點(diǎn) stop 取消侨拦。
在高級(jí)選項(xiàng)中可以將更改的代碼再次恢復(fù) restore with ordinal code
step - 6 指針
在前面的步驟中殊橙,我解釋了如何使用代碼查找器來(lái)處理更改的位置。但僅此方法就很難找到設(shè)置所需值的地址狱从。
這就是為什么有指針:
底部有兩個(gè)按鈕蛀柴。一個(gè)更改值,另一個(gè)更改值和值的位置矫夯。
對(duì)于這一步,您不需要真正了解匯編程序吊洼,但如果您了解匯編程序训貌,它會(huì)有很大幫助。
首先找到值的地址冒窍。當(dāng)您找到它時(shí)递沪,使用函數(shù)來(lái)找出訪問(wèn)這個(gè)地址的對(duì)象。
再次更改該值综液,列表中將顯示一個(gè)項(xiàng)目款慨。雙擊該項(xiàng)目。(或選擇并單擊“更多信息”)谬莹,將打開(kāi)一個(gè)新窗口檩奠,其中包含有關(guān)運(yùn)行指令時(shí)發(fā)生的情況的詳細(xì)信息。
如果匯編程序指令在“[”and“]”之間沒(méi)有任何內(nèi)容附帽,則使用列表中的另一項(xiàng)埠戳。
如果它做了,它會(huì)說(shuō)它認(rèn)為什么是你需要的指針的值蕉扮。
返回到作弊引擎主窗口(如果需要整胃,您可以保持這個(gè)額外的信息窗口打開(kāi),但如果關(guān)閉它喳钟,請(qǐng)記住[和]之間的內(nèi)容)屁使,并用十六進(jìn)制對(duì)額外信息告訴您的值進(jìn)行4字節(jié)掃描。
掃描完成后奔则,它可能會(huì)返回1個(gè)或幾百個(gè)地址蛮寂。大多數(shù)時(shí)候,你需要的地址都是最小的∮τ現(xiàn)在單擊“手動(dòng)添加”并選中“指針”復(fù)選框共郭。
窗口將更改并允許您鍵入指針地址和偏移量。
把你剛找到的地址填成地址。
如果匯編程序指令在末尾有一個(gè)計(jì)算(例如:[ESI+12])除嘹,則在末尾鍵入該值写半。否則,請(qǐng)保留0尉咕。如果是更復(fù)雜的指令叠蝇,請(qǐng)看計(jì)算。
更復(fù)雜的指令示例:
[eax*2+edx+00000310]eax=4c年缎,edx=00801234悔捶。
在這種情況下,edx是指針的值单芜,eax*2+00000310是偏移量蜕该,所以您要填寫(xiě)的偏移量是2*4c+00000310=3a8。(這都是十六進(jìn)制的洲鸠,使用科學(xué)模式下Windows中的calc.exe進(jìn)行計(jì)算)
回到教程中堂淡,單擊“確定”,地址將被添加扒腕,如果一切正常绢淀,地址將顯示P->XXXXXXX,其中XXXXXXX是您找到的值的地址瘾腰。如果這不正確皆的,你就做錯(cuò)了。
現(xiàn)在蹋盆,使用您在5000中添加的指針更改值并凍結(jié)它费薄。然后單擊“更改指針”,如果一切都結(jié)束
右鍵“下一步”按鈕將變?yōu)榭梢?jiàn)怪嫌。
額外的:
你也可以使用指針掃描器找到指向這個(gè)地址的指針
說(shuō)的很詳細(xì)义锥,操作細(xì)節(jié)都寫(xiě)上了;這里說(shuō)的是另外一種更改數(shù)據(jù)的方法岩灭,通過(guò)指針進(jìn)行查找拌倍。
還是先找到數(shù)據(jù)添加到 table 表中 ,找到此處數(shù)據(jù)所在的位置噪径。
點(diǎn)擊More information
記下這個(gè)數(shù)據(jù)柱恤,這是指針?biāo)诘牡刂罚业街筇砑拥?table 中
記下這個(gè)數(shù)據(jù)的基址
點(diǎn)擊添加地址
指針填的是基址找爱,之后添加此地址梗顺,鎖定更改數(shù)據(jù)即可
step - 7 代碼注入
將傷害由 1 改為加 2
找到
通過(guò)show asemable 中的 tools,找到auto assemble
之后就可以更改了
step - 8 多級(jí)指針
點(diǎn)擊 Change pointer之后的 3 秒內(nèi) 將新的數(shù)值鎖定在 5000车摄。
在步驟6中寺谤,您有一個(gè)簡(jiǎn)單的級(jí)別1指針仑鸥,找到的第一個(gè)地址已經(jīng)是實(shí)際的基地址。
然而变屁,這個(gè)步驟是一個(gè)級(jí)別4指針眼俊。它有一個(gè)指向指向指向指向指向運(yùn)行狀況的指針的指針。
同時(shí)記下地址數(shù)值粟关,按照這個(gè)數(shù)據(jù)來(lái)找到指針
通過(guò)
Find out what accesses this address 來(lái)找到以下兩條指令
這里多級(jí)指針的意思就是不斷向上級(jí)地址
不斷向上查找找到源頭
依次查到偏移為18 0 14 c
(不清楚在那里出了錯(cuò)誤疮胖,有一會(huì)所有地址都無(wú)法搜到,重啟幾次程序就好)
step - 9 共享代碼
有時(shí)候使敵人掉血的代碼和使自己掉血的代碼是同一個(gè)代碼闷板,單純修改這個(gè)代碼會(huì)使要么同時(shí)對(duì)自己和敵人有利澎灸,要么同時(shí)有害,而不是對(duì)自己有利遮晚,對(duì)敵人有害性昭。
這一關(guān)重現(xiàn)了這樣一種情況:己方初始血量很少,且被攻擊一次掉血很多县遣,敵方初始血量很多巩梢,且每次攻擊只掉1滴血。
你需要做的是:不使用鎖定艺玲,讓己方不死,而敵方陣亡鞠抑。
按照之前的找到四個(gè)數(shù)據(jù)饭聚,進(jìn)行代碼注入
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) // 在這里定義一個(gè)標(biāo)簽
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 // 如果相等的話,則跳轉(zhuǎn)到 no_decrese_health 標(biāo)簽
originalcode:
mov [ebx+04],eax
no_decrese_health: // 在這里使用這個(gè)標(biāo)簽
fldz
exit:
jmp returnhere
"Tutorial-i386.exe"+265B7:
jmp newmem
returnhere:
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(no_decrese_health) // 在這里定義一個(gè)標(biāo)簽
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 // 如果相等的話搁拙,則跳轉(zhuǎn)到 no_decrese_health 標(biāo)簽
cmp byte ptr [ebx+15], 45 // 判斷 [ebx+15] 是否為 E
je no_decrese_health // 如果相等的話秒梳,則跳轉(zhuǎn)到 no_decrese_health 標(biāo)簽
originalcode:
mov [ebx+04],eax
no_decrese_health: // 在這里使用這個(gè)標(biāo)簽
fldz
exit:
jmp returnhere
"Tutorial-i386.exe"+265B7:
jmp newmem
returnhere:
這是找的兩個(gè)方法,點(diǎn)擊重啟便會(huì)退出箕速,不過(guò)其他人的會(huì)顯示一個(gè)well done 提示框酪碘,就很難受。
ps:我沒(méi)有用新版本的原因是在win10上面盐茎,所有的操作都會(huì)彈框報(bào)錯(cuò)就沒(méi)有再管