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

[分享] 用AutoIt讀取遊戲記憶體數據

安南 發表於 2007-7-24 20:40:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |
在AutoIt如何讀取記憶體,可能是大家比較關心的一個問題,俺在此給出示例:

首先,是必需的兩個函數,你可以把下面的代碼複製到腳本中,也可以單獨保存為檔案,比如取名為Memory.au3,然後再用#include指令引入。下面是代碼:
  1. ==============
  2. ===================================================================================
  3. Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
  4.    
  5.     If Not ProcessExists($iv_Pid) Then
  6.         SetError(1)
  7.       Return 0
  8.     EndIf
  9.    
  10.     Local $ah_Handle[2] = [DllOpen('kernel32.dll')]
  11.    
  12.     If @Error Then
  13.         SetError(2)
  14.         Return 0
  15.     EndIf
  16.    

  17.   Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess',
  18. 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
  19.    
  20.     If @Error Then
  21.         DllClose($ah_Handle[0])
  22.         SetError(3)
  23.         Return 0
  24.     EndIf
  25.    
  26.     $ah_Handle[1] = $av_OpenProcess[0]
  27.    
  28.     Return $ah_Handle
  29.    
  30. EndFunc

  31. ;=================================================================================================
  32. Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
  33.    
  34.     If Not IsArray($ah_Handle) Then
  35.         SetError(1)
  36.         Return 0
  37.     EndIf
  38.    
  39.     Local $v_Buffer = DllStructCreate($sv_Type)
  40.    
  41.     If @Error Then
  42.         SetError(@Error + 1)
  43.         Return 0
  44.     EndIf
  45.    

  46.   DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int',
  47. $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer),
  48. 'int', DllStructGetSize($v_Buffer), 'int', '')
  49.    
  50.     If Not @Error Then
  51.         Local $v_Value = DllStructGetData($v_Buffer, 1)
  52.         Return $v_Value
  53.     Else
  54.         SetError(6)
  55.         Return 0
  56.     EndIf
  57. EndFunc

  58. ;=================================================================================================
  59. Func _MemoryClose($ah_Handle)
  60.     If Not IsArray($ah_Handle) Then
  61.         SetError(1)
  62.         Return 0
  63.     EndIf
  64.    
  65.     DllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
  66.     If Not @Error Then
  67.         DllClose($ah_Handle[0])
  68.         Return 1
  69.     Else
  70.         DllClose($ah_Handle[0])
  71.         SetError(2)
  72.         Return 0
  73.     EndIf
  74. EndFunc

  75. ;=
  76. =========================================================================
  77. =======================
複製代碼
其次,在腳本中的使用:
  1. ;引入函數定義
  2. #include "Memory.au3"
  3. ;定義記憶體基址
  4. $Address = 0x008bab4c
  5. ;定義記憶體偏移地址
  6. $Off_Hp = 0x254
  7. ;獲取遊戲句柄
  8. $CurProcID=WinGetProcess("Element")
  9. ;獲取記憶體讀寫句柄
  10. $Handle = _MemoryOpen($CurProcID)
  11. ;錯誤處理
  12. If $Handle=0 then
  13.     MsgBox(4096,"錯誤提示","打開遊戲內存錯誤。")
  14.     Exit
  15. EndIf
  16. ;讀取記憶體數據
  17. $HP = _MemoryRead("0x" & Hex($Address+$Off_Hp), $Handle)
  18. ;關閉記憶體句柄
  19. _MemoryClose($CurProcID)
複製代碼
查到人物HP後,剩下的就是根據HP的實時變化,再做相應的腳本就行了。

OK,到此,遊戲中的人物HP就從記憶體中讀取出來了,至於什麼遊戲具體什麼地址,偏移量多少,這些要用其他軟體(比如討論區提供的CE軟體)來查找出來。這個就與AutoIt無關了。
收藏收藏1 分享分享 讚 幹 分享分享 FB分享
回覆

使用道具 舉報


honuo 當前離線
UID
90601
熱心
41 值
嘉獎
0 次
違規
0 次
在線時間
13 小時
經驗
181 點
積分
614
精華
1
最後登錄
2018-8-1
閱讀權限
30
註冊時間
2006-11-22
論壇幣
346 幣
聯合幣
9 枚
幸運鑽
0 顆
招待卷
0 點
Yahoo! 查看詳細資料
Rank: 4Rank: 4
honuo 2007-7-25 12:25:30
$CurProcID=WinGetProcess("Element")
是完美世界的進程!完美世界在大陸讀內存訊息是直接刪除帳號角色的
回覆

使用道具 舉報

rfv00800 當前離線
UID
393704
熱心
600 值
嘉獎
0 次
違規
0 次
在線時間
357 小時
經驗
373 點
積分
1465
精華
0
最後登錄
2022-8-9
閱讀權限
55
註冊時間
2007-6-6
論壇幣
42 幣
聯合幣
43 枚
幸運鑽
8 顆
招待卷
0 點
QQ 查看詳細資料
Rank: 5Rank: 5Rank: 5
rfv00800 2009-3-10 08:00:28
我有下載AutoIt可是我不知道你放的那薛數據要放在哪裡ㄋ!放好了又要怎麼ㄋ!?
回覆

使用道具 舉報

lrc01 當前離線
UID
989269
熱心
51 值
嘉獎
0 次
違規
0 次
在線時間
9 小時
經驗
47 點
積分
47
精華
0
最後登錄
2010-7-30
閱讀權限
20
註冊時間
2008-8-19
論壇幣
95 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
lrc01 2009-3-15 12:59:57
謝謝囉~~
剛下載好程式~~
努力研究去~
回覆

使用道具 舉報

amos007 當前離線
UID
1161412
熱心
37 值
嘉獎
0 次
違規
0 次
在線時間
1 小時
經驗
37 點
積分
37
精華
0
最後登錄
2009-3-27
閱讀權限
20
註冊時間
2009-3-24
論壇幣
68 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
5
amos007 2009-3-26 14:16:18
看來AUTOIT功能比按精強大喔
下來用用看
回覆

使用道具 舉報

Goldenwolf 當前離線
UID
1166302
熱心
75 值
嘉獎
0 次
違規
0 次
在線時間
17 小時
經驗
75 點
積分
426
精華
0
最後登錄
2009-10-8
閱讀權限
25
註冊時間
2009-3-28
論壇幣
259 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 3
6
Goldenwolf 2009-3-31 12:47:12
什麼是讀取記憶體?先看看在說!感謝大大的分享!
回覆

使用道具 舉報

richkan 當前離線
UID
1181950
熱心
11 值
嘉獎
0 次
違規
0 次
在線時間
1 小時
經驗
11 點
積分
11
精華
0
最後登錄
2009-10-12
閱讀權限
10
註冊時間
2009-4-11
論壇幣
22 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 1
7
richkan 2009-4-11 22:14:53
學習中!學習中!學習中!學習中!
回覆

使用道具 舉報

invalidfate 當前離線
UID
1215019
熱心
25 值
嘉獎
0 次
違規
0 次
在線時間
2 小時
經驗
25 點
積分
25
精華
0
最後登錄
2009-5-23
閱讀權限
20
註冊時間
2009-5-14
論壇幣
58 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
8
invalidfate 2009-5-14 21:22:02
多謝大大分享~感恩
回覆

使用道具 舉報

完美小仙女 當前離線
UID
1156240
熱心
61 值
嘉獎
0 次
違規
0 次
在線時間
24 小時
經驗
59 點
積分
59
精華
0
最後登錄
2012-12-6
閱讀權限
20
註冊時間
2009-3-18
論壇幣
553 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
2709 點
查看詳細資料
Rank: 2Rank: 2
9
完美小仙女 2009-5-30 18:20:12
努力学习中。。。YCT48B
谢谢大大的分享哦
回覆

使用道具 舉報

龍華 當前離線
UID
435816
熱心
9 值
嘉獎
0 次
違規
0 次
在線時間
2 小時
經驗
9 點
積分
9
精華
0
最後登錄
2007-8-8
閱讀權限
5
註冊時間
2007-7-10
論壇幣
15 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 1
10
龍華 2009-12-14 12:40:23
謝謝大大教學!小弟來去試試看~~~
回覆

使用道具 舉報

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

12下一頁

手機版 | Archiver | 外掛聯合國

GMT+8, 2024-5-11 17:40 , Processed in 0.051933 second(s), 18 queries , Memcache On.

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

回頂部
第二步?
第三步?