用VB写辅助新手教程(通用版)
ce吧
全部回复
仅看楼主
level 7
doable2012 楼主
首先感谢CE大神的原教程 @莪芯囿祢
DNF毁我一生
教程开始 代码开始
-------------------------------分割线-------------------------------
'定义全局变量
Option Explicit '强制声明变量
Dim PID As Long '定义进程ID为变量
Dim lphwnd As Long '定义窗口为变量
Dim RW As Long '定义人物为变量
Dim RWZB As Long '定义人物装备为变量
Dim RWZBYS As Long '定义人物装备移速为变量
Dim RWZBSQ As Long '定义人物装备属强为变量
Dim YS1 As Long '定义增加后的移速为变量
Dim YS2 As Long '定义减少后的移速为变量
Dim SQ1 As Long '定义增加后的属强为变量
Dim SQ2 As Long '定义减少后的属强为变量
'定义几个用到的模块
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare 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 Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer '
Private Declare Function MessageBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal dwTimeout As Long) As Long
'定义基址常量
Private Const JW_Address As Long = &H1515C6B '捡物基址
Private Const RW_Address As Long = &H332D3E0 '人物基址
Private Const CD_Address As Long = &H149FF13 '无CD基址
'定义偏移常量
Private Const ZB_Offset As Long = &H2930 '装备偏移
Private Const BT_Offset As Long = &H7F4 '霸体偏移
Private Const WD_Offset As Long = &H1184 '无敌偏移
Private Const YS_Offset As Long = &H938 '移速偏移
Private Const SQ_Offset As Long = &HC50 '属强偏移
Private Const HP_Offset As Long = &H2F24 'HP偏移
Private Const MP_Offset As Long = &H2F28 'MP偏移
'响应按钮1
Private Sub Command1_Click()
MsgBox "请务必使用管理员运行工具" & Chr(10) & "先启动游戏,后打开辅助" & Chr(10) & "切换角色后,不需要关闭辅助工具" & Chr(10) & "╔------------------------------╗" & Chr(10) & "┆键盘示意图所示: ┆" & Chr(10) & "┆波浪键开启 无敌/霸体 ┆" & Chr(10) & "┆ 技能无CD/自动捡物 ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆快捷键7减少人物移动速度 ┆" & Chr(10) & "┆快捷键8增加人物移动速度 ┆" & Chr(10) & "┆(移动速度推荐100%-200%) ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆快捷键9减少人物属性强化 ┆" & Chr(10) & "┆快捷键0增加人物属性强化 ┆" & Chr(10) & "┆(全属强增加推荐150-200) ┆" & Chr(10) & "┆ ┆" & Chr(10) & "┆= 键恢复100%的HP和MP值 ┆" & Chr(10) & "╚------------------------------╝" & Chr(10) & " 辅助仅供学习研究使用,请于下载后24 小时内删除!" & Chr(10) & " 作者不承担一切后果与责任, 必须同意此条款方可继续使用!" & Chr(10) & " 禁止外传和复制以及盗版!"
End Sub
'主窗口载入内容
Private Sub Form_Load()
Timer1.Interval = 100 '时间控件1响应频率
Timer2.Interval = 100 '时间控件2响应频率
Timer3.Interval = 100 '时间控件3响应频率
Timer4.Interval = 100 '时间控件4响应频率
Timer5.Interval = 100 '时间控件5响应频率
Timer6.Interval = 100 '时间控件6响应频率
lphwnd = FindWindow(vbNullString, "地下城与勇士") '查找窗口
GetWindowThreadProcessId lphwnd, PID '获取进程ID
If lphwnd = 0 Then '如果进程ID为空,则
MessageBoxTimeout Me.hwnd, "请先启动游戏", "警告", 0, 0, 600 '600毫秒弹出可自动关闭的无属性弹窗
Unload Me '关闭窗体
End If
End Sub
'获取内存模块
Private Function readmemory(ByVal address As Long) As Long
Dim buffer As Long
Dim biread As Long
Dim binheritprocss As Long
binheritprocss = OpenProcess(&H1F0FFF, False, PID) '获取操作句柄
biread = ReadProcessMemory(binheritprocss, address, VarPtr(buffer), 4, 0) '读取内存
If biread = 0 Then
MessageBoxTimeout Me.hwnd, "内存获取失败", "警告", 0, 0, 300
CloseHandle binheritprocss
readmemory = 0
Exit Function
End If
readmemory = buffer
CloseHandle binheritprocss
End Function
'写内存模块
Private Sub writememory(ByVal address As Long, ByVal setvalue As Long)
Dim binheritprocss As Long
Hex binheritprocss & address
binheritprocss = OpenProcess(&H1F0FFF, False, PID) '获取操作句柄
WriteProcessMemory binheritprocss, address, VarPtr(setvalue), 4, 0 '写入内存
CloseHandle binheritprocss
End Sub
'时间控件1触发内容
Private Sub Timer1_Timer()
If GetAsyncKeyState(192) Then '如果获取用户按下了·键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
writememory CD_Address, &H7D8025EB '把技能无CD的数值写进内存
writememory JW_Address, &H4D8B0134 '把自动捡物的数值写进内存
writememory RW + BT_Offset, &H1 '把霸体的数值写进内存
writememory RWZB + WD_Offset, &H64 '把无敌的数值写进内存
End If
End Sub
'时间控件2触发内容
Private Sub Timer2_Timer()
If GetAsyncKeyState(55) Then '如果获取用户按下了7键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBYS = readmemory(RWZB + YS_Offset) '每次重新读取人物装备移速
YS1 = RWZBYS + &H64 '每次重新计算增加后的移速
writememory RWZB + YS_Offset, YS1 '写内存计算后的移速数值
End If
End Sub
'时间控件3触发内容
Private Sub Timer3_Timer()
If GetAsyncKeyState(56) Then '如果获取用户按下了8键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBYS = readmemory(RWZB + YS_Offset) '每次重新读取人物装备移速
YS2 = RWZBYS - &H64 '每次重新计算减少后的移速
writememory RWZB + YS_Offset, YS2 '写内存计算后的移速数值
End If
End Sub
'时间控件4触发内容
Private Sub Timer4_Timer()
If GetAsyncKeyState(57) Then '如果获取用户按下了9键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBSQ = readmemory(RWZB + SQ_Offset) '每次重新读取人物装备属强
SQ1 = RWZBSQ + &H32 '每次重新计算增加后的属强
writememory RWZB + SQ_Offset, SQ1 '写内存计算后的属强数值
End If
End Sub
'时间控件5触发内容
Private Sub Timer5_Timer()
If GetAsyncKeyState(48) Then '如果获取用户按下了0键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
RWZB = readmemory(RW + ZB_Offset) '每次重新读取人物装备
RWZBSQ = readmemory(RWZB + SQ_Offset) '每次重新读取人物装备属强
SQ2 = RWZBSQ - &H32 '每次重新计算减少后的属强
writememory RWZB + SQ_Offset, SQ2 '写内存计算后的属强数值
End If
End Sub
'时间控件6触发内容
Private Sub Timer6_Timer()
If GetAsyncKeyState(187) Then '如果获取用户按下了=键,则
RW = readmemory(RW_Address) '每次重新读取人物(属性)
writememory RW + HP_Offset, &H64 '写内存HP值
writememory RW + MP_Offset, &H64 '写内存MP值
End If
End Sub
2016年03月03日 14点03分 1
level 7
doable2012 楼主
每次更新,除非偏移改变,只需要改更新后的基址即可
VB是最稳定的,理论上说所有的辅助都是一样的稳定,但是实测VB一个多月,同样的代码没有制裁过一次!
2016年03月03日 14点03分 2
level 13
前排懵逼
2016年03月03日 14点03分 3
[黑线]怎么就懵逼了,这么详细的教程
2016年03月03日 14点03分
@doable2012 新人表示看不懂
2016年03月13日 02点03分
@doable2012 刚刚起步。马克一下。以后看
2016年03月13日 08点03分
level 5
。那啥,楼主就不能做个一键式的
2016年03月03日 14点03分 5
一键式是什么意思[疑问]
2016年03月03日 15点03分
level 6
感谢楼主的分享
2016年03月03日 14点03分 6
level 1
我不知道,一样是修改内存,还有说比较稳定一说
2016年03月03日 14点03分 7
[笑眼]真的是这样的 开CE同样几个功能 时不时会制裁
2016年03月03日 15点03分
level 8
[滑稽][滑稽][滑稽][滑稽][滑稽][滑稽][滑稽][滑稽][滑稽][滑稽]给你十个滑稽币
2016年03月03日 14点03分 8
[哈哈]收到十个滑稽币
2016年03月03日 15点03分
level 8
@莪芯囿祢 你艾特的没蓝
2016年03月03日 14点03分 9
[黑线]我错了
2016年03月03日 15点03分
level 11
vb 好高端 我想知道vb加密解密和各种call怎么写
2016年03月03日 15点03分 11
我先码了
2016年03月03日 15点03分
@ETO·统帅 [疑问]莪芯囿祢,我只是对大神教程进行整理,其实他会,但是没有分享出来
2016年03月03日 15点03分
level 7
一个定时器就可以的十楼说的那样改成true 另外 楼主会不会把字节数组 写入内存 比如满技能的
2016年03月03日 16点03分 12
[滑稽]你要相信大神@莪芯囿祢 会更新出来的,我晓得他会,另外Form_KeyUp好像只能在前台,后台获取按键好像实现不了。
2016年03月03日 17点03分
[黑线]之前咋就没想到只用一个时间控件呢,刚才测试了可以,教程要重写了
2016年03月03日 17点03分
@doable2012 可以。。。的吧
2016年03月05日 04点03分
炸出一只大神
2016年03月12日 16点03分
level 8
[冷]都是英文
2016年03月03日 16点03分 13
level 7
doable2012 楼主
2016年03月03日 16点03分 14
level 11
这是一个随机的表情[没有钱]
2016年03月03日 16点03分 15
😳
2016年03月03日 18点03分
level 3
先码,,小白求带
2016年03月03日 17点03分 16
1 2 3 尾页