- 金錢
- 39 金
- 星宮
- 20 宮
- 熱情
- 7 點
- 感謝
- 2 點
- 隕石
- 0 粒
- 不滿
- 0 點
- 在線時間
- 55 小時
- 最後登錄
- 2012-4-16
- 精華
- 1
- 帖子
- 11
- 積分
- 10
- 閱讀權限
- 10
- 註冊時間
- 2009-4-27
- UID
- 2912

- 熱情
- 7 點
- 感謝
- 2 點
- 不滿
- 0 點
- 隕石
- 0 粒
- 金錢
- 39 金
- 星宮
- 20 宮
- 帖子
- 11
- 精華
- 1
- 積分
- 10
- UID
- 2912
|
第六步
【指針(密碼098712)
在上一步我解釋了怎樣用代碼尋找功能對付變化位置。但單獨用那個方法不容易找到地址來修改為你要的數值。
這就是為什麼要用到指針了:
在TUT下面你會找到兩個按鈕,一個會改變數值,另一個不但會改變數值並且還會改變數值在內存中的位置。
在這一步,你不需要真的懂彙編,但如果你懂的話會很有幫助。
首 先找到數值的地址,當你找到後,再找找是什麼在改寫這個地址。再次改變這個數值,這樣會找到一個代碼地址,雙擊這個代碼地址(或者選擇它並點擊More info),這樣一個新的窗口會打開並顯示詳細的信息告訴你當這個指令運行時會發生什麼事(CCB:這個新出來的窗口上,那條指令會是紅色的)。如果這個 彙編指令裡面沒有包括一個在方括號中的東西,(CCB:說明這個不是我們要的)那麼再看看代碼地址列表中另一個代碼地址。如果有方括號,就是說CE認為找 到了數值的指針了。
回到CE主窗口,(你 可以讓那個擴展信息窗口開著,但如果你關了,要記住在方括號中間的內容)(CCB:要關了那個有代碼地址列表的窗口,才能回到CE主窗口,但擴展信息窗口 可以不用關掉),並做一次4字節的掃瞄,掃瞄擴展信息窗口告訴你的十六進制數。(CCB:就是方括號裡面的內容,如果方括號裡面是[eax],那麼看看擴 展信息窗口下面EAX=後面的數值)。當掃瞄完成時它可能返回一個或幾百個地址。大多數情況下你要的會是最小(CCB:指地址最小,也就是排在列表的最上 面)那一個。現在點擊手工添加內存地址(Add address manually)並在pointer(指針)這個選項上打勾。
這個窗口將會改變,並允許你填入指針的地址和偏移量。
在地址那裡填入你剛才掃瞄到的地址。
如果彙編指令在後面有一個計算(例如:[esi+12])那麼把數值填在後面,否則讓它保持0(CCB:就是如果有類似那樣的計算,把12這個數值填在偏移量(OFFSET)那裡,否則那裡填0),如果是更複雜的指令,看看它的算式。
舉例說明更複雜的算式:
[EAX*2+EDX+00000310] eax=4C 並且 edx=00801234.(CCB:這時各個寄存器的值到底是多少,要看擴展信息窗口下方,那裡有各個寄存器在執行這條指令時的值)
在這個情況下EDX會是數值的指針,而EAX*2+00000310則是它的偏移量,所以你要填的偏移量會是2*4C+00000310=3A8.(這些都是在十六進制下計算的,使用WINDOWS的計算器在科學方式下用十六進制計算)。
回到TUT(CCB:?),點擊OK,這個地址將會加到列表上,如果沒搞錯,將會顯示P->xxxxxxxx,xxxxxxxx會是你找到的數值的地址。如果不正確,那你一定是哪裡做錯了。
現在,使用那個指針改變數值為5000並鎖定(就是在下面的地址列表中,點最前面FROZEN那一欄的勾)它,然後(CCB:應該是這裡才回到TUT吧?),點擊'Change pointer'按鈕,如果一切正確,那麼NEXT按鈕將變成可見的了。
額外信息:
在這個TUT中,事實上數值是由一個指針指向另一個指針(CCB:再指向真正的數值,就是使用了「指針的指針」,有點象繞口令:),但要完成這個TUT只需要一個指針。要找到這個指針(CCB:是說要找到指向指針的另一個指針),只要搜索是什麼改變那個指針。
如果你懂彙編,你可能會看到類似這樣的:
mov eax,[ebp-4]
mov eax,[eax+310]
這些別搞混了,只使用擴展信息窗口告訴你的數值。ebp-4指向堆棧中保存了指向這個指針的指針,但堆棧的位置總是在變化,所以不要搜索ebp,而要搜索eax的數值。
】
這 一步,確實就夠複雜了,也許你到這一步真的有點想放棄了。不過,如果我告訴你,這是這個TUT的最後一步了,你還會想放棄嗎?呵呵,堅持啊,看不懂就問, 把CCB這傢伙問倒了才好呢:)。其實這就是對付DMA的方法之一了,就是先找到地址然後找到指針,找到指針就好辦了。
【做得好,你完成了CE的教程了,再玩玩這個TUT並學習一下其他的掃瞄方法怎樣工作的】
第7步 密碼=013370
代碼注入是一個將一小段代碼注入到目標進程中的技巧,然後使這個進程執行你寫入的自己的代碼。
在這一步教程中,你將有一個生命值和一個按鈕,這個按鈕每按一次將減少1點生命值。你的任務是使用代碼注入來增加這個生命值,使得每按一次按鈕增加2點生命值。
開始查找這個地址然後進入「找到寫這個地址的東西」。
然後減小生命值,當你已經找到地址後,顯示反彙編程序(Show disassembler), 並找到這個地址,然後打開自動彙編窗口(Tools菜單->Auto Assemble)(Ctrl+a)
在tmplate上點擊然後再點擊Code Injection,並給出減少生命值的地址(如果程序沒有正確填寫的話)
那樣,將產生一個基本的自動彙編程序窗口你可以用於你的代碼.
注意alloc, 那將用於為你的代碼分配一塊內存, 而在Win2000系統之前, 這種行為存在安全隱患,是不安全的(HZH:在Win200以前,對系統內存進行分配及代碼查找之類的操作,可能會導致系統崩潰),幸運的是這種情況在win200以後的版本得到改善.
同樣,也要注意line newmem語句及原始代碼,以及文本"Place your code here",正如你猜測的那樣,在這兒寫下你每次增加2點生命值的代碼.
在這種情況下,一個有用的彙編指令是"ADD".
下面是一些示例:
"ADD [00901234],9" 使[00901234]地址的值增加9
"ADD [ESP+4],9" 使地址指針[ESP+4]的值增加9
注意:
推薦你從原始生成代碼中刪除減少你生命值的那行代碼, 否則你將不得不增加3點生命值(你增加3點,而原始代碼減少1點,那樣最終結果是增加2點),這樣可能會造成混亂.
注意2:
在一些遊戲中,原始代碼可能存在在多指令之外,並且某些時候(並非一直如此),這可能會發生在其他地方跳轉到你的跳轉指令結束,那樣將引起未知的行為.如果這種情況發生的話,你通常應該查看附近的指令,查看跳轉情況並進行修改,或者選擇使用一個不同的代碼注入開始地址.
最後,點擊 Write code.
=======================
第八步: 多級指針 (密碼=525927)
Step 8: Multilevel pointers: (PW=525927)
................................
這個窗口的下方的數值2025 還有Change value和Change pointer兩個按鈕。
開始指針掃瞄,選擇CE輸入掃瞄數值,如有看到New Scan先點擊它後才輸入數值。
Value :2025
Scan type :Exact Value
Value type:4 Bytes
點擊First Scan →Found:1 →選擇TUT並點擊Change value →雙擊列表上找到的地址將它加入
下方的列表並右擊地址,即Address下面(不是數值哦)。在右鍵菜單選擇
「Find out what writes to this address」,這會彈出「The following opcodes ch...."
一個空的列表窗口。選擇TUT點擊ChangeValue這就會將改變的地址加入空列表中並選擇它後點擊
Show Disassembler按鈕,這會彈出「Memory Viewer」窗口。在窗口列表選擇最上面的地址並記住它,
然後點擊列表右邊滾動條上面的箭頭,將地址滾向下面要記住剛才的地址哦,
列如:
5. :00456153 - a1 18 c.. - mov eax,[0045cc18] 這記下0045cc18
4. :00456158 - 8b 40 0c - mov eax,[eax+0c]
3. :0045615B - 8b 40 14 - mov eax,[eax+14]
2. :0045615E - 89 00 - mov eax,[eax]
1. 是最上面的地址 :00456160 - 89 70 18 - mov [eax+18],esi 向下滾動後到這裡,
現在要寫下這以上的4個地址的數值,這要從下向上數。我將倒數的地如下:
1. :00456160 - 89 70 18 - mov [eax+18],esi 這記下 18
2. :0045615E - 89 00 - mov eax,[eax] 沒有+號這記下 0
3. :0045615B - 8b 40 14 - mov eax,[eax+14] 這記下 14
4. :00456158 - 8b 40 0c - mov eax,[eax+0c] 不要0這記下 c
記下了就選擇CE然後點擊「Add address manually」,這會彈出Add address對話板,
將Pointer旁邊的小方格打勾,點擊3次Add pointer按鈕,這樣就有4個Address of pointer,
然後將數值填入
Address of pointer:不填 Offset (Hex):18
Address of pointer:不填 Offset (Hex):0
Address of pointer:不填 Offset (Hex):14
Address of pointer: 0045cc18 Offset (Hex):c
然後點擊OK鍵。現在雙擊CE下方列表地址前面帶有P->00D722E8地址的數值(Value),這會彈出
Value對話板,將數值修改為5000,先不要點OK鍵並將Value對話板移到TUT的Change pointer
按鈕的下方,既是當我選擇了TUT的時候也能看得見Value對話板的OK鍵,這樣我就可以在點了
TUT的Change pointer按鈕後能快速的點擊得到Value對話板的OK鍵(3秒鐘內)。
我哈哈!!點到了。
選擇TUT點擊Next進入.......Tutorial End。噢!完成了第八步驟。嘻嘻嘻! |
|