|
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 线程池 | 线程池 | | 目标MD5 | 文本型 | | 字符集 | 文本型 | | 最小长度 | 整数型 | | 最大长度 | 整数型 | | 已停止 | 逻辑型 | | 尝试次数 | 长整数型 | | 开始时间 | 长整数型 | | 成功密码 | 文本型 | | 字符缓存 | 字节集 | | 字符缓存长度 | 整数型 | | 最后保存时间 | 长整数型 | | 字典模式 | 逻辑型 | | 字典内容 | 文本型 | 0 | 当前字典索引 | 整数型 | |
线程池. 创建 (取处理器数 (), , , ) 编辑框_字符集.内容 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 编辑框_最小长度.内容 = "1" 编辑框_最大长度.内容 = "6" 状态条1. 置文本 (0, "就绪" )状态条1. 置文本 (1, "线程: " + 到文本 (取处理器数 ()) )超级列表框1. 插入列 (, "线程ID", 80, , , )超级列表框1. 插入列 (, "当前密码", 150, , , )超级列表框1. 插入列 (, " 速度 (次/秒 )", 100, , , )超级列表框1. 插入列 (, "尝试次数", 100, , , )最后保存时间 = 取启动时间 () 如果真 (编辑框_MD5.内容 = "" ) 信息框 ("请输入MD5值!", #错误图标, , ) 返回 () 如果真 (取文本长度 (字符集 ) = 0 且 字典模式 = 假) 信息框 ("字符集不能为空!", #错误图标, , ) 返回 ()目标MD5 = 编辑框_MD5.内容 字符集 = 编辑框_字符集.内容 最小长度 = 到整数 (编辑框_最小长度.内容 )最大长度 = 到整数 (编辑框_最大长度.内容 )已停止 = 假 尝试次数 = 0 成功密码 = "" 开始时间 = 取启动时间 ()最后保存时间 = 取启动时间 () 字符缓存长度 = 取文本长度 (字符集 )字符缓存 = 到字节集 (字符集 ) 超级列表框1. 全部删除 () 计次循环首 (线程池. 取最大线程数 (), i ) 索引 = 超级列表框1. 插入表项 (, , , , , ) 超级列表框1. 置标题 (索引, 0, "线程" + 到文本 (i ))  超级列表框1. 置标题 (索引, 1, "初始化中..." ) 超级列表框1. 置标题 (索引, 2, "0" ) 超级列表框1. 置标题 (索引, 3, "0" ) 计次循环尾 () 如果 (选择框_字典模式.选中 ) 字典模式 = 真  当前字典索引 = 0   如果真 (通用对话框1. 打开 () = 假) 返回 ()  文件号 = 打开文件 (通用对话框1.文件名, , ) 如果真 (文件号 = 0 ) 信息框 ("无法打开字典文件!", #错误图标, , ) 返回 ()  文本 = 读入文本 (文件号, ) 关闭文件 (文件号 )  字典内容 = 分割文本 (文本, #换行符, ) 如果真 (取数组成员数 (字典内容 ) = 0 ) 信息框 ("字典文件内容为空!", #错误图标, , ) 返回 ()  标签_结果.标题 = "字典模式启动,条目数: " + 到文本 (取数组成员数 (字典内容 ))   字典模式 = 假  标签_结果.标题 = "暴力破J启动..." 状态条1. 置文本 (0, "运行中" )按钮_开始.禁止 = 真 按钮_暂停.禁止 = 假 按钮_保存.禁止 = 假 计次循环首 (线程池. 取最大线程数 (), i ) 线程池. 投递任务 (&破J任务, i, ) 计次循环尾 () 如果 (已停止 ) 已停止 = 假  按钮_暂停.标题 = "暂停"  状态条1. 置文本 (0, "运行中" )  计次循环首 (线程池. 取最大线程数 (), i )  线程池. 投递任务 (&破J任务, i, )  计次循环尾 ()  已停止 = 真  按钮_暂停.标题 = "继续"  状态条1. 置文本 (0, "已暂停" ) 调用子程序 (&保存进度, ).局部变量 文件号, 整数型 .局部变量 保存内容, 文本型 文件号 = 打开文件 ("破J进度.txt", #重写, ) 如果真 (文件号 = 0 ) 信息框 ("无法保存进度!", #错误图标, , ) 返回 ()保存内容 = "目标MD5:" + 目标MD5 + #换行符 保存内容 = 保存内容 + "字符集:" + 字符集 + #换行符 保存内容 = 保存内容 + "最小长度:" + 到文本 (最小长度 ) + #换行符 保存内容 = 保存内容 + "最大长度:" + 到文本 (最大长度 ) + #换行符 保存内容 = 保存内容 + "尝试次数:" + 到文本 (尝试次数 ) + #换行符 保存内容 = 保存内容 + "开始时间:" + 到文本 (开始时间 ) + #换行符 如果 (字典模式 ) 保存内容 = 保存内容 + "字典模式:是" + #换行符  保存内容 = 保存内容 + "当前字典索引:" + 到文本 (当前字典索引 ) + #换行符   保存内容 = 保存内容 + "字典模式:否" + #换行符 写出文本 (文件号, 保存内容 )关闭文件 (文件号 )状态条1. 置文本 (0, "进度已保存" )|
(暂未填写DLL命令名) | | | |
(未填写库文件名) | |
(未填写命令名) | |
线程ID | 整数型 | | |
.局部变量 当前密码, 文本型 .局部变量 局部尝试次数, 长整数型 .局部变量 局部开始时间, 长整数型 .局部变量 最后更新时间, 长整数型 局部尝试次数 = 0 局部开始时间 = 取启动时间 ()最后更新时间 = 取启动时间 () 判断循环首 (取反 (已停止 ) 且 成功密码 = "" ) 如果 (字典模式 )   如果真 (当前字典索引 ≥ 取数组成员数 (字典内容 ))   跳出循环 ()    当前密码 = 字典内容 [当前字典索引 ]  当前字典索引 = 当前字典索引 + 1      当前密码 = 生成密码 (线程ID )   如果真 (当前密码 ≠ "" )  局部尝试次数 = 局部尝试次数 + 1  原子递增 (尝试次数 )     如果真 (取数据摘要 (到字节集 (当前密码 )) = 目标MD5 )   成功密码 = 当前密码   调用子程序 (&显示结果, 成功密码 )  返回 ()     如果真 (取启动时间 () - 最后更新时间 > 100 )  调用子程序 (&更新线程状态, 线程ID, 当前密码, 局部尝试次数, 局部开始时间 )   最后更新时间 = 取启动时间 ()   局部尝试次数 = 0    局部开始时间 = 取启动时间 ()     如果真 (取启动时间 () - 最后保存时间 > 10000 )  调用子程序 (&保存进度 )   最后保存时间 = 取启动时间 ()   判断循环尾 ()  如果真 (取反 (字典模式 ) 且 成功密码 = "" ) 调用子程序 (&更新线程状态, 线程ID, "任务完成", 局部尝试次数, 局部开始时间 )  进入许可区 (许可区 ) 变量 = 变量 + 1 退出许可区 (许可区 )|
更新线程状态 | | | |
线程ID | 整数型 | | | | 当前密码 | 文本型 | | | | 尝试次数 | 长整数型 | | | | 开始时间 | 长整数型 | | | |
 .局部变量 速度, 双精度小数型  .局部变量 用时, 整数型   用时 = 取启动时间 () - 开始时间  如果真 (用时 = 0 )  速度 = 0   速度 = 尝试次数 ÷ (用时 ÷ 1000 )  计次循环首 (超级列表框1. 取表项数 (), i )  如果真 (超级列表框1. 取标题 (i, 0 ) = "线程" + 到文本 (线程ID ))    超级列表框1. 置标题 (i, 1, 当前密码 )   超级列表框1. 置标题 (i, 2, 到文本 (取整 (速度 )) )   超级列表框1. 置标题 (i, 3, 到文本 (尝试次数 ))   跳出循环 ()  计次循环尾 ()  状态条1. 置文本 (2, "总尝试: " + 到文本 (尝试次数 ))  状态条1. 置文本 (3, "总速度: " + 到文本 (取整 (尝试次数 ÷ ( (取启动时间 () - 开始时间 ) ÷ 1000 )) ) + "次/秒" )  如果真 (最大长度 > 0 且 取反 (字典模式 ))   .局部变量 总组合数, 长整数型   .局部变量 剩余组合数, 长整数型   .局部变量 完成比例, 双精度小数型   .局部变量 预计剩余时间, 整数型     总组合数 = 计算总组合数 (字符缓存长度, 最小长度, 最大长度 )  完成比例 = 尝试次数 ÷ 总组合数   剩余组合数 = 总组合数 - 尝试次数     如果真 (尝试次数 > 0 且 完成比例 < 1 )   预计剩余时间 = (剩余组合数 ÷ (尝试次数 ÷ ( (取启动时间 () - 开始时间 ) ÷ 1000 )) ) ÷ 3600    状态条1. 置文本 (4, "进度: " + 取文本左边 (到文本 (完成比例 × 100 ), 5 ) + "% 剩余: " + 到文本 (预计剩余时间 ) + "小时" )     如果 (密码 ≠ "" )  标签_结果.标题 = "破J成功!密码:" + 密码   状态条1. 置文本 (0, "成功" )  剪辑板. 置文本 (密码 )  如果 (字典模式 )   标签_结果.标题 = "字典破J完成,未找到匹配密码"    标签_结果.标题 = "暴力破J完成,未找到匹配密码"  状态条1.置文本 (0, "完成")  按钮_开始.禁止 = 假  按钮_暂停.禁止 = 真  已停止 = 真  调用子程序 (&保存进度 )|
计算总组合数 | 长整数型 | | |
字符数 | 整数型 | | | | 最小长度 | 整数型 | | | | 最大长度 | 整数型 | | | |
总数 = 0 计次循环首 (最大长度 - 最小长度 + 1, i ) 总数 = 总数 + 求幂 (字符数, 最小长度 + i - 1 ) 计次循环尾 ()返回 (总数 ) 如果 (选择框_字典模式.选中 )  编辑框_字符集.禁止 = 真   编辑框_最小长度.禁止 = 真   编辑框_最大长度.禁止 = 真   按钮_选择字典.禁止 = 假   字典模式 = 真   编辑框 |
eThread | (未知支持库) | dp1 | iext | spec |
补充内容 (2025-6-21 17:21):
自己写个代码,自己跑去 |
|