-- Zephyr Hub -- A clean, spacious, black-themed scanner hub with Exploit and Read Me tabs -- Features: Backdoor Scanner, Tool Scanner, Model Scanner (prints results to console) local Players = game:GetService("Players") local CoreGui = game:GetService("CoreGui") local TweenService = game:GetService("TweenService") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer -- Create ScreenGui local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "ZephyrHub" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = CoreGui -- Main Frame (Wide & Spacious) local MainFrame = Instance.new("Frame") MainFrame.Size = UDim2.new(0, 900, 0, 580) MainFrame.Position = UDim2.new(0.5, -450, 0.5, -290) MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20) MainFrame.BorderSizePixel = 0 MainFrame.ClipsDescendants = true MainFrame.Parent = ScreenGui -- Corner Rounding local Corner = Instance.new("UICorner") Corner.CornerRadius = UDim.new(0, 12) Corner.Parent = MainFrame -- Title Bar local TitleBar = Instance.new("Frame") TitleBar.Size = UDim2.new(1, 0, 0, 50) TitleBar.BackgroundColor3 = Color3.fromRGB(15, 15, 15) TitleBar.BorderSizePixel = 0 TitleBar.Parent = MainFrame local TitleCorner = Instance.new("UICorner") TitleCorner.CornerRadius = UDim.new(0, 12) TitleCorner.Parent = TitleBar local TitleLabel = Instance.new("TextLabel") TitleLabel.Size = UDim2.new(0, 300, 1, 0) TitleLabel.Position = UDim2.new(0, 20, 0, 0) TitleLabel.BackgroundTransparency = 1 TitleLabel.Text = "Zephyr Hub" TitleLabel.TextColor3 = Color3.fromRGB(0, 170, 255) TitleLabel.Font = Enum.Font.GothamBold TitleLabel.TextSize = 22 TitleLabel.TextXAlignment = Enum.TextXAlignment.Left TitleLabel.Parent = TitleBar -- Close Button local CloseButton = Instance.new("TextButton") CloseButton.Size = UDim2.new(0, 40, 0, 40) CloseButton.Position = UDim2.new(1, -50, 0, 5) CloseButton.BackgroundTransparency = 1 CloseButton.Text = "✕" CloseButton.TextColor3 = Color3.fromRGB(255, 80, 80) CloseButton.Font = Enum.Font.GothamBold CloseButton.TextSize = 20 CloseButton.Parent = TitleBar CloseButton.MouseButton1Click:Connect(function() ScreenGui:Destroy() end) -- Tab Container (Left Side) local TabContainer = Instance.new("Frame") TabContainer.Size = UDim2.new(0, 180, 1, -50) TabContainer.Position = UDim2.new(0, 0, 0, 50) TabContainer.BackgroundColor3 = Color3.fromRGB(25, 25, 25) TabContainer.BorderSizePixel = 0 TabContainer.Parent = MainFrame -- Content Area local ContentArea = Instance.new("Frame") ContentArea.Size = UDim2.new(1, -180, 1, -50) ContentArea.Position = UDim2.new(0, 180, 0, 50) ContentArea.BackgroundTransparency = 1 ContentArea.Parent = MainFrame -- Tab Buttons local Tabs = {} local function createTab(name) local TabButton = Instance.new("TextButton") TabButton.Size = UDim2.new(1, -20, 0, 50) TabButton.Position = UDim2.new(0, 10, 0, #Tabs * 60 + 20) TabButton.BackgroundColor3 = Color3.fromRGB(30, 30, 30) TabButton.BorderSizePixel = 0 TabButton.Text = name TabButton.TextColor3 = Color3.fromRGB(200, 200, 200) TabButton.Font = Enum.Font.Gotham TabButton.TextSize = 18 TabButton.Parent = TabContainer local TabCorner = Instance.new("UICorner") TabCorner.CornerRadius = UDim.new(0, 8) TabCorner.Parent = TabButton local TabPage = Instance.new("Frame") TabPage.Size = UDim2.new(1, 0, 1, 0) TabPage.BackgroundTransparency = 1 TabPage.Visible = false TabPage.Parent = ContentArea table.insert(Tabs, {Button = TabButton, Page = TabPage}) TabButton.MouseButton1Click:Connect(function() for _, tab in ipairs(Tabs) do tab.Page.Visible = false tab.Button.BackgroundColor3 = Color3.fromRGB(30, 30, 30) tab.Button.TextColor3 = Color3.fromRGB(200, 200, 200) end TabPage.Visible = true TabButton.BackgroundColor3 = Color3.fromRGB(0, 140, 255) TabButton.TextColor3 = Color3.fromRGB(255, 255, 255) end) return TabPage end -- Create Tabs local ExploitTab = createTab("Exploit") local ReadMeTab = createTab("Read Me") -- Default open tab Tabs[1].Button.BackgroundColor3 = Color3.fromRGB(0, 140, 255) Tabs[1].Button.TextColor3 = Color3.fromRGB(255, 255, 255) Tabs[1].Page.Visible = true -- === EXPLOIT TAB CONTENT === local ExploitLayout = Instance.new("UIListLayout") ExploitLayout.Padding = UDim.new(0, 25) ExploitLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center ExploitLayout.VerticalAlignment = Enum.VerticalAlignment.Top ExploitLayout.SortOrder = Enum.SortOrder.LayoutOrder ExploitLayout.Parent = ExploitTab local ExploitPadding = Instance.new("UIPadding") ExploitPadding.PaddingTop = UDim.new(0, 40) ExploitPadding.Parent = ExploitTab -- Scanner Button Template local function createScannerButton(text, callback) local Button = Instance.new("TextButton") Button.Size = UDim2.new(0, 500, 0, 70) Button.BackgroundColor3 = Color3.fromRGB(35, 35, 35) Button.BorderSizePixel = 0 Button.Text = text Button.TextColor3 = Color3.fromRGB(220, 220, 220) Button.Font = Enum.Font.GothamSemibold Button.TextSize = 20 Button.Parent = ExploitTab local BtnCorner = Instance.new("UICorner") BtnCorner.CornerRadius = UDim.new(0, 12) BtnCorner.Parent = Button local BtnStroke = Instance.new("UIStroke") BtnStroke.Color = Color3.fromRGB(60, 60, 60) BtnStroke.Thickness = 1 BtnStroke.Parent = Button Button.MouseButton1Click:Connect(callback) -- Hover Effect Button.MouseEnter:Connect(function() TweenService:Create(Button, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(50, 50, 50)}):Play() end) Button.MouseLeave:Connect(function() TweenService:Create(Button, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(35, 35, 35)}):Play() end) return Button end -- Backdoor Scanner createScannerButton("Scan for Script Backdoors", function() print("=== ZEPHYR HUB: BACKDOOR SCAN STARTED ===") local found = 0 for _, obj in ipairs(game:GetDescendants()) do if obj:IsA("LocalScript") or obj:IsA("Script") then local source = obj.Source or "" if string.find(string.lower(source), "require") and string.find(source, "%d%d%d%d%d%d%d%d+") then local assetId = string.match(source, "require%(%s*(%d+)") if assetId and tonumber(assetId) then print("[BACKDOOR] Suspicious Require in:", obj:GetFullName(), "| Asset ID:", assetId) found += 1 end end if string.find(string.lower(source), "http") or string.find(source, "discord") or string.find(source, "webhook") then print("[BACKDOOR] Potential Data Exfil in:", obj:GetFullName()) found += 1 end end end print("=== SCAN COMPLETE: " .. found .. " potential backdoor(s) found ===") end) -- Tool Scanner createScannerButton("Scan for Malicious Tools", function() print("=== ZEPHYR HUB: TOOL SCAN STARTED ===") local found = 0 for _, tool in ipairs(game:GetService("ReplicatedStorage"):GetDescendants()) do if tool:IsA("Tool") then if tool:FindFirstChild("Handle") then local handle = tool.Handle if handle:FindFirstChildWhichIsA("Script") or handle:FindFirstChildWhichIsA("LocalScript") then print("[TOOL] Script inside Handle:", tool:GetFullName()) found += 1 end if handle.Transparency == 1 or handle.Size == Vector3.new(0,0,0) then print("[TOOL] Invisible/Suspicious Handle:", tool:GetFullName()) found += 1 end end end end for _, player in ipairs(Players:GetPlayers()) do if player.Character then for _, tool in ipairs(player.Character:GetChildren()) do if tool:IsA("Tool") and tool:FindFirstChildWhichIsA("Script") then print("[TOOL] Active tool with script:", tool:GetFullName(), "| Owner:", player.Name) found += 1 end end end end print("=== SCAN COMPLETE: " .. found .. " suspicious tool(s) found ===") end) -- Model Scanner createScannerButton("Scan for Suspicious Models", function() print("=== ZEPHYR HUB: MODEL SCAN STARTED ===") local found = 0 for _, model in ipairs(workspace:GetDescendants()) do if model:IsA("Model") and not Players:GetPlayerFromCharacter(model) then if model.PrimaryPart and model.PrimaryPart.Transparency == 1 then print("[MODEL] Invisible PrimaryPart Model:", model:GetFullName()) found += 1 end if #model:GetDescendants() > 50 and model:FindFirstChildWhichIsA("Script") then print("[MODEL] High part count + Script:", model:GetFullName(), "| Parts:", #model:GetDescendants()) found += 1 end if model.Name:match("%d%d%d+") or string.find(model.Name, "Free") or string.find(model.Name, "Admin") then print("[MODEL] Suspicious Name:", model:GetFullName()) found += 1 end end end print("=== SCAN COMPLETE: " .. found .. " suspicious model(s) found ===") end) -- === READ ME TAB CONTENT === local ReadMeText = Instance.new("TextLabel") ReadMeText.Size = UDim2.new(1, -60, 1, -40) ReadMeText.Position = UDim2.new(0, 30, 0, 20) ReadMeText.BackgroundTransparency = 1 ReadMeText.TextColor3 = Color3.fromRGB(200, 200, 200) ReadMeText.Font = Enum.Font.Gotham ReadMeText.TextSize = 18 ReadMeText.TextWrapped = true ReadMeText.TextXAlignment = Enum.TextXAlignment.Left ReadMeText.TextYAlignment = Enum.TextYAlignment.Top ReadMeText.Text = [[ ZEPHYR HUB - SCANNER GUIDE Welcome to Zephyr Hub — a lightweight, powerful scanner designed for exploit safety and game analysis. HOW TO USE: 1. Open the 'Exploit' tab on the left. 2. Click any scanner button to run a scan. 3. Results will appear in the F9 Developer Console. SCANNERS: • Script Backdoor Scanner — Detects require() with asset IDs, webhooks, HTTP requests. • Tool Scanner — Finds tools with scripts in Handle, invisible parts, or active in players. • Model Scanner — Flags invisible models, high part count with scripts, or suspicious names. IMPORTANT: If you use a specific tool, the results of the scan will be in the console. TIPS: • Use F9 to open the console. • Always scan after joining a new game. • Report suspicious scripts to game moderators. Zephyr Hub — Stay safe, scan smart. ]] ReadMeText.Parent = ReadMeTab -- Draggable Functionality local dragging = false local dragInput local dragStart local startPos TitleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) TitleBar.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) RunService.RenderStepped:Connect(function() if dragging and dragInput then local delta = dragInput.Position - dragStart MainFrame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) print("Zephyr Hub loaded successfully. Open with F9 console for scan results.")