close
五. 讀記憶體
2. 宣告
學會了寫記憶體 免不了要讀記憶體八?
讀記憶體 當然就要用ReadProcessMemory 宣告 跟用法跟WriteProcessMemory 很像
讀記憶體 當然就要用ReadProcessMemory 宣告 跟用法跟WriteProcessMemory 很像
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess_ As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As _ Long, lpNumberOfBytesWritten As Long) As Long |
是不是很像呢?
2. 介紹
1. hProcess 就是第一篇 用 openprocess 打開進程 時 給的編號
2. lpBaseAddress 就是 address 就是位址 你在ME 的address 時16進位的
所以只要再前面 加一個 &H 舉例來說
0040000 你要再VB 用 就要 &H0040000 就這樣
3. lpBuffer 就是你讀出來 擺放的位置 (一樣要用Byte形式毆)
4. nSize 讀幾Byte
5. lpNumberOfBytesWritten 不用理他^^ 0 究可以了 這個是再檢查一便
不用理她 設0
3. 小小範例
一樣以 踩地雷 的 秒數
打開採地雷(Findwindow, GetWindowThreadProcessId,OpenProcess)
寫入記憶體 ReadProcessMemory
Address &H1005194
Value : 不一定
Dim Value as byte
ReadProcessMemory phandle, &H1005194,Value,1,0
這樣應該就好囉^^ 你在把Value提出來 應該就是拉^^
但是 Byte 依次一Byte 讀記憶體 一次都馬都是 4 Byte 如果要讀 1Byte以上怎辦?
陣列 就派上用場啦^^
Dim Value(3) as byte
ReadProcessMemory Phandle, &H1005194,Value(0),4,0
這樣
他會自動把剩下三Byte 放進去 Value(0) Value(1) Value(2) Value(3)
方便八^^
所以
1005194 的 就是 Value(0)的直
1005195 的 就是 Value(1)的直
1005196 的 就是 Value(2)的直
1005197 的 就是 Value(3)的直
雖然它是分開的 但總比沒有好八
所以如果你要讀AOB 就這樣獨就好囉^^
但是 遺憾的事 大部分的遊戲 Pointer 都是 4byte 可是你這樣把它分成 四個直 就不是我想要的惹>< 怎辦呢
聰明的 MAX 大早就想好啦^^ MaxRPM 可以解決所有問題^^ 請去網路上自己找MAX MARCO 的SOURCE 歐^^
MAX大 非常的大方 都公開SOURCE 不像某人 …連一個函數都賣的貴死人..
六. 寫AOB
現在盛行的打勾掛 大部分都是 用WriteProcessMemory 寫機械碼毆^^
(VB大部分都是這樣寫的 在下我 也有發過歐^^)
(VB大部分都是這樣寫的 在下我 也有發過歐^^)
要如何寫AOB??
舉例來說^^
AB9FBA E9 5D 11 E5 FF 90
這樣要怎寫呢?
很簡單^^
只要把 他整理一下
AB9FBA 的Value E9
AB9FBA+1 的Value 5D
AB9FBA+2 的Value 11
依此類推^^
但是 依次 1Byte好像有點慢吼~~
一次 4Byte??
AB9FBA 寫 記憶體 4Byte 寫成 e5115de9
這樣倒著排 有看懂媽?!?
我講的好像很難懂吼~~沒關希臘!!!!! 你一Byte 一Byte 寫好惹辣
我講的好像很難懂吼~~沒關希臘!!!!! 你一Byte 一Byte 寫好惹辣
(寫四Byte 也請用 MaxWPM 可以方便寫4Byte 當然 你可以用SnowAobWrite 只是要錢就是了
七. 不保證OK的函數分享
MaxRpm 方便吼>< 可是要你們去找一定 一大堆人來問我= = 叫我找給他 我早就丟喏~~怎找給你
所以呢 我就隨便想一個函數 “沒試過”
剛剛我這樣說
一次 4Byte?? AB9FBA 寫 記憶體 4Byte 寫成 e5115de9 |
其實我也是之前爬文爬來的
我不是很了解這個意思
不過
依照著個原理 我把它做一個函數出來^^
限制 4 Byte 版本
Public Function SnowRpm(ProcessHandle As Long, iBaseAddress As Long, Value As Long) As Long Dim r(3) As Long SnowRpm = ReadProcessMemory(ProcessHandle, iBaseAddress, r(0), 4, 0) Dim Vaa(3) As String For i = 0 To 3 Vaa(i) = Hex(r(i)) Next Dim Returnvalue As String Returnvalue = Vaa(3) + Vaa(2) + Vaa(1) + Vaa(0) Value = Val(Retunvalue) End Function |
因為 竟然 Aob 要變成Value 是倒著牌 同理 AOB 變成 Value 也是倒著排
我把它讀出 4 個Aob 在倒著排 (用字串) 最後再轉成 Value
這樣 不知道可不可以用就是了 還是推薦MaxRpm
不限制 大小
Public Function SnowRpm(ProcessHandle As Long, iBaseAddress As Long, Value As Long, nSize As_ Integer) As Long Dim r(nSize) As Long SnowRpm = ReadProcessMemory(ProcessHandle, iBaseAddress, r(0), nSize, 0) Dim Vaa(nSize) As String For i = 0 To nSize Vaa(i) = Hex(r(i)) Next Dim Returnvalue As String For i = nSize To 0 Step -1 Returnvalue = Returnvalue + Vaa(i) Next Value = Val(Retunvalue) End Function |
因為我絕得我八成寫錯= =我又懶的實驗更改 所以 就乾脆發兩個
4Byte 限制那個
SnowRpm Phandle,要的Address, 存放Value的變數 (全部都要用Long
無限制
SnowRpm Phandle,要的Address,存放Value的變數,大小
不知道哪個可以用就是了 = =川
全站熱搜
留言列表