dnf外掛編寫(xiě)教程原理

dnf外掛編寫(xiě)教程原理

ID:34722700

大?。?3.53 KB

頁(yè)數(shù):6頁(yè)

時(shí)間:2019-03-10

dnf外掛編寫(xiě)教程原理_第1頁(yè)
dnf外掛編寫(xiě)教程原理_第2頁(yè)
dnf外掛編寫(xiě)教程原理_第3頁(yè)
dnf外掛編寫(xiě)教程原理_第4頁(yè)
dnf外掛編寫(xiě)教程原理_第5頁(yè)
資源描述:

《dnf外掛編寫(xiě)教程原理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)

1、我們?cè)谑褂肙D做CALL調(diào)試的時(shí)候大家都會(huì)選擇嵌入一句__asmINT3;來(lái)讓OD自動(dòng)斷在我們需要的代碼處。經(jīng)過(guò)測(cè)試發(fā)現(xiàn)DNF攔截了INT3的中斷門(mén),一旦程序運(yùn)行到INT3就會(huì)跳轉(zhuǎn)到DNF內(nèi)的一段代碼,直接將游戲T下線。在這里呢就不講如何恢復(fù)了,對(duì)我來(lái)說(shuō)這個(gè)還做不到,于是想到了一個(gè)替代辦法,沒(méi)腦人也能做成事,多出點(diǎn)傻力氣也就可以了。言歸正傳?;蛟S許多人對(duì)SYSER的操作還不熟悉,這里就詳細(xì)的按步說(shuō)下。在我們寫(xiě)打DLL代碼中,想在哪里斷下我們就在那個(gè)位置添加一句:__asmMOVEAX,1F0001??這樣做的前提是:你接下來(lái)的代碼不會(huì)使用到EAX的數(shù)據(jù),如果使用到了,你可以

2、更換成其他的對(duì)下面代碼沒(méi)有影響的寄存器。另外你還要能夠手工觸發(fā)你的被測(cè)試代碼,例如按某個(gè)鍵就執(zhí)行你需要測(cè)試的代碼。上面的條件都滿足了那我們繼續(xù):CTRL+F12進(jìn)入SYSER的界面,輸入命令:ADDRDNF進(jìn)入DNF的領(lǐng)空,鼠標(biāo)點(diǎn)擊菜單Tools菜單,選擇第一項(xiàng):MemorySearch也就是內(nèi)存搜索工具,彈出搜索對(duì)話框我們?cè)O(shè)定第一項(xiàng)TYPE為DWORD,搜索內(nèi)容自然是1F0001,接下來(lái)是Range也就是搜索區(qū)域設(shè)置,我們點(diǎn)擊Selectmodule按鈕來(lái)選擇當(dāng)前DNF的類(lèi),在列表中選擇你要測(cè)試的代碼所在的類(lèi),雙擊類(lèi)名稱(chēng)后面的起始地址,這樣搜索范圍就被固定在這個(gè)類(lèi)中了。點(diǎn)

3、下find按鈕,在內(nèi)存顯示窗口內(nèi)就會(huì)出現(xiàn)匹配的數(shù)據(jù)了,我們需要的是數(shù)據(jù)的地址。得到數(shù)據(jù)的存儲(chǔ)地址后,我們?cè)谙旅娴拿畲翱谳斎朊睿篣地址??注意這里的地址就是剛剛我們得到的數(shù)據(jù)存儲(chǔ)地址,U后面是有空格的。命令成功執(zhí)行后,我們可以移動(dòng)下代碼窗口右側(cè)的滾動(dòng)條,讓SYSER得以正確識(shí)別代碼。這里我們說(shuō)下為什么選擇使用1F0001這個(gè)數(shù)值,大家通過(guò)上面步驟看到了,它其實(shí)的作用就是一個(gè)特征碼,既然是特征碼,它越具有唯一性對(duì)我們的尋找也就越有幫助,通過(guò)上面的步驟如果運(yùn)氣好的話,那找到的就是你自己的代碼,也就是:__asmMOVEAX,1F0001;所在的,你的程序里的位置,如果不是的話

4、可以繼續(xù)搜索findnext,我想大家都應(yīng)該有能力識(shí)別出到底找到的地方是不是自己想要的地方,如果連自己的程序反匯編后事什么樣都判斷不出來(lái)的話,不建議看本文,還要多加努力。我們通過(guò)特征碼方式找到了自己的程序特定的代碼段,剩下來(lái)的工作就是F9在這里下個(gè)斷點(diǎn)了,呵呵,然后一切隨你操作了就,人工斷點(diǎn)完成。單步步進(jìn)快捷鍵F11,步過(guò)F10,繼續(xù)運(yùn)行F5,或者輸入命令X尋找血量計(jì)算方法:當(dāng)鼠標(biāo)放置于血條上會(huì)有提示信息出現(xiàn)(這里很重要必須將鼠標(biāo)放置在血條上,顯示出信息后再呼出SYSER的調(diào)試窗口,同時(shí)鼠標(biāo)也不要?jiǎng)?,就停留在這里),顯示出當(dāng)前血量和最大血量,我們就從這里入手來(lái)找到血量的計(jì)算

5、函數(shù)。將鼠標(biāo)放置于DNF的血條上CTRL+F12呼出syser調(diào)試窗口用第一節(jié)里我們使用過(guò)的內(nèi)存搜索工具在DNF的內(nèi)存范圍內(nèi)進(jìn)行搜索,類(lèi)型是Text(Ansi),搜索我的最大血量1375很快在地址:00E23C78這里發(fā)現(xiàn)了完整的顯示信息:“HP:756/1375”,而且這個(gè)地址是個(gè)常量,固定功能就是存儲(chǔ)顯示信息,此處的00E23C78是用來(lái)存儲(chǔ)血和藍(lán)的臨時(shí)顯示信息,稍后大家就會(huì)自然明白。數(shù)據(jù)找到了,接下來(lái)就是對(duì)這塊內(nèi)存下內(nèi)存寫(xiě)入斷點(diǎn):bpmd00E23C78這里注意:內(nèi)存斷點(diǎn)共有4個(gè)命令,bpmbpmbbpmwbpmd,后三個(gè)依次是對(duì)內(nèi)存下BYTE、WORD、DWORD的

6、斷點(diǎn)。這里下完的斷點(diǎn)經(jīng)常會(huì)引起DNF崩潰,大家自己摸索規(guī)律來(lái)讓自己順利完成跟蹤和分析。下完斷點(diǎn)后按F5或者輸入X命令讓游戲繼續(xù)運(yùn)行,屏幕一閃隨后斷了下來(lái)。在沒(méi)有真正分析代碼之前請(qǐng)大家回憶下自己寫(xiě)掛的經(jīng)歷,這有助于開(kāi)拓思路。因?yàn)檠吭谟螒蜻\(yùn)行過(guò)程中首先是一個(gè)數(shù)字型變量,而我們?nèi)胧值牡胤绞墙缑骘@示部分,別忘了我們是按照Text方式搜索的,所以目前得到的是個(gè)字符類(lèi)型的,從核心計(jì)算到界面顯示必然要經(jīng)歷一個(gè)數(shù)字到字符的轉(zhuǎn)換過(guò)程。我們仔細(xì)看下左邊堆棧里的數(shù)據(jù)情況(現(xiàn)在是斷點(diǎn)生效并且成功斷下來(lái)的時(shí)候),我們看到堆棧里有幾組一眼就能認(rèn)出的數(shù)據(jù),類(lèi)似:“HP:756/1375”這樣的,我們?cè)?/p>

7、過(guò)這些明文的字符數(shù)據(jù)從堆棧繼續(xù)向下找,直到?jīng)]有再出現(xiàn):“HP:756/1375”這樣的數(shù)據(jù),目光停下,然后我們將要尋找的就是血量的數(shù)值,將756和1375分別轉(zhuǎn)換成16進(jìn)制數(shù)得到:2F4和55F,于是我們繼續(xù)向下在堆棧中尋找這2個(gè)16進(jìn)制數(shù),終于發(fā)現(xiàn)他們了,而且是挨在一起的,接下來(lái)的精確定位這2個(gè)數(shù)據(jù)的來(lái)源過(guò)程略過(guò),大家自己完成,我只給出結(jié)果,因?yàn)檫^(guò)程復(fù)雜而且SYSER在單機(jī)上調(diào)試的時(shí)候無(wú)法復(fù)制代碼出來(lái),所以講起來(lái)也很不方便,下面只把最關(guān)鍵的代碼給出來(lái):MOVECX,[00DA3C0C]//取CALL基址MOVED

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。