遊戲外掛編程---編寫外掛的特點和CE(1-8)教程

 

遊戲外掛編程
1。工具
VB
SPY LIST 窗口句柄捕捉工具
Cheat Engine 內存地址修改工具
2。瞭解外掛的特點
本人想製作的外掛
(1)在程序中呼叫程序。
(2)有個主窗口
(3)能修改遊戲中的數值。
瞭解VB的使用
瞭解SPY++的使用
先了解CE的使用
步驟 2: 精確數值掃描 (密碼=090453)
現在你已經在CE中打開了TUT[Tutorial],讓我們進入到下一步吧.

你看到在這個窗口的下方的血值:XXX ,每次你點擊"打我"時,你的血會減少.

要進到下一個步驟,你必須找到這個數值並把它改爲1000.

要找到這個數值,有幾個不同的方法,但我會告訴你一個最簡單的:精確數值掃描,

首先確認數值類型設置爲2字節或4字節,1字節也可以的,但最後在修改它時會有點麻

煩(但很容易解決)

(提示:1字節表示的最大數值是255,這裏要你改爲1000,但用1字節找到後要連前一字

節一起改,所以有
點麻煩)。

如果這個地址後面是0的話,8字節可能也可以,不過我不保證。單浮點數,雙浮點數,

以及其他的掃描方
式不行,

因爲它們儲存數值的方式不同。

當數值類型設置正確後,確認掃描方式設置在"精確數值",把血的數值填在數值輸入

框上,並點擊"首次
掃描"

過一會兒(電腦非常慢的話)如果找到的地址的數量少於設置的數值,在掃描完成後掃描

的結果會顯示在左
邊.

如果你找到不止一個地址而你不知道哪一個是正確的地址,點擊TUT上的"打我",並把

新的血的數值填到

數值輸入框,並點"再次掃描",重複這些步驟直到你確認你已經找到它的地址了(在地

址列表上只有一個
地址)

現在雙擊左邊列表上的地址,這樣會讓這個地址移動到下方的列表上並顯示它的當前

數值.

雙擊(下方列表的)數值欄(或者選擇它,並按回車),並把它修改爲1000.

如果一切都OK,下一步按鈕將會變成可點擊的了,你就準備好了進入下一步了.


提示:
如果你在掃描過程中做錯了,可以點擊"新掃描"重新再來.當然,你也可以點 '打我'去

找一些更有價值的
東西.

精確掃描: 四字節


//////////////////////////////////////////////////


步驟 3: 未知初始數值 (密碼=419482)
OK,看來你已經理解了怎樣使用精確數值掃描找到一個數值了,讓我們進入下一步吧.

在上一步中我們知道初始數值所以我們進行了精確數值掃描,但現在我們有一個進度

條,我們不知道它
開始時的數值.我們只知道這個數值是在0到500之間,並且每次你點"打我"之後你會減

一些血,每次減的
血量會顯示在進度條的上方。

同樣的有好幾個方式找這個數值,(例如使用“減少了什麼數值”的掃描方式),但我

只解釋最簡單的方
式,“未知初始數值”和“減少了的數值”。

因爲你不知道現在它的數值是多少,所以使用精確數值不行了,所以選擇掃描方式爲"

未知初始數值",
同樣的,數值類型選擇4字節,(大多數WINDOWS應用程序使用4字節數據).
點擊"首次掃描"並等它掃描完成.

當掃描完成後點擊"打我",你會掉一些血. (掉的血量多少會在血條上方顯示幾秒然後

消失
但你不需要這個數值)
現在回到CE,並選擇"減少了的數值",並點擊"再次掃描"
當掃描完成後,再次點擊"打我",並重覆上面的步驟,直到你找到了若干地址.

我們知道這個數值是在0到500之間,所以選擇比較象我們要的那個地址是,並把它加

到下邊的列表.
現在,把它改爲5000,才能進到下一步.

點擊新掃描。
掃描類型:未知初始化數值
數值類型:4字節
點擊 首次掃描
點擊 減少數字
////////////////////////////////////////////////
驟 4: 浮點數 (密碼=890124)
在前面的教程中,我們使用字節來掃描,但有些遊戲使用了"浮點數"的記數方法.

(可能是爲了防止簡單的內存掃描),浮點數是帶有小數點的一些數字(如5.12或

11321.1)。

如下邊你看到你的血和子彈。兩者都以浮點數儲存,但血是單精度浮點數而子彈是爲

雙精度浮點數
.
點擊[打我]可以減少一些血,而點擊[射擊]可以用掉0.5的子彈

你得把這兩者都修改到5000或者更多才能進下一步.

"精確數值掃描"方式在這一步能工作得很好,但也許你想試試其他的掃描方式.

提示: 不推薦"快速掃描" 雙精度類型

點擊新掃描。
掃描類型:兩個數值之間

數值類型:浮點數值
點擊 首次掃描
第二次。。。
掃描類型:兩個數值之間

數值類型:雙浮點數值
點擊 首次掃描
///////////////////////////////////////////////////////////////
步驟 5: 代碼尋找 (密碼=888899)
有時一些東西的保存位置在你重新開始遊戲時會改變,甚至是在你玩的時候也會變,

在這種情況下,你
用2步仍然能做出可以用的內存列表.

在這一步會說明怎樣用尋找代碼功能

下面的數值每次你開始這個TUT的時候會存放在不同的位置,所以一個普通的內存地址

列表將會不管用.

首先找到這個數值的內存地址.當你找到地址後,右擊CE中的這個地址,並選擇"查找寫

入該地址的代碼",
一個窗口將會出現,上面會有一個空的列表.

然後,點擊這個TUT上的"改變數值"按鈕,回到CE,如果一切都做得對,會看到一個地址和

一些彙編代碼.
點擊這個地址並選擇"替換"選項把它替換成什麼也不做的代碼,這樣還會將代碼地址

加到高級選項窗口
上的代碼列表(如果你保存地址表它將會一起保存)。)

點擊"停止",這樣遊戲(TUT)將會再次正常地運行下去,並點"關閉"關掉這個窗口.

現在,點擊TUT上的"改變數值"按鈕,如果一切都做對,"下一步"按鈕將會變成可點擊

的了.

提示:如果你以足夠快的速度鎖定這個地址,"下一步"按鈕也會變成可點擊的.

點擊新掃描。
掃描類型:精確

數值類型:4字節
點擊 首次掃描
掃描到地址。
右鍵---查找寫入該地址的代碼
選擇地址,把CE幫定在地址上面

點擊幫助窗口中的改變數值
找出彙編欄中的彙編代碼
替換爲NOP
///////////////////////////////
步驟 6: 指針: (密碼=098712)
上一步解釋了怎樣用代碼尋找功能對付變化位置.但單獨用不容易找到地址並修改成你

要的數值.
這就是爲什麼要用到指針了.

在TUT下面有兩個按鈕,一個會改變數值,另一個不但會改變數值並且還會改變數值在

內存中的位置.

在這一步,你不需要真的懂彙編,但如果你懂的話會很有幫助.

首先找到數值的地址,當你找到後,再找找是什麼在改寫這個地址。再次改變這個數

值,這樣會找到一
個代碼地址,雙擊這個代碼地址(或者選擇它並點擊更多信息),這樣一個新的窗口會

打開並顯示詳細的
信息告訴你當這個指令運行時會發生什麼事(提示:這個新出來的窗口上,那條指令會

是紅色的)。
如果這個彙編指令裏面沒有包括一個在方括號中的東西,(提示:說明這個不是我們要

的)
那麼再看看代碼地址列表中另一個代碼地址。如果有方括號,就是說CE認爲找到了數

值的指針了.

回到CE主窗口,(你可以讓那個擴展信息窗口開着,但如果你關了,要記住在方括號中

間的內容)

(提示:要關了那個有代碼地址列表的窗口,才能回到CE主窗口,但擴展信息窗口可以

不用關掉)

並做一次4字節的掃描,掃描擴展信息窗口告訴你的十六進制數。(提示:就是方括號

裏面的內容,
如果方括號裏面是[eax],那麼看看擴展信息窗口下面EAX=後面的數值)。

當掃描完成時它可能返回一個或幾百個地址。大多數情況下你要的會是最小(提示:指

地址最小,
也就是排在列表的最上面)那一個。

現在點擊手工添加內存地址並在"指針"這個選項上打勾.

這個窗口將會改變,並允許你填入指針的地址和偏移量.在地址那裏填入你剛纔掃描到

的地址.

如果彙編指令在後面有一個計算(例如:[esi+12])那麼把數值填在後面,否則讓它保

持0

(提示:就是如果有類似那樣的計算,把12這個數值填在偏移量那裏,否則那裏填0),
如果是更復雜的指令,看看它的算式.舉例說明更復雜的算式:

[EAX*2+EDX+00000310] eax=4C 並且 edx=00801234.

(提示:這時各個寄存器的值在擴展信息窗口下方,那裏有各個寄存器在執行這條指令時

的值).

在這個情況下EDX會是數值的指針,而EAX*2+00000310則是它的偏移量,所以你要填的

偏移量會是
2*4C+00000310=3A8.(這些都是在十六進制下計算的,使用WINDOWS的計算器在科學方

式下用十六進制計
算).

點擊新掃描。
掃描類型:精確

數值類型:4字節
點擊 首次掃描
掃描到地址。
右鍵---查找寫入該地址的代碼
選擇地址,把CE幫定在地址上面

點擊幫助窗口中的改變數值
找出彙編欄中的彙編代碼
雙擊彙編代碼----查找擴張彙編地址
01f3da48(注意:這個數值是在EAX中 指令中[]內
掃描這個16進制地址 4次
找到最小地址0045DC34
手動添加內存地址 並勾上指針項
建立一個指針
改變指針所指的內容5000 注意要“縮定”

然後就可以了

並做一次4字節的掃描,掃描擴展信息窗口告訴你的十六進制數
//////////////////////////////////////////////////////////////////
步驟 7: 代碼注入: (密碼=013370)
代碼注入是一個將一小段代碼注入到目標進程中的技巧,然後使這個進程執行你寫入的自己的代碼

在這一步教程中,你將有一個血值和一個"打我"按鈕,這個按鈕每按一次將減少1點血值。
你的任務是使用代碼注入來增加這個生命值,使得每按一次按鈕增加2點血值

開始查找這個地址然後進入"查找寫入此地址的代碼".
然後減小生命值,當你已經找到地址後,點擊"顯示反彙編程序", 並找到這個地址,然後打開
自動彙編窗口(菜單-工具->自動彙編)(Ctrl+a),在"模板"上點擊然後再點擊"代碼注入",
並給出減少生命值的地址(如果程序沒有正確填寫的話)
那樣,將產生一個基本的自動彙編程序窗口你可以用於你的代碼.

注意alloc, 那將用於爲你的代碼分配內存, 而在Win2000系統之前, 這種行爲存在安全隱患,是不安
全的(提示:在Win2000以前,對系統內存進行分配及代碼查找之類的操作,可能會導致系統崩潰),幸運的是
這種情況在win2000以後的版本得到改善
同樣,也要注意line newmem語句及原始代碼,以及文本"此處放置你的代碼",正如你猜測的那樣,在這
兒寫下你每次增加2點生命值的代碼.
在這種情況下,一個有用的彙編指令是"ADD".
下面是一些示例:
"ADD [00901234],9" 使[00901234]地址的值增加9
"ADD [ESP+4],9"   使地址指針[ESP+4]的值增加9
在這種情況下,你必須使用同樣的東西在括號裏表示減少血值的原始代碼

注意:
推薦你從原始生成代碼中刪除減少你血值的那行代碼, 否則你將不得不增加3點生命值(你增加3點,而
原始代碼減少1點,那樣最終結果是增加2點),這樣可能會造成混亂.

注意2:
在一些遊戲中,原始代碼可能存在在多指令之外,並且某些時候(並非一直如此),這可能會發生在其他地方
跳轉到你的跳轉指令結束,那樣將引起未知的行爲.如果這種情況發生的話,你通常應該查看附近的指令,
查看跳轉情況並進行修改,或者選擇使用一個不同的代碼注入開始地址.
最後,點擊 "寫入代碼"


第八步: 多級指針 (密碼=525927)
7PWeaT >< Step 8: Multilevel pointers: (PW=525927)
$R 'ye$*fC ................................
Xo ^ 3* 這個窗口的下方的數值2025 還有Change value和Change pointer兩個按鈕。
,- ]n$8cSy
0 gbCn2cg} 開始指針掃描,選擇CE輸入掃描數值,如有看到New Scan先點擊它後才輸入數值。
&r%F_J(u0
7]E$GB18o Value :2025
QL 3T CV Scan type :Exact Value
HCF d- Value type:4 Bytes
z7Oq"D Cd
6sa -=/Z r 點擊First Scan →Found:1 →選擇TUT並點擊Change value →雙擊列表上找到的地址將它加入
7Ok D^EQ L 下方的列表並右擊地址,即Address下面(不是數值哦)。在右鍵菜單選擇
Cm I r[A7~ “Find out what writes to this address”,這會彈出“The following opcodes ch...."
v?pGi2?"iJ 一個空的列表窗口。選擇TUT點擊ChangeValue這就會將改變的地址加入空列表中並選擇它後點擊
}* a%k ~s9 Show Disassembler按鈕,這會彈出“Memory Viewer”窗口。在窗口列表選擇最上面的地址並記住它,
HpT @ W= 然後點擊列表右邊滾動條上面的箭頭,將地址滾向下面要記住剛纔的地址哦,
o%%v}o aZ:
_yluj }VT3 列如:
L E4 |8W 5. :00456153 - a1 18 c.. - mov eax,[0045cc18] 這記下0045cc18
7[SjXWu Uc 4. :00456158 - 8b 40 0c - mov eax,[eax+0c]
&WQ{ l # 3. :0045615B - 8b 40 14 - mov eax,[eax+14]
} u[Ey/1th 2. :0045615E - 89 00 - mov eax,[eax]
?R V6**5 1. 是最上面的地址 :00456160 - 89 70 18 - mov [eax+18],esi 向下滾動後到這裏,
d#r4 ]O c 現在要寫下這以上的4個地址的數值,這要從下向上數。我將倒數的地如下:
%jN)R2} 8E 1. :00456160 - 89 70 18 - mov [eax+18],esi 這記下 18
"qF m(Ro 2. :0045615E - 89 00 - mov eax,[eax] 沒有+號這記下 0
C T? bw 5 3. :0045615B - 8b 40 14 - mov eax,[eax+14] 這記下 14
:v9 luqyd 4. :00456158 - 8b 40 0c - mov eax,[eax+0c] 不要0這記下 c
Mg`WU@{PB
l 40 iikt 記下了就選擇CE然後點擊“Add address manually”,這會彈出Add address對話板,
Sijyy ?iJ< 將Pointer旁邊的小方格打勾,點擊3次Add pointer按鈕,這樣就有4個Address of pointer,
q} [] : 然後將數值填入
{rqpUAh_q Address of pointer:不填 Offset (Hex):18
+l 6 WQa Address of pointer:不填 Offset (Hex):0
> DfoR_CB Address of pointer:不填 Offset (Hex):14
@FtG s 4(5 Address of pointer: 0045cc18 Offset (Hex):c
^ o h8 O
EKH! _ ! 然後點擊OK鍵。現在雙擊CE下方列表地址前面帶有P->00D722E8地址的數值(Value),這會彈出
mDCKC Z= Value對話板,將數值修改爲5000,先不要點OK鍵並將Value對話板移到TUT的Change pointer
0 JF 4 L 按鈕的下方,既是當我選擇了TUT的時候也能看得見Value對話板的OK鍵,這樣我就可以在點了
T( oQVw u TUT的Change pointer按鈕後能快速的點擊得到Value對話板的OK鍵(3秒鐘內)。
[ y{ fO z 我哈哈!!點到了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章