Zephyr Hub
Key RequiredUniversal

Zephyr Hub

Universal ScriptAnonistAnonist 8K views 2.6K executesUpdated Nov 5, 2025
0.0/ 5(1 votes)
010% Positive
Lua Script•332 lines (10871 chars)
-- 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.")

Features & Information

This tool hub is only for serious exploiters who want to find backdoored scripts, models and scan for tools (intended for normal use :D)
#Roblox#Hack#Universal#Hub#Scriptblox

Community Comments (1)

bac0nkiddbac0nkiddAug 29, 2026

Holy ai You can't just make a homemade by urself

More Scripts for Universal Scripts