
这是两个旨在在《Grey Hack》中编译和运行的工具。第一个名为xwifi。它会自动破解所有可用WiFi网络的密码,跳过信号强度低的网络和已破解的网络。结果会输出到文件中。此工具可随时运行,它会更新新网络列表,并清除不再可用的网络。 第二个是我称之为nomad的工具。它读取xwifi生成的文件,并按照你运行时指定的时间间隔(以秒为单位)随机切换你所连接的网络。它每次都会读取文件,因此你可以在nomad运行时运行xwifi,它在选择要切换的网络时会考虑新破解的网络。它还能确保不会随机切换到你已连接的相同网络。 这些程序可以在任何地方运行,但设计上要求它们在同一位置运行。这意味着,xwifi会在其运行的目录中创建并写入文件,而nomad则会在其运行的目录中查找该文件。 xwifi // 查找: // 查找匹配特定模式且带有可选标志的文件(和文件夹)。使用*作为通配符。 // 描述:标志: // 描述:b - 二进制文件(不包括文件夹) // 描述:f - 仅文件夹 // 描述:t - 文本文件 // 描述:r - 可读取 // 描述:w - 可写入 // 描述:x - 可执行 // 示例 g.func.find(file, "*.delete print(formatResults(results, 1)) nomad green = function(str) return "<color=#81eb00><b>"+str+"</b></color>" end function magenta = function(str) return "<color=#b0509e><b>"+str+"</b></color>" end function red = function(str) return "<color=#c30000><b>"+str+"</b></color>" end function // **查找:** // 查找匹配特定模式的文件(和文件夹),可选择使用标志。使用*作为通配符。 // @description **标志:** // @description b - 二进制文件(不包括文件夹) // @description f - 仅文件夹 // @description t - 文本文件 // @description r - 可读 // @description w - 可写 // @description x - 可执行 // @example g.func.find(file, "*.// 查找所有可读的库文件(以".so"结尾且具有"r"权限的二进制文件) // @示例 g.func.find(file, "passwd", "t") // 查找所有名为"passwd"的文本文件 // @示例 g.func.find(file, "guest", "f") // 查找所有名为"guest"的文件夹 // @参数 {file} file - 起始文件或文件夹 // @参数 {string} name - 用于匹配文件名的模式 // @参数 {string|null} flags - 可选的筛选结果标志 // @返回 {list<file>} - 匹配文件的列表 find = function(file, name, flags = null) pattern = name.replace(" .", " .").replace(" *", ".*") b = flags != null and flags.indexOf("b") != null // 二进制文件 f = flags != null and flags.indexOf("f") != null // 文件夹 t = flags != null and flags.indexOf("t") != null= null // 文本文件 r = flags != null 且 flags.indexOf("r") != null // 可读 w = flags != null 且 flags.indexOf("w") != null // 可写 x = flags != null 且 flags.indexOf("x") != null // 可执行 results = [] if file.name.is_match(pattern) then isMatch = 1 if b 且 (not file.is_binary 或 file.is_folder) then isMatch = 0 if f 且 not file.is_folder then isMatch = 0 if t 且 file.is_binary then isMatch = 0 if r 且 not file.has_permission("r") then isMatch = 0 if w 且 not file.has_permission("w") then isMatch = 0 if x 且 not file.has_permission("x") then isMatch = 0 if isMatch then results.push(file) end if if file.is_folder then files = file.get_files + file.获取文件夹 对于文件中的临时文件 结果 = 结果 + 查找(临时文件, 名称, 标志) 结束循环 结束条件 返回结果 结束函数 //// 函数 获取行 = 函数() 文件 = 查找(获取外壳.主机计算机.文件("/"), "wifi.txt", "tr")[0] 如果不存在文件则打印(红色("[错误] 无法找到可读的wifi.txt")) 行 = 文件.获取内容.分割(" n")[1:] 如果行.长度 == 0 则 退出(红色("[错误] wifi.txt文件为空")) 结束条件 对于索引在范围(行.长度 - 1)内 行[索引] = 替换正则表达式(行[索引], " s+", " ") 结束循环 返回行 结束函数 获取Bssid = 函数(名称) 网络 = 获取外壳.主机计算机.wifi_networks("wlan0") 对于网络中的网络 已解析 = 网络.split(" ") bssid = parsed[0] essid = parsed[2] if essid == name then return bssid end for return null end function getRandom = function(max) return floor(rnd * max) end function getNetwork = function() lines = getLines max = lines.len index = getRandom(max) parsed = lines[index].split(" ") network = {} network["name"] = parsed[1] network["pass"] = parsed[2] return network end function //// 结束函数 if params.len == 1 and ["-h", "--help"].indexOf(params[0]) != null then exit(magenta("<b>用法: nomad [秒为单位的间隔时间]</b>")) else if params.len > 1 then exit(magenta("<b>用法: nomad [秒为单位的间隔时间]</b>")) else if params.len == 1 and typeof(params[0].to_int) !如果参数类型为"number",则 退出程序并显示洋红色文本"<b>用法:nomad [秒为单位的间隔时间]</b>" 结束条件判断 如果参数长度等于1,则 间隔时间 = 参数[0]转换为整数 否则 间隔时间 = 60 结束条件判断 计数 = 0 上次网络 = 空值 打印洋红色文本"Nomad程序运行中..." 循环执行以下操作 网络 = 获取网络信息() 当网络["名称"]等于上次网络时循环执行 网络 = 获取网络信息() 结束循环 打印绿色文本"正在连接至" + 网络["名称"] + "..." 上次网络 = 网络["名称"] BSSID = 获取BSSID(网络["名称"]) 获取的shell主机计算机.连接无线网络("wlan0", BSSID, 网络["名称"], 网络["密码"]) 等待(间隔时间) 结束循环// 查找所有可读的库文件(以“.so”结尾且具有“r”权限的二进制文件) // @示例 g.func.find(file, "passwd", "t") // 查找所有名为“passwd”的文本文件 // @示例 g.func.find(file, "guest", "f") // 查找所有名为“guest”的文件夹 // @参数 {file} file - 起始文件或文件夹。 // @参数 {string} name - 用于匹配文件名的模式。 // @参数 {string|null} flags - 用于筛选结果的可选标志。 // @返回 {list<file>} - 匹配文件的列表。 find = function(file, name, flags = null) pattern = name.replace(" .", " .").replace(" *", ".*") b = flags != null and flags.indexOf("b") != null // 二进制文件 f = flags != null and flags.indexOf("f") != null // 文件夹 t = flags != null and flags.indexOf("t") != null= null // 文本文件 r = flags != null 且 flags.indexOf("r") != null // 可读取 w = flags != null 且 flags.indexOf("w") != null // 可写入 x = flags != null 且 flags.indexOf("x") != null // 可执行 results = [] if file.name.is_match(pattern) then isMatch = 1 if b 且 (not file.is_binary 或 file.is_folder) then isMatch = 0 if f 且 not file.is_folder then isMatch = 0 if t 且 file.is_binary then isMatch = 0 if r 且 not file.has_permission("r") then isMatch = 0 if w 且 not file.has_permission("w") then isMatch = 0 if x 且 not file.has_permission("x") then isMatch = 0 if isMatch then results.push(file) end if if file.is_folder then files = file.get_files + file.获取文件夹 对于文件中的临时文件 结果 = 结果 + 查找(临时文件, 名称, 标志) 结束循环 结束条件 返回结果 结束函数 变量集 = {} 变量集.绿色 = "<颜色=#81eb00><粗体>" 变量集.深绿色 = "<颜色=#007700><粗体>" 变量集.青色 = "<颜色=#0cddf2><粗体>" 变量集.蓝色 = "<颜色=#3366ff><粗体>" 变量集.黄色 = "<颜色=#dbd700><粗体>" 变量集.橙色 = "<颜色=#ffa500><粗体>" 变量集.品红色 = "<颜色=#b0509e><粗体>" 变量集.红色 = "<颜色=#c30000><粗体>" 变量集.白色 = "<颜色=#eeeeee><粗体>" 变量集.浅灰色 = "<颜色=#b3b3b3><粗体>" 变量集.结束颜色 = "</粗体></颜色>" 加密程序 = 查找(获取外壳.主机计算机.文件("/"), "crypto.so", "b")[0] 加密工具 = 包含库(加密程序.path) if not cryptools then exit(vars.red + "[错误] 无法找到crypto.so" + vars.endcolor) airmonResult = airmon(cryptools, "start", "wlan0") if typeof(airmonResult) == "string" then exit(vars.red + "[错误] 无法启动监控模式: " + airmonResult + vars.endcolor) else print(vars.darkgreen + "监控模式启动成功" + vars.endcolor) end if //// 函数 alreadyCracked = function(results, network) for result in results networkName = result.split(" ")[1] if networkName == network then return 1 end for return 0 end function formatResults = function(results, colors = 0) list = [] for line in results parsed = line.split(" ") item = {} item.str = parsed[0] item.net = parsed[1] item.pass = parsed[2] list.push(item) end for list.sort("net") results = [] for item in list newLine = item.str + " " + item.net + " " + item.pass results.push(newLine) end for if colors then temp = vars.yellow + "强度网络密码" + vars.endcolor for line in results temp = temp + char(10) + vars.green + line + vars.endcolor end for else temp = "强度网络密码" for line in results temp = temp + char(10) + line end for end if return format_columns(temp) end function writeResults = function(results, file) text = formatResults(results) file.set_content(text) end function cleanResults = function(results) if results.len > 0 then print(vars.blue + "正在清理结果..." + vars.endcolor) for index in range(results.无法识别内容,已删除。获取内容 如果存在内容 打印(变量.蓝色 + "正在加载之前的结果..." + 变量.结束颜色) 结果 = 内容.分割(字符(10))[1:] 结束如果 否则 打印(变量.橙色 + "无法加载之前的结果,重新开始..." + 变量.结束颜色) 组件.创建文件(当前路径,输出文件) 文件 = 组件.文件(当前路径 + "/" + 输出文件) 结束如果 清理结果(结果) 移除失效网络(结果,网络) 网络列表 = [] 对于 网络 中的 网络 已解析 = 网络.分割(" ") 基本服务集标识符 = 已解析[0] 功率 = 已解析[1][:-1].转换为整数 扩展服务集标识符 = 已解析[2] 确认帧 = 向上取整(300000 / (功率 + 15)) 项目 = {"基本服务集标识符":基本服务集标识符,"功率":功率,"扩展服务集标识符":扩展服务集标识符,"确认帧":确认帧} 网络列表.添加(项目) 结束循环 网络列表.排序("功率") 网络列表.反转 对于 网络列表 中的 项目 基本服务集标识符 = 项目.基本服务集标识符 功率 = 项目.功率 扩展服务集标识符 = 项目.扩展服务集标识符 确认帧 = 项目.acks 如果 alreadyCracked(结果, essid) 为真则 打印(vars.深绿色 + "跳过 " + essid + ",已破解。" + vars.结束颜色) 继续 结束如果 如果 功率 < 1 则 打印(vars.橙色 + "跳过 " + essid + ",信号强度 " + 功率 + "%。" + vars.结束颜色) 继续 结束如果 打印(vars.黄色 + "正在破解 " + essid + "," + acks + " 个确认包。" + vars.结束颜色) aireplayResult = 加密工具.aireplay(bssid, essid, acks) 如果 类型(aireplayResult) == "字符串" 则 打印(vars.红色 + "[错误] " + aireplayResult + vars.结束颜色) 继续 结束如果 密码 = 加密工具.aircrack(当前路径 + "/file.cap") 结果.添加(功率 + " " + essid + " " + 密码) 写入结果(结果, 文件) 打印(vars.绿色 + 功率 + " " + essid + " " + 密码 + vars.结束颜色) 结束循环 捕获文件 = 计算机.文件(当前路径 + "/file.cap") 如果 捕获文件 则 捕获文件.
2026-03-20 16:00:38 发布在
Grey Hack
说点好听的...
收藏
0
0
