. 讀記憶體
2. 宣告
學會了寫記憶體  免不了要讀記憶體八?
讀記憶體 當然就要用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
大部分都是這樣寫的 在下我 也有發過歐^^)

要如何寫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 也請用 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的變數,大小


不知道哪個可以用就是了 = =
arrow
arrow
    全站熱搜

    heido001 發表在 痞客邦 留言(0) 人氣()