- 按键认证大神
- 728264
- 3502
- 18
- 1899 朵
- 27454 个
- 1718 个
- 82980
- 2011-08-04
|
1#
t
T
发表于 2022-03-30 01:37
|
|只看楼主
解密界面:解密提示: 思路:游戏解密需要输入0~999内的数字,不限制输入次数。每次输入一个数字点击“开锁”会弹出提示,告诉你输入的数字是比正确密码大还是小。1、从0开始输入,提示密码更大就保存当前数字,每次递增100,直至提示密码更小。2、然后把上次保存的数字输入,提示密码更大就保存当前数字,每次递增10,直至提示密码更小。3、继续把上次保存的数字输入,提示密码更大就保存当前数字,每次递增1,直至提示密码正确。 以上方法最多输入30次密码,即可测出正确密码。当然你也可以穷举密码,但是那样最多需要输入1000次密码,才能测出正确密码。相比穷举法,以上方法效率要高得多。模拟游戏解密场景源码:- Dim 答案
- 答案 = 生成随机数(0, 999)
- TracePrint "答案:" & 答案
- Dim 当前数字, 递增值, 循环次数, 探测值
- 当前数字 = 0
- 循环次数 = 1
- 递增值 = 100
- Dim 操作次数
- 操作次数 = 0
- Do
- 操作次数 = 操作次数 + 1
- TracePrint "当前数字:" & 当前数字
- If 答案 > 当前数字 Then
- 探测值 = 当前数字
- ElseIf 答案 < 当前数字 Then
- 当前数字 = 探测值
- 循环次数 = 循环次数 + 1
- ElseIf 答案 = 当前数字 Then
- TracePrint "答案匹配"
- Exit Do
- End If
- If 循环次数 = 2 Then
- 递增值 = 10
- ElseIf 循环次数 = 3 Then
- 递增值 = 1
- End If
- 当前数字 = 当前数字 + 递增值
- If 当前数字 > 999 Then
- 当前数字 = 999
- End If
- Loop
- TracePrint "操作次数:" & 操作次数
- Function 生成随机数(最小值, 最大值)
- Randomize
- 生成随机数 = Int((最大值 - 最小值 + 1) * Rnd + 最小值)
- End Function
复制代码 实战源码:
- //游戏分辨率为1024X768 窗口模式
- Public Declare Function SetDllPathW Lib ".\plugin\dmreg.dll" Alias "SetDllPathW" (ByVal path As String, ByVal mode As Long) As Long
- Dim 脚本ID, 脚本文件存放路径
- 脚本ID = GetMacroID()
- 脚本文件存放路径 = "C:\释厄英雄宝箱猜数字\" & 脚本ID & "\"
- Call 创建文件夹Ex(脚本文件存放路径)
- Call 释放文件
- Call 注册大漠插件到系统
- Call 创建大漠对象
- Call 设置大漠相对路径(脚本文件存放路径)
- Dim hwnd
- hwnd = dm.FindWindow("GLFW30", "释厄英雄")
- If hwnd = 0 Then
- MessageBox "未能找到游戏窗口!"
- ExitScript
- End If
- dm_ret = dm.BindWindowEx(hwnd, "normal", "normal", "normal", "", 0)
- If dm_ret = 0 Then
- MessageBox "游戏绑定失败,错误代码:" & dm.GetLastError()
- ExitScript
- End If
- Dim ksan_ret
- ksan_ret = 是否找到了开锁按钮(1, 50, true)
- If ksan_ret(0) = - 1 Then
- MessageBox "未找到开锁界面!"
- ExitScript
- End If
- Dim 当前数字, 递增值, 循环次数, 探测值
- 当前数字 = 0
- 循环次数 = 1
- 递增值 = 100
- Dim tjks_ret
- Do
- Call 输入数字(hwnd, ksan_ret, 当前数字)
- tjks_ret = 提交开锁(ksan_ret)
- Call 关闭开锁结果提示
- If tjks_ret = 1 Then //密码更大
- 探测值 = 当前数字
- ElseIf tjks_ret = 2 Then //密码更小
- 当前数字 = 探测值
- 循环次数 = 循环次数 + 1
- ElseIf tjks_ret = 0 Then //密码匹配
- TracePrint "答案匹配"
- Exit Do
- End If
- If 循环次数 = 2 Then
- 递增值 = 10
- ElseIf 循环次数 = 3 Then
- 递增值 = 1
- End If
- 当前数字 = 当前数字 + 递增值
- If 当前数字 > 999 Then
- 当前数字 = 999
- End If
- TracePrint "当前数字:" & 当前数字
- Loop
- MessageBox "开锁成功!"
- Function 输入数字(hwnd, ksan_ret, str)
- Call 移动左单击(ksan_ret(1) + 1, ksan_ret(2) - 463 + 生成随机数(2, 2))
- Delay 50
- dm.SendString hwnd, str
- Delay 100
- End Function
- Function 提交开锁(ksan_ret)
- Dim ret
- Do
- Call 移动左单击(ksan_ret(1) + 生成随机数(2, 2), ksan_ret(2) + 生成随机数(2, 2))
- Delay 50
- ret = 是否找到了开锁结果(20, 50, true)
- If ret(0) <> - 1 Then
- Exit Do
- End If
- loop
- 提交开锁 = ret(0)
- End Function
- Function 是否找到了开锁按钮(查找次数, 查找间隔, 返回条件)
- 是否找到了开锁按钮 = 循环查找指定图片E_扩展(0, 0, 1023, 767, "开锁按钮.bmp", "101010", 0.95, 0, 查找次数, 查找间隔, 返回条件)
- End Function
- Function 是否找到了开锁结果(查找次数, 查找间隔, 返回条件)
- 是否找到了开锁结果 = 循环查找指定图片E_扩展(403,372,569,398, "没错.bmp|密码更大.bmp|密码更小.bmp", "101010", 0.9, 0, 查找次数, 查找间隔, 返回条件)
- End Function
- Function 关闭开锁结果提示
- Do
- Call 移动左单击(823 + 生成随机数(2, 2), 382 + 生成随机数(2, 2))
- Delay 50
- If 是否找到了开锁结果(20, 50, false)(0) = - 1 Then
- Exit Do
- End If
- Loop
- End Function
- Function 移动左单击(x, y)
- dm.Moveto x, y
- Delay 10
- dm.LeftClick
- End Function
- Function 生成随机数(最小值, 最大值)
- Randomize
- 生成随机数 = Int((最大值 - 最小值 + 1) * Rnd + 最小值)
- End Function
- Function 循环查找指定图片E(x1, y1, x2, y2, 图片名, 查找次数, 查找间隔, 返回条件)
- Dim ret
- For 查找次数
- ret = dm.FindPicE(x1, y1, x2, y2, 图片名, "000000", 0.9, 0)
- If 返回条件 = true Then
- If ret <> "-1|-1|-1" Then
- Exit For
- End If
- End If
- If 返回条件 = false Then
- If ret = "-1|-1|-1" Then
- Exit For
- End If
- End If
- delay 查找间隔
- Next
- ret = Split(ret, "|")
- 循环查找指定图片E = Array(CLng(ret(0)), CLng(ret(1)), CLng(ret(2)))
- End Function
- Function 循环查找指定图片E_扩展(x1, y1, x2, y2, 图片名, 偏色, 精准度, 查找方向, 查找次数, 查找间隔, 返回条件)
- Dim ret
- For 查找次数
- ret = dm.FindPicE(x1, y1, x2, y2, 图片名, 偏色, 精准度, 查找方向)
- If 返回条件 = true Then
- If ret <> "-1|-1|-1" Then
- Exit For
- End If
- End If
- If 返回条件 = false Then
- If ret = "-1|-1|-1" Then
- Exit For
- End If
- End If
- Delay 查找间隔
- Next
- ret = Split(ret, "|")
- 循环查找指定图片E_扩展 = Array(CLng(ret(0)), CLng(ret(1)), CLng(ret(2)))
- End Function
- Sub OnScriptExit()
- Call dm.UnBindWindow()
- End Sub
- Sub 释放文件
- PutAttachment 脚本文件存放路径, "*.*"
- PutAttachment ".\plugin", "dmreg.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="3.1233"
- 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 创建文件夹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
复制代码 实战源文件:- test.zip (, 下载次数:199)
|