- 按键认证大神
- 728264
- 3502
- 18
- 1899 朵
- 27454 个
- 1718 个
- 82980
- 2011-08-04
|
1#
t
T
发表于 2022-07-27 17:11
|
|只看楼主
界面:脚本比较简单,仅为分享游戏的大漠后台模式和过检测方法,以下源码均在Windows7 64位环境下运行。大漠后台分析:display 图色: 仅能使用参数"dx.graphic.3d",否则游戏画面获取黑屏。
mouse 鼠标: 参数"dx.mouse.position.lock.api"必填,只需要鼠标移动点击的话,就不需要填写其他参数了。过多的绑定参数会影响绑定速度及目标进程稳定性。但游戏限制操作速度,所以移动、鼠标按住和鼠标弹起之间需要加延迟,建议50毫秒以上,否则可能操作无效。
keypad 键盘: 参数"dx.keypad.api"必填,键盘用不到组合键,就不需要填写其他参数了。同鼠标一样,建议键盘按住和弹起的延迟保持50毫秒以上。
public 公共: 参数"dx.public.active.message"必填,否则后台操作会导致游戏被激活至前台。参数"dx.public.graphic.protect"必填,否则游戏画面获取黑屏。
mode 模式:大漠提供的参数均可使用,这里推荐101,会隐藏目标进程中的大漠插件。完整参数:dm_ret = dm.BindWindowEx(hwnd,"dx.graphic.3d","dx.mouse.position.lock.api","dx.keypad.api","dx.public.active.message|dx.public.graphic.protect",101)过检测分析:经过一系列测试,得知游戏检测按键精灵的方法有2项,其中一项被检测到都不行。1、检测电脑中是否曾经打开过按键精灵。2、检测电脑中是否正在运行按键精灵。方法1检测效果:只要你运行过按键精灵,打开游戏之前按键精灵进程不存在,游戏开启后也会检测到按键精灵。应对方案:1、隐藏或保护按键精灵所在目录。2、清除电脑中运行过按键精灵的痕迹。方案1,难度大,操作复杂,弃用。方案2,可使用插件进行清除,十分简单。可参考我的帖子:【源码】清除系统使用痕迹 http://bbs.anjian.com/showtopic-701289-1.aspx方法2检测效果:只要电脑当前运行进程中有符合按键精灵特征的程序,即便不启动脚本,也会被检测到。应对方案:1、保护进程,如按键神盾、大漠防护盾。2、修改按键精灵特征,如神盾补丁。以上方案均可,本人采用的是大漠防护盾b2,即dm.DmGuard 1,"b2",需要注意的是在使用大漠防护盾时,由于涉及驱动加载,会有概率触发电脑蓝屏,请确保重要的文件已保存,否则可能导致文件丢失。源码:- Declare Function SetDllPathW Lib ".\plugin\dmreg.dll" Alias "SetDllPathW" (ByVal path As String, ByVal mode As Long) As Long
- Dimenv 脚本资源目录, 注册返回值, 是否已开启保护盾
- Dimenv 临时文件目录, 自身文件路径
- If 注册返回值 <> 1 Then
- MessageBox "脚本不可运行!"
- ExitScript
- End If
- Call 创建大漠对象
- Call 设置大漠相对路径(脚本资源目录)
- Dim hwnd, dm_ret
- hwnd = dm.FindWindow("Direct3DWindowClass", "Elsword")
- dm_ret = dm.SetWindowState(hwnd,12)
- dm_ret = dm.BindWindowEx(hwnd,"dx.graphic.3d","dx.mouse.position.lock.api","dx.keypad.api","dx.public.active.message|dx.public.graphic.protect",101)
- If dm_ret = 0 Then
- MessageBox "绑定失败,错误代码:" & dm.GetLastError()
- ExitScript
- End If
- Delay 1000
- Dim 技能数组最大下标
- 技能数组最大下标 = - 1
- Redim 技能数组(技能数组最大下标)
- Dim 技能热键1选项, 技能热键2选项, 技能热键3选项, 技能热键4选项, 技能热键5选项
- 技能热键1选项 = Main.技能热键1.ListIndex
- 技能热键2选项 = Main.技能热键2.ListIndex
- 技能热键3选项 = Main.技能热键3.ListIndex
- 技能热键4选项 = Main.技能热键4.ListIndex
- 技能热键5选项 = Main.技能热键5.ListIndex
- If 技能热键1选项 <> 0 Then
- 技能数组最大下标 = 技能数组最大下标 + 1
- Redim Preserve 技能数组(技能数组最大下标)
- 技能数组(技能数组最大下标) = Array(Asc(Split(Main.技能热键1.List, "|")(技能热键1选项)), CDbl(Main.使用间隔1.Text) * 1000, CDbl(Main.使用等待1.Text) * 1000)
- End If
- If 技能热键2选项 <> 0 Then
- 技能数组最大下标 = 技能数组最大下标 + 1
- Redim Preserve 技能数组(技能数组最大下标)
- 技能数组(技能数组最大下标) = Array(Asc(Split(Main.技能热键2.List, "|")(技能热键2选项)), CDbl(Main.使用间隔2.Text) * 1000, CDbl(Main.使用等待2.Text) * 1000)
- End If
- If 技能热键3选项 <> 0 Then
- 技能数组最大下标 = 技能数组最大下标 + 1
- Redim Preserve 技能数组(技能数组最大下标)
- 技能数组(技能数组最大下标) = Array(Asc(Split(Main.技能热键3.List, "|")(技能热键3选项)), CDbl(Main.使用间隔3.Text) * 1000, CDbl(Main.使用等待3.Text) * 1000)
- End If
- If 技能热键4选项 <> 0 Then
- 技能数组最大下标 = 技能数组最大下标 + 1
- Redim Preserve 技能数组(技能数组最大下标)
- 技能数组(技能数组最大下标) = Array(Asc(Split(Main.技能热键4.List, "|")(技能热键4选项)), CDbl(Main.使用间隔4.Text) * 1000, CDbl(Main.使用等待4.Text) * 1000)
- End If
- If 技能热键5选项 <> 0 Then
- 技能数组最大下标 = 技能数组最大下标 + 1
- Redim Preserve 技能数组(技能数组最大下标)
- 技能数组(技能数组最大下标) = Array(Asc(Split(Main.技能热键5.List, "|")(技能热键5选项)), CDbl(Main.使用间隔5.Text) * 1000, CDbl(Main.使用等待5.Text) * 1000)
- End If
- Dim 人物左侧移动时长下限,人物左侧移动时长上限,人物右侧移动时长下限,人物右侧移动时长上限
- 人物左侧移动时长下限 = CDbl(Main.人物左侧移动时长下限.Text) * 1000
- 人物左侧移动时长上限 = CDbl(Main.人物左侧移动时长上限.Text) * 1000
- 人物右侧移动时长下限 = CDbl(Main.人物右侧移动时长下限.Text) * 1000
- 人物右侧移动时长上限 = CDbl(Main.人物右侧移动时长上限.Text) * 1000
- Redim 技能计时数组(技能数组最大下标)
- Dim 人物移动数组(1)
- 人物移动数组(0) = Array(37, 人物左侧移动时长下限, 人物左侧移动时长上限)
- 人物移动数组(1) = Array(39, 人物右侧移动时长下限, 人物右侧移动时长上限)
- Dim i, k
- For i = 0 To 技能数组最大下标
- 技能计时数组(i) = - 1
- Next
- Dim 施放当前技能,人物开始移动时间,人物移动时长,是否已弹起人物移动按键
- Do
- For k = 1 To 0 Step - 1
- 人物移动时长 = 生成随机数(人物移动数组(k)(1), 人物移动数组(k)(2))
- 人物开始移动时间 = Plugin.Sys.GetTime()
- 是否已弹起人物移动按键 = 1
- Do
- If Plugin.Sys.GetTime() - 人物开始移动时间 >= 人物移动时长 Then
- If 是否已弹起人物移动按键 = 0 Then
- dm.KeyUp 人物移动数组(k)(0)
- Delay 生成随机数(10, 30)
- End If
- Exit Do
- Else
- If 是否已弹起人物移动按键 = 1 Then
- dm.KeyDown 人物移动数组(k)(0)
- Delay 生成随机数(5, 10)
- dm.KeyUp 人物移动数组(k)(0)
- Delay 生成随机数(5, 10)
- dm.KeyDown 人物移动数组(k)(0)
- Delay 生成随机数(10, 30)
- 是否已弹起人物移动按键 = 0
- End If
- End If
- For i = 0 To 技能数组最大下标
- 施放当前技能 = 0
- If 技能计时数组(i) = - 1 Then
- 施放当前技能 = 1
- ElseIf Plugin.Sys.GetTime() - 技能计时数组(i) >= 技能数组(i)(1) Then
- 施放当前技能 = 1
- End If
- If 施放当前技能 = 1 Then
- If 是否已弹起人物移动按键 = 0 Then
- dm.KeyUp 人物移动数组(k)(0)
- Delay 生成随机数(10, 30)
- 是否已弹起人物移动按键 = 1
- End If
- 技能计时数组(i) = Plugin.Sys.GetTime()
- KeyPressEx 技能数组(i)(0)
- Delay 生成随机数(10, 30)
- If 技能数组(i)(2) <> 0 Then
- Delay 技能数组(i)(2)
- End If
- End If
- Next
- Loop
- Next
- Delay 10
- Loop
- Function 生成随机数(Num1, Num2)
- Dim 最小值, 最大值
- If Num1 > Num2 Then
- 最小值 = Num2
- 最大值 = Num1
- Else
- 最小值 = Num1
- 最大值 = Num2
- End If
- Randomize
- 生成随机数 = Int((最大值 - 最小值 + 1) * Rnd + 最小值)
- End Function
- Sub 移动左单击(x, y)
- dm.Moveto x, y
- Delay 生成随机数(50, 100)
- dm.LeftDown
- Delay 生成随机数(50, 100)
- dm.LeftUp
- End Sub
- Sub KeyPressEx(key_code)
- dm.KeyDown key_code
- Delay 生成随机数(50, 100)
- dm.KeyUp key_code
- End Sub
- Sub 释放文件
- PutAttachment 脚本资源目录, "*.*"
- PutAttachment ".\plugin", "dmreg.dll"
- PutAttachment ".\plugin", "lxj_Plug.dll"
- End Sub
- Sub 创建大漠对象
- Set dm = createobject("dm.dmsoft")
- End Sub
- Sub 设置大漠相对路径(路径)
- dm_ret = dm.SetPath(路径)
- End Sub
- Sub 注册大漠插件到系统
- Dim ver, need_ver
- need_ver = "7.2213"
- set ws=nothing
- Call SetDllPathW(脚本资源目录 & "dm.dll", 0)
- set dm = createobject("dm.dmsoft")
- ver = dm.ver()
- If ver = "" Then
- MessageBox "插件对象创建失败!"
- ElseIf ver <> need_ver Then
- MessageBox "插件版本错误,当前使用的版本是:" & ver & ",插件所在目录是:" & dm.GetBasePath()
- End If
- End Sub
- Sub OnScriptExit()
- Dim typename_dm
- typename_dm = typename(dm)
- If typename_dm <> "Empty" And typename_dm <> "Nothing" Then
- Call dm.UnBindWindow()
- Set dm = Nothing
- End If
- End Sub
- Event Main.Load
- 脚本资源目录 = "C:\艾尔之光\" & GetMacroID() & "\"
- Call 创建文件夹Ex(脚本资源目录)
- Call 释放文件
- Call 从注册表中清除开始菜单最近打开的程序记录
- Call 注册大漠插件到系统
- 注册返回值 = dm.Reg("这里输入你自己的注册码", "")
- if 注册返回值 <> 1 then
- If 注册返回值 = - 1 Then
- MessageBox "无法连接网络,请检查后重新启动本软件!"
- ElseIf 注册返回值 = - 2 Then
- MessageBox "权限不够,请关闭本软件后以管理员模式重新启动本软件!"
- ElseIf 注册返回值 = 0 Then
- MessageBox "未知错误,联系作者进行解决!"
- ElseIf 注册返回值 = 2 Then
- MessageBox "错误代码2,联系作者进行解决!"
- ElseIf 注册返回值 = 4 Then
- MessageBox "注册码错误!"
- ElseIf 注册返回值 = 5 Then
- MessageBox "你的机器或者IP在黑名单列表中或者不在白名单列表中,联系作者解决!"
- ElseIf 注册返回值 = 6 Then
- MessageBox "错误代码6,联系作者进行解决!"
- ElseIf 注册返回值 = 7 Then
- MessageBox "错误代码7,联系作者进行解决!"
- End If
- End If
- 是否已开启保护盾 = 0
- Dim b2_ret
- If 注册返回值 = 1 Then
- b2_ret = dm.DmGuard(1, "b2")
- If b2_ret <> 1 Then
- MessageBox "保护盾开启失败,错误代码:" & b2_ret
- Else
- 是否已开启保护盾 = 1
- End If
- End If
- End Event
- Sub 创建文件夹Ex(路径)
- Dim 当前路径
- If 获取路径基本名称(路径) <> "" Then
- 当前路径 = 路径
- 路径 = 获取路径父文件夹(路径)
- Call 创建文件夹Ex(路径)
- Call 创建文件夹(当前路径)
- End If
- End Sub
- Function 获取路径父文件夹(DriveSpec)
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- 获取路径父文件夹 = fso.GetParentFolderName(Drivespec)
- set fso = nothing
- End Function
- Function 获取路径基本名称(filespec)
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- 获取路径基本名称 = fso.GetBaseName(filespec)
- set fso = nothing
- End Function
- Sub 创建文件夹(路径)
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- fso.CreateFolder 路径
- set fso = nothing
- End Sub
- Event Main.UnLoad
- If 是否已开启保护盾 = 1 Then
- Call dm.DmGuard(0, "b2")
- End If
- Dim typename_dm
- typename_dm = typename(dm)
- If typename_dm <> "Empty" And typename_dm <> "Nothing" Then
- Set dm = Nothing
- End If
- End Event
- Function EnumKeyEx(项全名)
- Dim EnumKey_ret, Keys, SubKeys
- Keys = ""
- SubKeys = ""
- Dim i, 新项全名
- 新项全名 = 项全名
- EnumKey_ret = Plugin.LXJ_PLUG.lxj_EnumKey(新项全名)
- If EnumKey_ret(0) <> 0 Then
- For i = 1 To EnumKey_ret(0)
- 新项全名 = 项全名 & "\" & EnumKey_ret(i)
- If Keys = "" Then
- Keys = 新项全名
- Else
- Keys = Keys & "|" & 新项全名
- End If
- SubKeys = EnumKeyEx(新项全名)
- If SubKeys <> "" Then
- Keys = Keys & "|" & EnumKeyEx(新项全名)
- End If
- Next
- End If
- EnumKeyEx = Keys
- End Function
- Function 从注册表中清除开始菜单最近打开的程序记录
- Dim Keys, i, KeyValues, k
- Keys = Split(EnumKeyEx("HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\USERASSIST"), "|")
- U_Keys = UBound(Keys)
- For i = 0 To U_Keys
- KeyValues = Plugin.LXJ_PLUG.lxj_EnumValue(Keys(i))
- For k = 1 To KeyValues(0)
- If KeyValues(k) <> "Version" Then
- Call Plugin.LXJ_PLUG.lxj_DelValue(Keys(i), KeyValues(k))
- End If
- Next
- Next
- End Function
- Event Main.技能热键1.SelectChange
- If Main.技能热键1.ListIndex = 0 Then
- Main.使用间隔1.Enabled = false
- Main.使用等待1.Enabled = false
- Else
- Main.使用间隔1.Enabled = true
- Main.使用等待1.Enabled = true
- End If
- End Event
- Event Main.技能热键2.SelectChange
- If Main.技能热键2.ListIndex = 0 Then
- Main.使用间隔2.Enabled = false
- Main.使用等待2.Enabled = false
- Else
- Main.使用间隔2.Enabled = true
- Main.使用等待2.Enabled = true
- End If
- End Event
- Event Main.技能热键3.SelectChange
- If Main.技能热键3.ListIndex = 0 Then
- Main.使用间隔3.Enabled = false
- Main.使用等待3.Enabled = false
- Else
- Main.使用间隔3.Enabled = true
- Main.使用等待3.Enabled = true
- End If
- End Event
- Event Main.技能热键4.SelectChange
- If Main.技能热键4.ListIndex = 0 Then
- Main.使用间隔4.Enabled = false
- Main.使用等待4.Enabled = false
- Else
- Main.使用间隔4.Enabled = true
- Main.使用等待4.Enabled = true
- End If
- End Event
- Event Main.技能热键5.SelectChange
- If Main.技能热键5.ListIndex = 0 Then
- Main.使用间隔5.Enabled = false
- Main.使用等待5.Enabled = false
- Else
- Main.使用间隔5.Enabled = true
- Main.使用等待5.Enabled = true
- End If
- End Event
复制代码 源文件:- temp.zip (, 下载次数:391)
注:大漠功能涉及插件付费,需要在软件中自行替换为自己的大漠注册码。
|