search 登录 注册
arrow_back返回列表
ID:124537
light_modestar
Lv.1 韶华一笑间
edit_note帖子 58
stars积分 428
event加入 2012-10-08
怀旧国机

【VB编程】制作外挂第六课

schedule发表于 2012-10-16 10:38:00 visibility查看 424 chat_bubble回复 4
#1 楼主
继续上节课内容,教程请看下面:
------------------------------------
应用实战--------------------------------------------------------------------------------------------------------------------------------------------------------
需要VB API函数:
FindWindowGetWindowThreadProcessIdOpenProcessReadProcessMemoryCloseHandle
--------------------------------------------------------------------------------------------------------------------------------------------------------
相关API声明:
FindWindow

Private * Function FindWindow Lib “user32“ Alias “FindWindowA“ ( ByVal lpClassName As String , ByVal lpWindowName As String ) As Long
GetWindowThreadProcessId

Private * Function GetWindowThreadProcessId Lib “user32“ ( ByVal hwnd As Long , lpdwProcessId As Long )
As Long
OpenProcess

Private * Function OpenProcess Lib “kernel32“ ( ByVal dwDesiredAccess As Long , ByVal bInheritHandle As Long , ByVal dwProcessId As Long )
As Long
ReadProcessMemory

Private * Function ReadProcessMemory Lib “kernel32“ ( ByVal hProcess As Long , ByVal lpBaseAddress As Any , ByVal lpBuffer As Any , ByVal nSize As Long , lpNumberOfBytesWritten As Long )
As Long
CloseHandle

Private * Function CloseHandle Lib “kernel32“ ( ByVal hObject As Long )
As Long
GetCurrentProcess

Private * Function GetCurrentProcess Lib “kernel32“ ()
As Long
--------------------------------------------------------------------------------------------------------------------------------------------------------
需要的控件: Label 、 Timer(interval不为空)、Text
--------------------------------------------------------------------------------------------------------------------------------------------------------
定义函数:
Dim SetHp As Integer ‘ 定义设定的体力值
Dim SetMp As Integer ‘ 定义设定的魔法值
Dim NowHp As Long ‘ 定义目前的体力值
Dim NowMp As Long ‘ 定义目前的魔法值
Dim MaxHp As Long ‘ 定义角色的最高体力值
Dim MaxMp As Long ‘ 定义角色的最高魔法值
Dim DiZhi As Long ‘定义内存地址函数
Dim hwnd As Long ‘ 储存
FindWindow 函数返回的句柄
--------------------------------------------------------------------------------------------------------------------------------------------------------
代码:Private * Function FindWindow Lib “user32“ Alias “FindWindowA“ ( ByVal lpClassName As String , ByVal lpWindowName As String )
As Long
Private * Function GetWindowThreadProcessId Lib “user32“ ( ByVal hwnd As Long , lpdwProcessId As Long )
As Long
Private * Function OpenProcess Lib “kernel32“ ( ByVal dwDesiredAccess As Long , ByVal bInheritHandle As Long , ByVal dwProcessId As Long )
As Long
Private * Function ReadProcessMemory Lib “kernel32“ ( ByVal hProcess As Long , ByVal lpBaseAddress As Any , ByVal lpBuffer As Any , ByVal nSize As Long , lpNumberOfBytesWritten As Long )
As Long
Private * Function CloseHandle Lib “kernel32“ ( ByVal hObject As Long )
As Long
Private * Function GetCurrentProcess Lib “kernel32“ ()
As Long
Dim SetHp As Integer ‘ 定义设定的体力值
Dim SetMp As Integer ‘ 定义设定的魔法值
Dim NowHp As Long ‘ 定义目前的体力值
Dim NowMp As Long ‘ 定义目前的魔法值
Dim MaxHp As Long ‘ 定义角色的最高体力值
Dim MaxMp As Long ‘ 定义角色的最高魔法值
Dim DiZhi As Long ‘定义内存地址函数
Private Function ncnr(lpADDress As Long ) As Integer
‘ 声明一些需要的变量Dim hwnd As Long ‘ 储存 FindWindow 函数返回的句柄
Dim pid As Long ‘ 储存进程标识符( Process Id )
Dim pHandle As Long
‘ 储存进程句柄hwnd = FindWindow(vbNullString, “封神榜·网络版“)
‘ 取得进程标识符GetWindowThreadProcessId hwnd, pid
‘ 使用进程标识符取得进程句柄pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
‘ 在内存地址中读取数据ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&‘ 关闭进程句柄
CloseHandle hProcess
End Function
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const SYNCHRONIZE = &H100000
Const SPECIFIC_RIGHTS_ALL = &HFFFF
Const STANDARD_RIGHTS_ALL = &H1F0000
Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Const PROCESS_VM_OPERATION = &H8&
Const PROCESS_VM_READ = &H10&
Const PROCESS_VM_WRITE = &H20&Private Sub Form_Load()‘
体力:07F68F3 这里替换你所搜索到的地址
魔法:07F6860
同前
DiZhi = &H 07F68F3Timer1.Enabled = True
Timer2.Enabled = False
Timer3.Enabled = False
End Sub
Private Sub
Timer1_Timer()
Dim hwnd As Long
hwnd = FindWindow(vbNullString, “封神榜·网络版“)
If hwnd = 0 Then
Label12.Caption = “游戏未加载“
Timer1.Enabled = True
Timer2.Enabled = False
Timer3.Enabled = FalseExit
SubEnd
Label12.Caption = “游戏已加载“
SetHp = Text1.Text ‘ 获取设定的体力值
SetMp = Text2.Text ‘ 获取设定的魔法值
NowHp = ncnr(DiZhi) ‘ 获取当前的体力值
NowMp = ncnr(DiZhi + 12) ‘ 获取当前的魔法值
MaxHp = ncnr(DiZhi + 4) ‘ 获取角色的最高体力值
MaxMp = ncnr(DiZhi + 16) ‘ 获取角色的最高魔法值
Label3.Caption = Str(NowHp) + “/“ + Str(MaxHp) ‘ 显示角色体力值状态
Label4.Caption = Str(NowMp) + “/“ + Str(MaxMp) ‘ 显示角色魔法值状态
If Check1.Value
ThenTimer2.Enabled = True
Else
Timer2.Enabled = False
End
IfIf Check2.Value
ThenTimer3.Enabled = True
Else
Timer3.Enabled = False
End
IfEnd SubPrivate
Sub
Timer2_Timer()‘ 体力值小于设定值按下数字键1
If (NowHp) < SetHp ThenSendKeys “1“End IfEnd SubPrivate Sub Timer3_Timer()‘ 魔法值小于设定值按下数字键2
If (NowMp) < SetMp ThenSendKeys “2“
End If
End Sub
教程结束,下课!
童鞋们再见!

全部回复 (4)

ID:5168
light_modedark_modedark_modedark_modestar
Lv.1 韶华一笑间
2012-10-16 10:47:00 沙发
繁花家族欢迎你~。
ID:5566
light_modedark_modestarstarstar
Lv.1 韶华一笑间
2012-10-16 10:52:00 板凳

落叶゛ 暖 暖じ为你顶贴!!
朋友 加入空白府吧!
ID:87830
light_modedark_mode
Lv.3 畅意三江水
2012-10-16 10:54:00 地板
[url]手打教程:
条件一:必须学会易语言
条件二:准备超级模块不追封其实就是换种写挂的方法,DLL换成驱动写法!这种写法不会追封!
下面举个例子:写个简单倍攻的:写个个加密解密程序集比如我们用F1开启倍功:
新建个全局变量:进程ID然后回到启动窗口创建完毕那里写代码:
进程ID=取进程ID(“DNF.exe“)监视热键(&倍功,#F1键)新建个子程序:倍功加密(内存_驱动读写.读代码
ID:106008
light_modedark_modestar
Lv.6 胸怀六国志
2012-10-16 11:03:00 #5
C.Y家族欢迎你~
登录 后才能回复