close
一. 打開進程
1.介紹
首先呢!
外掛 不外乎於 Writeprocessmemory 也就是 俗稱的 寫入記憶體.
如何寫入呢?!
首先 你自己是一個程式 而 遊戲視窗是一個程式 用 window 說法 是一個 進程 你必須做
a. 取得視窗的 handle 也就是一個ID 的意思
b. 要取得 遊戲視窗的ID
c. 利用 遊戲視窗的ID 把它打開 ?! 不懂?? 就像是 你要連結 你的程式和 遊戲視窗的路一樣^^ 路有很多種 當然是開越大越好^^ 不用分 火車飛機 大 家 都可以走的大路 最方便了齁^^ >< 聽不懂?? 沒關西 之後就會懂啦!
2.取得 HWND
先來解說
第一步驟
需要用到
Findwindow 這個API
宣告如下:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As _ String, ByVal lpWindowName As String) As long |
宣告 FindWindow 是 long
用法如下
lpClassName 這個比較複雜 通常 是直接傳過去一個 空的 vbnullstring
lpWindowName 就是視窗名稱拉^^ 請你用 字串
3.取得 進程 id
找到一個 視窗的 HWND 後
就要取得 進程的ID 啦
下面這個是宣告
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long _ , lpdwProcessId As Long) As Long |
HWND 很簡單八 就用剛剛找到的那個
lpdwProcessId 就是傳回值 這個 才是可以用的 用法就像這樣
Dim PID as Long GetWindowThreadProcessId Hwnd,PID |
就是這樣^^
懂了媽??
4.打開進程
接下來 就是第三步驟囉
打開 進程
宣告如下
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long |
dwDesiredAccess 就是 你要開的路的類型啦^^ 因為我很懶
所以就用 PROCESS_ALL_ACCESS
請記得 PROCESS_ALL_ACCESS 視需要宣告的
Public Const PROCESS_ALL_ACCESS = &H1F0FFF |
就像這樣^^
bInheritHandle 就不用太麻煩 直接給他 0 就好啦^^
dwProcessId 就是 processed = PID
用法
Dim Phandle as Long Phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, PID) |
就像這樣^^
開路的工程已經好了
而這條路的 編號 就是
PHANDLE 這個變數 !
接下來 就是 寫入記憶體囉^^
二. 寫入記憶體
1. 宣告
擺在模組那邊^^ 看一下歐
Public Declare Function WriteProcessMemory Lib "kernel32" _ (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByVal lpBuffer As Any, _ ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long |
2. 介紹
1. hProcess 就是剛剛 用 openprocess 打開進程 時 給的編號
2. lpBaseAddress 就是 address 就是位址 你在ME 的address 時16進位的
所以只要再前面 加一個 &H 舉例來說
0040000 你要再VB 用 就要 &H0040000 就這樣
3. lpBuffer 舊識你要寫進去的值
4. nSize 寫進去要寫幾byte
5. lpNumberOfBytesWritten 不用理他^^ 0 究可以了 這個是再檢查一便
不用理她 設0
3.解釋
hProcess 也就是 你剛剛把它打開的那條路
1pBaseAddress 也就是address 舉例來說
在ME 看到的 0040000 你要用 &H0040000 表示
4.練習
以 踩地雷 的 秒數
打開採地雷(Findwindow, GetWindowThreadProcessId,OpenProcess)
寫入記憶體 WriteProcessMemory
Address &H1005194
Value :
Dim value as byte
Value = val(text1.text)
Ps. Text 是給人用 的 最多只能 兩位數
要 VAL 字串 轉數值..
小提醒: 用沒效過 請檢查 每一個變數又沒有打錯 在不行 請在 抓到 HWND ProcessId ProcessHandle 後 都 用Msgbox 提出來看 OR text 顯示出來.
全站熱搜
留言列表