<p><br/>第一次做外挂,也是最新的1.3.2版,目前可以正常使用,功能不是很强。只是简单的判断喝红喝蓝、自动打怪、自动拾物。因为完美屏蔽了后台按键。所以使用时需要把武林游戏窗口设为活动窗口。也许以后会更新为CALL后台按键吧。正在研究中。</p>
<p>附:武林外传挂部份基址及全部源码,呵呵,不是我小气不把全部基址给完。而是我也没找出:(。给喜欢做小挂的朋友使用及研究。有这方面爱好的朋友希望加QQ一起学习。</p>
<p><strong><font color="#0000ff" size="5">声明:<font size="2">使用外挂造成的封号请不要骂我喔,请三思后再使用。</font></font></strong></p>
<p>武林外传:游戏发布序号170 游戏版本号1.3.2</p>
<p>一级基址:0<font face="Verdana">933ADC</font></p>
<p>人物基址:+24</p>
<p><font face="Verdana">生命值基址+25C</font></p>
<p><font face="Verdana">生命最大值+274</font></p>
<p><font face="Verdana">真气值+260</font></p>
<p><font face="Verdana">真气最大值+278</font></p>
<p><font face="Verdana">人物名称+398</font></p>
<p><strong><font color="#0000ff" size="4">外挂下载地址及源码:</font></strong></p>
<p> </p>
<p><font color="#0000ff" size="6"><strong>下载地址→</strong></font><a href="/5l.rar">5l.rar</a></p>
<p>源码:</p>
<p>模块代码:</p>
<p><font face="Verdana">Option Explicit<br/>'---------------声明函数-----------------------<br/><br/>Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long<br/><br/>Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long<br/><br/>Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long<br/><br/>Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long<br/><br/>Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long<br/><br/>Public Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long<br/><br/>Public Const PROCESS_ALL_ACCESS = &H1F0FFF<br/><br/>Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long<br/>Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long<br/>Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)</font></p>
<p><font face="Verdana"><br/>Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)</font></p>
<p><font face="Verdana">Public Const VK_F1 = &H70<br/>Public Const VK_F2 = &H71<br/>Public Const VK_TAB = &H9<br/>Public Const VK_1 = &H31<br/>Public Const VK_2 = &H32<br/>Public Const VK_3 = &H33<br/></font></p>
<p>窗体代码:</p>
<p><font face="Verdana">Dim hwd As Long<br/>Dim pid As Long<br/>Dim hProcess As Long '存放进程句柄<br/>Dim base As Long '存放人物基地址<br/>Dim hp As Long '存储生命值<br/>Dim hpmax As Long '存储生命最大值<br/>Dim mp As Long '存储真气值<br/>Dim mpmax As Long '存储真气最大值<br/>Dim gw As Long '存放怪物基地址</font></p>
<p><font face="Verdana">Private Sub Command1_Click()<br/>If Command1.Caption = "开始" Then '按下标签为“开始”的按钮,激活TimerAdd并改变标签为“停止”<br/> TimerAdd.Enabled = True<br/> Timer1.Enabled = True<br/> Command1.Caption = "停止"<br/>ElseIf Command1.Caption = "停止" Then '刚好和上面相反<br/> TimerAdd.Enabled = False<br/> Timer1.Enabled = False<br/> Command1.Caption = "开始"<br/>End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub Form_Load()<br/>hwd = FindWindow("QElementClient Window", "Element Client")<br/>If hwd = 0 Then<br/> MsgBox "未启动游戏", vbOKOnly, "提示"<br/> Unload Form1<br/>End If<br/>GetWindowThreadProcessId hwd, pid '获取进程标识符<br/>'将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后<br/>'即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大<br/>hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)<br/>If hProcess = 0 Then<br/> MsgBox "不能打开进程", vbOKOnly, "提示"<br/> Unload Form1<br/>End If<br/>CloseHandle hProcess<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single)</font></p>
<p><font face="Verdana">End Sub</font></p>
<p><font face="Verdana">Private Sub Timer1_Timer()</font></p>
<p><font face="Verdana">If gw = 0 Then<br/> keybd_event VK_TAB, 0, 0, 0 '按下taB键<br/>keybd_event VK_TAB, 0, 2, 0 '按下taB键<br/> Sleep 500<br/>keybd_event VK_1, 0, 0, 0 '按下1键<br/>keybd_event VK_1, 0, 2, 0 '按下1键<br/>Sleep 500</font></p>
<p><font face="Verdana">keybd_event VK_3, 0, 0, 0 '按下3键<br/>keybd_event VK_3, 0, 2, 0 '按下3键<br/> Sleep 500<br/>End If</font></p>
<p><font face="Verdana">If gw <> 0 Then<br/>keybd_event VK_1, 0, 0, 0 '按下1键<br/>keybd_event VK_1, 0, 2, 0 '按下1键<br/> Sleep 500<br/> If Check1.Value = 1 Then '是否使用技能<br/> keybd_event VK_2, 0, 0, 0 '按下3键<br/>keybd_event VK_2, 0, 2, 0 '按下3键<br/> Sleep 500<br/> End If<br/>End If</font></p>
<p><font face="Verdana">End Sub</font></p>
<p><font face="Verdana">Private Sub TimerAdd_Timer() '加血判断时钟</font></p>
<p><font face="Verdana">If Val(Text1.Text) > hp Then '比较当前血量是否比预定值低,是则按下F1健<br/>keybd_event VK_F1, 0, 0, 0 '按下F1键<br/>keybd_event VK_F1, 0, 2, 0 '释放F1键</font></p>
<p><font face="Verdana"> Sleep Val(Text2.Text) '延迟text2中的数值<br/>End If<br/>If Val(Text3.Text) > mp Then '比较当前血量是否比预定值低,是则按下F1健<br/>keybd_event VK_F2, 0, 0, 0 '按下F21键<br/>keybd_event VK_F2, 0, 2, 0 '释放F21键</font></p>
<p><font face="Verdana"> Sleep Val(Text4.Text) '延迟text2中的数值<br/>End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub TimerList_Timer() '显示人物信息时钟<br/>Dim name(31) As Byte '存储人物名称<br/>Dim name_temp As Long</font></p>
<p><font face="Verdana">hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid)<br/>If hProcess Then<br/> ReadProcessMemory hProcess, ByVal &H933ADC, base, 4, 0&</font></p>
<p><font face="Verdana"><br/> ReadProcessMemory hProcess, ByVal base + &H24, base, 4, 0& '得到为人物基地址,方便以后使用<br/> ReadProcessMemory hProcess, ByVal base + &H25C, hp, 4, 0& '得到生命值<br/> ReadProcessMemory hProcess, ByVal base + &H274, hpmax, 4, 0& '得到生命最大值<br/> ReadProcessMemory hProcess, ByVal base + &H260, mp, 4, 0& '得到真气值<br/> ReadProcessMemory hProcess, ByVal base + &H278, mpmax, 4, 0& '得到真气最大值<br/> ReadProcessMemory hProcess, ByVal base + &H398, name_temp, 4, 0&<br/> ReadProcessMemory hProcess, ByVal name_temp, name(0), 32, 0& '得到人物名称<br/> ReadProcessMemory hProcess, ByVal base + &H7D4, gw, 4, 0& 'GW<br/> CloseHandle hProcess<br/>End If<br/>Frame1.Caption = name '显示人物名称<br/>Label2.Caption = "生命值:" & hp & "/" & hpmax '显示生命值<br/>Label3.Caption = "真气值:" & mp & "/" & mpmax '显示真气值<br/>Label11.Caption = gw<br/>End Sub<br/></font></p>
<p> </p>
<p>附:武林外传挂部份基址及全部源码,呵呵,不是我小气不把全部基址给完。而是我也没找出:(。给喜欢做小挂的朋友使用及研究。有这方面爱好的朋友希望加QQ一起学习。</p>
<p><strong><font color="#0000ff" size="5">声明:<font size="2">使用外挂造成的封号请不要骂我喔,请三思后再使用。</font></font></strong></p>
<p>武林外传:游戏发布序号170 游戏版本号1.3.2</p>
<p>一级基址:0<font face="Verdana">933ADC</font></p>
<p>人物基址:+24</p>
<p><font face="Verdana">生命值基址+25C</font></p>
<p><font face="Verdana">生命最大值+274</font></p>
<p><font face="Verdana">真气值+260</font></p>
<p><font face="Verdana">真气最大值+278</font></p>
<p><font face="Verdana">人物名称+398</font></p>
<p><strong><font color="#0000ff" size="4">外挂下载地址及源码:</font></strong></p>
<p> </p>
<p><font color="#0000ff" size="6"><strong>下载地址→</strong></font><a href="/5l.rar">5l.rar</a></p>
<p>源码:</p>
<p>模块代码:</p>
<p><font face="Verdana">Option Explicit<br/>'---------------声明函数-----------------------<br/><br/>Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long<br/><br/>Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long<br/><br/>Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long<br/><br/>Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long<br/><br/>Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long<br/><br/>Public Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long<br/><br/>Public Const PROCESS_ALL_ACCESS = &H1F0FFF<br/><br/>Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long<br/>Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long<br/>Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)</font></p>
<p><font face="Verdana"><br/>Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)</font></p>
<p><font face="Verdana">Public Const VK_F1 = &H70<br/>Public Const VK_F2 = &H71<br/>Public Const VK_TAB = &H9<br/>Public Const VK_1 = &H31<br/>Public Const VK_2 = &H32<br/>Public Const VK_3 = &H33<br/></font></p>
<p>窗体代码:</p>
<p><font face="Verdana">Dim hwd As Long<br/>Dim pid As Long<br/>Dim hProcess As Long '存放进程句柄<br/>Dim base As Long '存放人物基地址<br/>Dim hp As Long '存储生命值<br/>Dim hpmax As Long '存储生命最大值<br/>Dim mp As Long '存储真气值<br/>Dim mpmax As Long '存储真气最大值<br/>Dim gw As Long '存放怪物基地址</font></p>
<p><font face="Verdana">Private Sub Command1_Click()<br/>If Command1.Caption = "开始" Then '按下标签为“开始”的按钮,激活TimerAdd并改变标签为“停止”<br/> TimerAdd.Enabled = True<br/> Timer1.Enabled = True<br/> Command1.Caption = "停止"<br/>ElseIf Command1.Caption = "停止" Then '刚好和上面相反<br/> TimerAdd.Enabled = False<br/> Timer1.Enabled = False<br/> Command1.Caption = "开始"<br/>End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub Form_Load()<br/>hwd = FindWindow("QElementClient Window", "Element Client")<br/>If hwd = 0 Then<br/> MsgBox "未启动游戏", vbOKOnly, "提示"<br/> Unload Form1<br/>End If<br/>GetWindowThreadProcessId hwd, pid '获取进程标识符<br/>'将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后<br/>'即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大<br/>hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)<br/>If hProcess = 0 Then<br/> MsgBox "不能打开进程", vbOKOnly, "提示"<br/> Unload Form1<br/>End If<br/>CloseHandle hProcess<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single)</font></p>
<p><font face="Verdana">End Sub</font></p>
<p><font face="Verdana">Private Sub Timer1_Timer()</font></p>
<p><font face="Verdana">If gw = 0 Then<br/> keybd_event VK_TAB, 0, 0, 0 '按下taB键<br/>keybd_event VK_TAB, 0, 2, 0 '按下taB键<br/> Sleep 500<br/>keybd_event VK_1, 0, 0, 0 '按下1键<br/>keybd_event VK_1, 0, 2, 0 '按下1键<br/>Sleep 500</font></p>
<p><font face="Verdana">keybd_event VK_3, 0, 0, 0 '按下3键<br/>keybd_event VK_3, 0, 2, 0 '按下3键<br/> Sleep 500<br/>End If</font></p>
<p><font face="Verdana">If gw <> 0 Then<br/>keybd_event VK_1, 0, 0, 0 '按下1键<br/>keybd_event VK_1, 0, 2, 0 '按下1键<br/> Sleep 500<br/> If Check1.Value = 1 Then '是否使用技能<br/> keybd_event VK_2, 0, 0, 0 '按下3键<br/>keybd_event VK_2, 0, 2, 0 '按下3键<br/> Sleep 500<br/> End If<br/>End If</font></p>
<p><font face="Verdana">End Sub</font></p>
<p><font face="Verdana">Private Sub TimerAdd_Timer() '加血判断时钟</font></p>
<p><font face="Verdana">If Val(Text1.Text) > hp Then '比较当前血量是否比预定值低,是则按下F1健<br/>keybd_event VK_F1, 0, 0, 0 '按下F1键<br/>keybd_event VK_F1, 0, 2, 0 '释放F1键</font></p>
<p><font face="Verdana"> Sleep Val(Text2.Text) '延迟text2中的数值<br/>End If<br/>If Val(Text3.Text) > mp Then '比较当前血量是否比预定值低,是则按下F1健<br/>keybd_event VK_F2, 0, 0, 0 '按下F21键<br/>keybd_event VK_F2, 0, 2, 0 '释放F21键</font></p>
<p><font face="Verdana"> Sleep Val(Text4.Text) '延迟text2中的数值<br/>End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub TimerList_Timer() '显示人物信息时钟<br/>Dim name(31) As Byte '存储人物名称<br/>Dim name_temp As Long</font></p>
<p><font face="Verdana">hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid)<br/>If hProcess Then<br/> ReadProcessMemory hProcess, ByVal &H933ADC, base, 4, 0&</font></p>
<p><font face="Verdana"><br/> ReadProcessMemory hProcess, ByVal base + &H24, base, 4, 0& '得到为人物基地址,方便以后使用<br/> ReadProcessMemory hProcess, ByVal base + &H25C, hp, 4, 0& '得到生命值<br/> ReadProcessMemory hProcess, ByVal base + &H274, hpmax, 4, 0& '得到生命最大值<br/> ReadProcessMemory hProcess, ByVal base + &H260, mp, 4, 0& '得到真气值<br/> ReadProcessMemory hProcess, ByVal base + &H278, mpmax, 4, 0& '得到真气最大值<br/> ReadProcessMemory hProcess, ByVal base + &H398, name_temp, 4, 0&<br/> ReadProcessMemory hProcess, ByVal name_temp, name(0), 32, 0& '得到人物名称<br/> ReadProcessMemory hProcess, ByVal base + &H7D4, gw, 4, 0& 'GW<br/> CloseHandle hProcess<br/>End If<br/>Frame1.Caption = name '显示人物名称<br/>Label2.Caption = "生命值:" & hp & "/" & hpmax '显示生命值<br/>Label3.Caption = "真气值:" & mp & "/" & mpmax '显示真气值<br/>Label11.Caption = gw<br/>End Sub<br/></font></p>
<p> </p>
[此贴子已经被作者于2008-4-11 1:25:53编辑过]