黃易群俠傳M脫機外掛應用程式黃易神行
52919
0

[討論] 用CE找完美基址操作與提問(一)之反推與結論

bayno0928 發表於 2008-7-4 02:16:34 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |
針對早上做的完美當前血量基址搜索做了一個反推實驗。

1.首先打開遊戲和CE,用CE附加完美主程序 elementclient.exe

2.點按CE中右方 "手動添加位址"


3.將早上搜尋到最後沒有偏移值的位址 0092A4B4 在位址欄填上,按確定。


4.我們可以在CE下方位址列表中發現,我們添加的位址 0092A4B4 中存放了一個十進制的數值 9612048


5.我們在數值 9612048上按右鍵,選擇顯示為十六進制。


6.該數值轉為十六進制後為 0092AB10(數值前0x表示為十六進制)0092AB10 是不是感覺很熟析,沒錯就是早上找到最後一個有偏移值 1C 的位址。


7.接下來我們再按 "手動添加位址",位址欄輸入 0092AB10 + 1C(偏移值) = 0092AB2C(十六進制加法,不會不要問我喔QQ),按確定。


8.我們可以看到位址 0092AB2C 中放了一個十進制數值 56120864。


9.一樣將它顯示為十六進制 = 03585620


10.再按 "手動添加位址" ,這次我們在位址欄輸入 03585620 + 20(早上找到的第2個偏移值) = 03585640,然後按確定。


11.在位址 03585640 中,一樣存放著一個十進制數值 91955216


12.將數值 91955216 顯示為十六進制 = 057B2010


13.再按一次 "手動添加位址" ,位址欄輸入 057B2010 + 450(早上找到的第一個偏移值) = 057B2460 ,按下確定


14.這個位址應該就是存放我們目前血量的位址了。(驚!!!!!!!怎麼不是我們早上的血量 75 ?,而是 105 ?? 因為~~~晚上在做反推的時候,遊戲中有個人跟我組隊,我跟他解釋我在忙,他還是要跟我組,他在我旁邊打怪,我的測試人物吸了經驗值,升級了= =",所以當前血量變成 105)


從 efun大大 和 dece大大 的回覆,以及這個反推實驗得到:

1.如果要說完美的基址,應該為 0092A4B4 ,因在搜索各項數值的過程中會發現,找到最後都是這個位址。

2. 0092A4B4 此位址中,放了一個"固定"數值 0092AB10 (你關掉遊戲再開,還是放這個數值,除非改版才可能改變)。

3. 0092AB10 + 1C(一個"固定"的偏移值) = 0092AB2C ,因為位址 0092AB10 是"固定"的,偏移值 1C 也是"固定"的,所以有人會認為 0092AB2C 為基址,或 0092AB10 為基址(很多外掛程式碼的寫法也是這樣認為)。

4. 0092AB2C 這個位址裡面放了一個"不固定"的數值 03585620 (以十六進制顯示的話),遊戲重開這個數值就可能會改變。

5. 03585620 + 20 (一個"固定"的偏移值) = 03585640 (如果以 efun大大的著作來看,此偏移值是用來區分存放人物資料[20]或環境資料[08]的)

6. 03585640 這個位址裡面也放了一個"不固定"的數值 057B2010 (十六進制),遊戲重開這個數值就可能改變。

7. 057B2010 + 450 (一個"固定"的偏移值) = 057B2460 ( 450 這個偏移值,就是為了指向遊戲人物的當前血量)

8. 位址 057B2460 中存放的數值就是人物當前血量。

9.以上固定以及不固定的定義是,如果遊戲沒有改版,程式沒有改寫的情況下,你重新啟動遊戲會不會改變數值來定義。

結論:
1.完美世界的基址為 0092A4B4
2.有些外掛的程式碼寫法會將 0092AB10 或 0092AB2C 當成基址是因為,除非遊戲程式改寫(改版),不然 0092AB10 和偏移值 1C 是不會變動的
3.偏移值 20 是為了指向人物資料存放的位址( 08 指向環境資料,還未查證)
4.偏移值 450 是為了指向人物資料中當前血量的位址


遊戲(以下說明稱為程式)寫入人物當前血量到記憶體後,讀出顯示在遊戲畫面的流程:
程式從遠端資料庫讀出人物當前血量(例如 75 ) ->
程式讀取記憶體位址 0092A4B4 中的數值(目前版本固定為 0092AB10) ->
程式讀取記憶體位址 (0092AB10 + 1C) 中的數值 X (目前版本 X 為一個不固定的數值,每次重啟都會變化) ->
程式讀取記憶體位址 (X + 20) 中的數值 Y (目前版本 Y 為一個不固定的數值,每次重啟都會變化) ->
程式將人物當前血量(例如75)寫入記憶體位址 Y + 450 ->
程式讀取記憶體位址 Y + 450 的數值(例如 75 )顯示在遊戲畫面上(結束)
(流程看起來複雜,其實在程式的運算上是一瞬間的)

P.S 以上為 小菜鳥 我自己的認知,如有謬誤希望大大能提出指正,讓 小菜鳥 我能即時更正,以免誤導他人QQ

菜味很重的小菜鳥 敬上

[ 本帖最後由 bayno0928 於 2008-7-4 02:37 編輯 ]

評分

!number_of_participants! 1經驗 +10 論壇幣 +20 收起 理由
小荷才露尖尖角 + 10 + 20 我很贊同

查看全部評分

收藏收藏 分享分享 讚1 幹 分享分享 FB分享
回覆

使用道具 舉報


您需要登錄後才可以回帖 登錄 | 註冊


手機版 | Archiver | 外掛聯合國

GMT+8, 2024-5-12 05:29 , Processed in 0.056825 second(s), 17 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?