
Key RequiredUniversal

--[[
WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!
]]
-- ============================================
-- CONFIGURATION - Edit these values only
-- ============================================
local CONFIG = {
SERVICE_NAME = "YOUR_SERVICE_NAME", -- Your Junkie service name
IDENTIFIER = "YOUR_IDENTIFIER", -- Your Junkie identifier
PROVIDER_NAME = "YOUR_PROVIDER_NAME", -- Your Junkie provider name
KEY_FILENAME = "YOUR_KEY_FILENAME.txt",-- Filename to save the key locally
GUI_NAME = "YOUR_GUI_NAME", -- ScreenGui name (hidden from user)
UI_TITLE = "YOUR_TITLE_HERE", -- Title shown on the key UI
DISCORD_INVITE = "YOUR_DISCORD_INVITE", -- Your Discord invite link
}
-- ============================================
local Junkie = loadstring(game:HttpGet("https://jnkie.com/sdk/library.lua"))()
Junkie.service = CONFIG.SERVICE_NAME
Junkie.identifier = CONFIG.IDENTIFIER
Junkie.provider = CONFIG.PROVIDER_NAME
local result = (function()
getgenv().UI_CLOSED = false
getgenv().SCRIPT_KEY = nil
local function SaveKey(key)
pcall(function() writefile(CONFIG.KEY_FILENAME, key) end)
end
local function LoadKey()
if pcall(function() return isfile(CONFIG.KEY_FILENAME) and isfile end) and isfile(CONFIG.KEY_FILENAME) then
local success, key = pcall(function() return readfile(CONFIG.KEY_FILENAME) end)
if success then return key:gsub("%s+", "") end
end
return nil
end
local function DeleteKey()
pcall(function() if isfile(CONFIG.KEY_FILENAME) then delfile(CONFIG.KEY_FILENAME) end end)
end
local function IsExpiredResponse(res)
if not res then return false end
local statusText = tostring(res.error or res.message or res.reason or res.status or ""):lower()
if statusText:find("expired", 1, true) or statusText == "key_expired" then
return true
end
local expiresAt = tonumber(res.expires_at or res.expiresAt or res.expires or res.expiry or res.expiry_at)
if expiresAt and expiresAt > 0 and expiresAt <= os.time() then
return true
end
local globalExpiresAt = tonumber(getgenv().JD_EXPIRES_AT)
if globalExpiresAt and globalExpiresAt > 0 and globalExpiresAt <= os.time() then
return true
end
return false
end
local function GetValidationMessage(res)
if IsExpiredResponse(res) then return "Expired Key" end
local raw = tostring((res and (res.error or res.message or res.reason or res.status)) or "")
local lowered = raw:lower()
if lowered:find("hwid", 1, true) then
return "HWID Mismatch"
elseif lowered:find("service", 1, true) then
return "Wrong Service"
end
return "Invalid Key"
end
local function CheckKeyStrict(key)
getgenv().JD_EXPIRES_AT = nil
local ok, res = pcall(function()
return Junkie.check_key(key)
end)
if not ok then return false, nil, "Check Failed" end
if not res or not res.valid or IsExpiredResponse(res) then
return false, res, GetValidationMessage(res)
end
return true, res, "Valid"
end
local SavedKey = LoadKey()
if SavedKey then
local valid = CheckKeyStrict(SavedKey)
if valid then
getgenv().SCRIPT_KEY = SavedKey
getgenv().UI_CLOSED = true
return getgenv().SCRIPT_KEY
else
DeleteKey()
end
end
-- FIX 1: Robust parent resolution for mobile executors
-- Many mobile executors silently fail when parenting to CoreGui.
-- We probe with a dummy folder first; fall back to PlayerGui if needed.
local function GetScreenParent()
local ok, cg = pcall(function() return game:GetService("CoreGui") end)
if ok and cg then
local probe = Instance.new("Folder")
local canUse = pcall(function() probe.Parent = cg end)
probe:Destroy()
if canUse then return cg end
end
local Players = game:GetService("Players")
return Players.LocalPlayer:WaitForChild("PlayerGui", 10)
end
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = CONFIG.GUI_NAME
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.IgnoreGuiInset = true
ScreenGui.ResetOnSpawn = false
-- FIX 2: High DisplayOrder so the key UI renders above thumbsticks / chat on mobile
ScreenGui.DisplayOrder = 999
ScreenGui.Parent = GetScreenParent()
local Frame = Instance.new("Frame")
Frame.Size = UDim2.new(0, 320, 0, 260)
Frame.AnchorPoint = Vector2.new(0.5, 0.5)
Frame.Position = UDim2.new(0.5, 0, 0.5, 0)
Frame.BackgroundColor3 = Color3.fromRGB(22, 27, 34)
Frame.BorderSizePixel = 0
Frame.Parent = ScreenGui
Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 8)
-- Auto-scale UI based on screen resolution (handles mobile aspect ratios)
local Camera = workspace.CurrentCamera
local UI_BASE_W, UI_BASE_H = 1920, 1080
local UI_SCALE_BOOST = 1.15
local uiScaleObj = Instance.new("UIScale")
uiScaleObj.Parent = Frame
local isCustomPosition = false
local function updateUIScale()
local vp = Camera.ViewportSize
local rawScale = math.min(vp.X / UI_BASE_W, vp.Y / UI_BASE_H) * UI_SCALE_BOOST
local ar = vp.X / vp.Y
local target
if ar < 1.0 then
target = math.clamp(rawScale, 0.5, 0.8)
elseif ar < 1.6 then
target = math.clamp(rawScale, 0.65, 1.0)
else
target = math.clamp(rawScale, 0.8, 1.3)
end
target = math.floor(target * 10 + 0.5) / 10
uiScaleObj.Scale = target
if not isCustomPosition then
Frame.Position = UDim2.new(0.5, 0, 0.5, 0)
end
end
updateUIScale()
if Camera then Camera:GetPropertyChangedSignal("ViewportSize"):Connect(updateUIScale) end
local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1, 0, 0, 40)
Title.BackgroundTransparency = 1
Title.Text = CONFIG.UI_TITLE
Title.TextColor3 = Color3.fromRGB(230, 237, 243)
Title.Font = Enum.Font.GothamBold
Title.TextSize = 16
Title.Parent = Frame
local TextBox = Instance.new("TextBox")
TextBox.Size = UDim2.new(0.9, 0, 0, 35)
TextBox.Position = UDim2.new(0.05, 0, 0.25, 0)
TextBox.BackgroundColor3 = Color3.fromRGB(13, 17, 23)
TextBox.TextColor3 = Color3.fromRGB(255, 255, 255)
TextBox.PlaceholderText = "Paste your license key here..."
TextBox.Text = ""
TextBox.Font = Enum.Font.Gotham
TextBox.TextSize = 13
TextBox.ClearTextOnFocus = false
TextBox.Parent = Frame
Instance.new("UICorner", TextBox).CornerRadius = UDim.new(0, 5)
local GetLinkBtn = Instance.new("TextButton")
GetLinkBtn.Size = UDim2.new(0.42, 0, 0, 35)
GetLinkBtn.Position = UDim2.new(0.05, 0, 0.48, 0)
GetLinkBtn.BackgroundColor3 = Color3.fromRGB(48, 54, 61)
GetLinkBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
GetLinkBtn.Text = "Copy Activation Link"
GetLinkBtn.Font = Enum.Font.GothamSemibold
GetLinkBtn.TextSize = 13
GetLinkBtn.Parent = Frame
Instance.new("UICorner", GetLinkBtn).CornerRadius = UDim.new(0, 5)
local VerifyBtn = Instance.new("TextButton")
VerifyBtn.Size = UDim2.new(0.42, 0, 0, 35)
VerifyBtn.Position = UDim2.new(0.53, 0, 0.48, 0)
VerifyBtn.BackgroundColor3 = Color3.fromRGB(47, 183, 117)
VerifyBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
VerifyBtn.Text = "Verify Key"
VerifyBtn.Font = Enum.Font.GothamSemibold
VerifyBtn.TextSize = 13
VerifyBtn.Parent = Frame
Instance.new("UICorner", VerifyBtn).CornerRadius = UDim.new(0, 5)
local DiscordBtn = Instance.new("TextButton")
DiscordBtn.Size = UDim2.new(0.9, 0, 0, 35)
DiscordBtn.Position = UDim2.new(0.05, 0, 0.78, 0)
DiscordBtn.BackgroundColor3 = Color3.fromRGB(114, 137, 218)
DiscordBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
DiscordBtn.Text = "Join Discord"
DiscordBtn.Font = Enum.Font.GothamSemibold
DiscordBtn.TextSize = 13
DiscordBtn.Parent = Frame
Instance.new("UICorner", DiscordBtn).CornerRadius = UDim.new(0, 5)
-- Guide text for activation link
local GuideLabel = Instance.new("TextLabel")
GuideLabel.Size = UDim2.new(0.9, 0, 0, 35)
GuideLabel.Position = UDim2.new(0.05, 0, 0.62, 0)
GuideLabel.BackgroundTransparency = 1
GuideLabel.Text = "Click 'Copy Activation Link', then paste in your browser to get your key."
GuideLabel.TextColor3 = Color3.fromRGB(139, 148, 158)
GuideLabel.Font = Enum.Font.GothamSemibold
GuideLabel.TextSize = 14
GuideLabel.TextWrapped = true
GuideLabel.Parent = Frame
-- Dragging support (works for both mouse and touch)
local dragging, dragInput, dragStart, startPos
Frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
isCustomPosition = true
dragStart = input.Position
startPos = Frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
Frame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - dragStart
local s = uiScaleObj.Scale
Frame.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X / s,
startPos.Y.Scale, startPos.Y.Offset + delta.Y / s
)
end
end)
-- FIX 3: Yield one render frame so Roblox actually draws the GUI on mobile
-- before the spin-wait loop captures the thread.
task.wait()
GetLinkBtn.MouseButton1Click:Connect(function()
local link = Junkie.get_key_link()
if link and setclipboard then
setclipboard(link)
GetLinkBtn.Text = "Link Copied!"
task.delay(2, function() GetLinkBtn.Text = "Copy Activation Link" end)
end
end)
DiscordBtn.MouseButton1Click:Connect(function()
if setclipboard then
setclipboard(CONFIG.DISCORD_INVITE)
DiscordBtn.Text = "Link Copied!"
task.delay(2, function() DiscordBtn.Text = "Join Discord" end)
end
end)
VerifyBtn.MouseButton1Click:Connect(function()
local key = TextBox.Text:gsub("%s+", "")
if key == "" then return end
VerifyBtn.Text = "Verifying..."
VerifyBtn.BackgroundColor3 = Color3.fromRGB(58, 136, 225)
local valid, _, message = CheckKeyStrict(key)
if valid then
VerifyBtn.BackgroundColor3 = Color3.fromRGB(37, 153, 97)
VerifyBtn.Text = "Success!"
SaveKey(key)
getgenv().SCRIPT_KEY = key
task.wait(0.5)
ScreenGui:Destroy()
getgenv().UI_CLOSED = true
else
getgenv().SCRIPT_KEY = nil
if message == "Expired Key" then DeleteKey() end
VerifyBtn.BackgroundColor3 = Color3.fromRGB(248, 81, 73)
VerifyBtn.Text = message or "Invalid Key"
task.delay(2, function()
VerifyBtn.Text = "Verify Key"
VerifyBtn.BackgroundColor3 = Color3.fromRGB(47, 183, 117)
end)
end
end)
while not getgenv().UI_CLOSED do
task.wait(0.1)
end
return getgenv().SCRIPT_KEY
end)()



Plsss added expired check, key
@low_cortisol done gay