local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local toggleKey = Enum.KeyCode.K
local MAIN_SIZE = UDim2.new(0,600,0,400)
local MIN_SIZE = UDim2.new(0,600,0,40)
local UI_OPEN = false
local UI_MINIMIZED = false
local scanningInProgress = false
local scanningCanceled = false
local findingsCount = 0
local suspiciousObjects = {}
local suspiciousKeywords = {
-- Injection & Code Execution
"require","loadstring","load","getfenv","setfenv","spawn","delay","pcall","xpcall",
-- Function Hooking & Bypassing
"hookfunction","hookmetamethod","getrawmetatable","setrawmetatable","getnamecallmethod",
"setnamecallmethod","checkcaller","getconnections","getconnection","getconnectionfunc",
"newcclosure","islclosure","setfflag","setidentity","clonefunction",
-- Debugging & Introspection
"debug.getinfo","debug.getupvalue","debug.setupvalue","debug.getregistry","getgc",
"getconstants","getconstant","getgenv","getrenv","getsenv","getmetatable","setmetatable",
"debug.traceback","getproto","getprotos",
-- Event & Input Simulation
"fireclickdetector","firetouchinterest","firesignal","MouseButton1Click","MouseButton1Down",
"MouseButton1Up","MouseButton2Click","keypress","keyrelease","keytap","mousemoverel","mousescroll",
-- Externes I/O (Datei & Netzwerk)
"writefile","appendfile","delfile","readfile","loadfile","isfile","isfolder","makefolder",
"setclipboard","getclipboard","HttpGet","HttpPost","syn.request","http_request","request",
"queue_on_teleport","rconsoleprint","rconsoleinfo",
-- Anticheat & Detection
"kick","ban","antiCheat","ExploitDetected","WalkSpeed","JumpPower","HumanoidRootPart",
"Health","RemoteEvent","RemoteFunction","BindableEvent","BindableFunction",
-- Obfuscation & Code Hiding
"string.char","string.byte","string.reverse","string.gsub","bit32.bxor","base64","decode","encode",
-- Exploit-Tools & Executor-Indikatoren
"syn","KRNL_LOADED","isexecutorclosure","SENTINEL_LOADED","secure_load","PROTOSMASHER_LOADED",
"pebc_execute","is_sirhurt_closure","WrapGlobal","isvm","shadow_env","CalamariLuaEnv",
-- Allgemeine Exploit-/Hacking-Begriffe
"cheat","hack","exploit","injection","bypass","noclip","infjump","speedhack","setreadonly",
"getrawmetatable","hookmetamethod","debug","anticheat","detector","obfuscate","obfuscated",
"malware","virus","stealer","inject","override","hook","godmode","log","monitor","suspicious",
"leak","injector","reverse","reverseengineering","backdoor","trojan","keylogger","spy","spyware",
"rootkit","dump","dumping","spoof","spoofing","packet","intercept","sniff","sniffer","ddos",
"denial","crash","vulnerability","exploitative","unauthorized","illegal","pirate","cheater",
"aimbot","wallhack","triggerbot","hacktool","hackclient","modmenu","modded","cheats","autoclicker",
"bot","scripter","scripting","reinject","substitute","moddedclient","glitch","bug","exploiter",
"malicious","hacked","systemoverride","dataleak","credential","phish","spoofed","forged","tamper",
"tampering","bypasssecurity","securityhole","unauthaccess","privilege","elevate","elevation",
"insecure","vuln"
}
local function safeDecompile(obj)
if typeof(decompile) == "function" then
local ok,res = pcall(decompile,obj)
if ok then
return res
else
return "Error:\n" .. tostring(res)
end
end
return "No decompile() available in this environment."
end
local function getSuspicionLevel(code)
if not code then
return "Unsuspicious",0
end
local lower = code:lower()
local hits = 0
for _,kw in ipairs(suspiciousKeywords) do
if lower:find(kw) then
hits = hits + 1
end
end
if hits==0 then
return "Unsuspicious",0
elseif hits==1 then
return "Might be Anticheat",1
else
return "Could be Anticheat",hits
end
end
local function checkRequireCalls(code)
local found={}
for match in code:gmatch("[Rr]equire%s*%((.-)%)") do
table.insert(found,match)
end
if #found>0 then
return "\n\nRequire calls found:\n".. table.concat(found,"\n")
end
return ""
end
local function tryGetUpvalues(f)
local ret={}
if debug and debug.getupvalues then
local ok, vals = pcall(debug.getupvalues, f)
if ok and vals then
for i,v in pairs(vals) do
table.insert(ret, "Upvalue #"..i.." = ".. tostring(v))
end
end
end
return ret
end
local function processInBatches(list, callback, batchSize, progressCb)
batchSize = batchSize or 100
local counter=0
for i,v in ipairs(list) do
if scanningCanceled then
return
end
callback(v,i,#list)
counter=counter+1
if counter>=batchSize then
counter=0
RunService.Heartbeat:Wait()
end
if progressCb then
progressCb(i,#list)
end
end
end
local function remoteExtraInfo(o)
local s = "Path: "..o:GetFullName().."\nType: "..o.ClassName
s = s.."\n\nRemotes can be triggered by scripts or clients.\nCheck .OnServerEvent or .OnServerInvoke.\nBlock usage if suspicious."
return s
end
local function exploitInfo()
return "Cheaters can override metamethods or debug functions.\nAdd server checks or randomization to deter hooking."
end
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "FinalACFinder"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local Container = Instance.new("Frame")
Container.Name = "Container"
Container.Parent = ScreenGui
Container.Size = UDim2.new(1, 0, 1, 0)
Container.BackgroundTransparency = 1
Container.ClipsDescendants = false
local function showCustomNotification(title,message,duration)
duration = duration or 3
local noti = Instance.new("Frame")
noti.BackgroundColor3 = Color3.fromRGB(30,30,30)
noti.BorderSizePixel = 0
noti.Size = UDim2.new(0,0,0,50)
noti.ClipsDescendants = true
noti.Parent = ScreenGui
local c = Instance.new("UICorner",noti)
c.CornerRadius = UDim.new(0,8)
local s = Instance.new("UIStroke",noti)
s.Thickness = 1
s.Color = Color3.fromRGB(80,80,80)
local tLab = Instance.new("TextLabel")
tLab.Parent = noti
tLab.BackgroundTransparency = 1
tLab.Size = UDim2.new(1,-10,0,20)
tLab.Position = UDim2.new(0,5,0,5)
tLab.Font = Enum.Font.SourceSansBold
tLab.TextSize = 14
tLab.TextColor3 = Color3.fromRGB(255,255,255)
tLab.TextXAlignment = Enum.TextXAlignment.Left
tLab.Text = title
local mLab = Instance.new("TextLabel")
mLab.Parent = noti
mLab.BackgroundTransparency = 1
mLab.Size = UDim2.new(1,-10,0,20)
mLab.Position = UDim2.new(0,5,0,25)
mLab.Font = Enum.Font.SourceSans
mLab.TextSize = 14
mLab.TextColor3 = Color3.fromRGB(220,220,220)
mLab.TextXAlignment = Enum.TextXAlignment.Left
mLab.Text = message
noti:TweenSize(UDim2.new(0,300,0,50),Enum.EasingDirection.Out,Enum.EasingStyle.Quad,0.15,true)
task.delay(duration,function()
noti:TweenSize(UDim2.new(0,0,0,50),Enum.EasingDirection.In,Enum.EasingStyle.Quad,0.15,true,function()
noti:Destroy()
end)
end)
end
local function makeFrameDraggable(frame)
local dragging = false
local dragInput, mousePos, framePos
frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
-- Falls Minimiert, Drag unterbinden (optional)
if UI_MINIMIZED then return end
dragging = true
mousePos = input.Position
framePos = 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 then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if dragging and input == dragInput then
local delta = input.Position - mousePos
frame.Position = UDim2.new(
framePos.X.Scale,
framePos.X.Offset + delta.X,
framePos.Y.Scale,
framePos.Y.Offset + delta.Y
)
end
end)
end
local MAIN_FRAME = Instance.new("Frame")
MAIN_FRAME.Name = "MainFrame"
MAIN_FRAME.Parent = Container
MAIN_FRAME.BackgroundColor3 = Color3.fromRGB(20,20,20)
MAIN_FRAME.BorderSizePixel = 0
MAIN_FRAME.Size = UDim2.new(0,0,0,0)
MAIN_FRAME.ClipsDescendants = false
MAIN_FRAME.Visible = false
local mainCorner = Instance.new("UICorner",MAIN_FRAME)
mainCorner.CornerRadius = UDim.new(0,15)
local mainStroke = Instance.new("UIStroke",MAIN_FRAME)
mainStroke.Color = Color3.fromRGB(76,76,76)
mainStroke.Thickness = 1
local TitleLabel = Instance.new("TextLabel")
TitleLabel.Name = "Title"
TitleLabel.Parent = MAIN_FRAME
TitleLabel.BackgroundTransparency = 1
TitleLabel.Position = UDim2.new(0.02,0,0.03,0)
TitleLabel.Size = UDim2.new(0,300,0,20)
TitleLabel.Font = Enum.Font.SourceSansBold
TitleLabel.Text = "Anticheat Finder | by cyberseall"
TitleLabel.TextColor3 = Color3.fromRGB(255,255,255)
TitleLabel.TextSize = 16
TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
local Shadow = Instance.new("Frame")
Shadow.Name = "Shadow"
Shadow.Parent = MAIN_FRAME
Shadow.AnchorPoint = Vector2.new(0.5,0.5)
Shadow.Position = UDim2.new(0.5,0,0.5,0)
Shadow.Size = UDim2.new(1,35,1,35)
Shadow.BackgroundTransparency = 1
local ShadowImage = Instance.new("ImageLabel")
ShadowImage.Name = "ShadowImage"
ShadowImage.Parent = Shadow
ShadowImage.AnchorPoint = Vector2.new(0.5,0.5)
ShadowImage.Position = UDim2.new(0.5,0,0.5,0)
ShadowImage.Size = UDim2.new(1.74,0,1.4,0)
ShadowImage.Image = "rbxassetid://5587865193"
ShadowImage.ImageColor3 = Color3.fromRGB(20,20,20)
ShadowImage.ImageTransparency = 0.48
ShadowImage.BackgroundTransparency = 1
-- Schließen:
local function hideMainGUI()
if not UI_OPEN then return end
UI_OPEN = false
local tween = TweenService:Create(MAIN_FRAME,
TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In),
{ Size = UDim2.new(0,0,0,0) }
)
tween:Play()
tween.Completed:Connect(function()
MAIN_FRAME.Visible = false
end)
showCustomNotification("UI closed","Press K to reopen",3)
end
local CloseBtn = Instance.new("TextButton")
CloseBtn.Name = "CloseBtn"
CloseBtn.Parent = MAIN_FRAME
CloseBtn.AnchorPoint = Vector2.new(1,0)
CloseBtn.Position = UDim2.new(1,-5,0,5)
CloseBtn.Size = UDim2.new(0,25,0,25)
CloseBtn.Text = "X"
CloseBtn.Font = Enum.Font.SourceSansBold
CloseBtn.TextSize = 14
CloseBtn.BackgroundColor3 = Color3.fromRGB(200,50,50)
CloseBtn.TextColor3 = Color3.fromRGB(255,255,255)
local cco = Instance.new("UICorner",CloseBtn)
cco.CornerRadius = UDim.new(0,5)
CloseBtn.MouseButton1Click:Connect(function()
hideMainGUI()
end)
local MinBtn = Instance.new("TextButton")
MinBtn.Name = "MinimizeBtn"
MinBtn.Parent = MAIN_FRAME
MinBtn.AnchorPoint = Vector2.new(1,0)
MinBtn.Position = UDim2.new(1,-35,0,5)
MinBtn.Size = UDim2.new(0,25,0,25)
MinBtn.Text = "_"
MinBtn.Font = Enum.Font.SourceSansBold
MinBtn.TextSize = 20
MinBtn.BackgroundColor3 = Color3.fromRGB(27,27,27)
MinBtn.TextColor3 = Color3.fromRGB(255,255,255)
local minCorner = Instance.new("UICorner",MinBtn)
minCorner.CornerRadius = UDim.new(0,5)
MinBtn.MouseButton1Click:Connect(function()
if UI_MINIMIZED then
TweenService:Create(MAIN_FRAME,
TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),
{Size = MAIN_SIZE}
):Play()
UI_MINIMIZED = false
else
TweenService:Create(MAIN_FRAME,
TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),
{Size = MIN_SIZE}
):Play()
UI_MINIMIZED = true
end
end)
makeFrameDraggable(MAIN_FRAME)
local ContentFrame = Instance.new("Frame")
ContentFrame.Name = "ContentFrame"
ContentFrame.Parent = MAIN_FRAME
ContentFrame.BackgroundTransparency = 1
ContentFrame.Position = UDim2.new(0,0,0,40)
ContentFrame.Size = UDim2.new(1,0,1,-40)
local Listener = Instance.new("ScrollingFrame")
Listener.Name = "Listener"
Listener.Parent = ContentFrame
Listener.BackgroundTransparency = 1
Listener.Position = UDim2.new(0,10,0,10)
Listener.Size = UDim2.new(1,-20,0,250)
Listener.CanvasSize = UDim2.new(0,0,10,0)
Listener.ScrollBarThickness = 6
local layout = Instance.new("UIListLayout")
layout.Parent = Listener
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Padding = UDim.new(0,5)
local ResultTemplate = Instance.new("Frame")
ResultTemplate.Name = "ResultTemplate"
ResultTemplate.BackgroundTransparency = 1
ResultTemplate.Size = UDim2.new(1,0,0,25)
local PathLabel = Instance.new("TextLabel")
PathLabel.Name = "Path"
PathLabel.Parent = ResultTemplate
PathLabel.BackgroundTransparency = 1
PathLabel.Position = UDim2.new(0,5,0,0)
PathLabel.Size = UDim2.new(1,-140,1,0)
PathLabel.Font = Enum.Font.SourceSans
PathLabel.TextColor3 = Color3.fromRGB(161,161,161)
PathLabel.TextSize = 14
PathLabel.TextXAlignment = Enum.TextXAlignment.Left
PathLabel.TextTruncate = Enum.TextTruncate.AtEnd
PathLabel.RichText = true
local ViewBtn = Instance.new("TextButton")
ViewBtn.Name = "View"
ViewBtn.Parent = ResultTemplate
ViewBtn.BackgroundColor3 = Color3.fromRGB(27,27,27)
ViewBtn.Size = UDim2.new(0,60,0,25)
ViewBtn.AnchorPoint = Vector2.new(1,0)
ViewBtn.Position = UDim2.new(1,-70,0,0)
ViewBtn.Font = Enum.Font.SourceSans
ViewBtn.TextColor3 = Color3.fromRGB(255,255,255)
ViewBtn.TextSize = 14
ViewBtn.Text = "View"
local vbCorner = Instance.new("UICorner",ViewBtn)
vbCorner.CornerRadius = UDim.new(0,5)
local vbStroke = Instance.new("UIStroke",ViewBtn)
vbStroke.Thickness = 1
vbStroke.Color = Color3.fromRGB(36,36,36)
local CopyBtn = Instance.new("TextButton")
CopyBtn.Name = "Copy"
CopyBtn.Parent = ResultTemplate
CopyBtn.BackgroundColor3 = Color3.fromRGB(27,27,27)
CopyBtn.Size = UDim2.new(0,60,0,25)
CopyBtn.AnchorPoint = Vector2.new(1,0)
CopyBtn.Position = UDim2.new(1,-5,0,0)
CopyBtn.Font = Enum.Font.SourceSans
CopyBtn.TextColor3 = Color3.fromRGB(255,255,255)
CopyBtn.TextSize = 14
CopyBtn.Text = "Copy"
local cbCorner = Instance.new("UICorner",CopyBtn)
cbCorner.CornerRadius = UDim.new(0,5)
local cbStroke = Instance.new("UIStroke",CopyBtn)
cbStroke.Thickness = 1
cbStroke.Color = Color3.fromRGB(36,36,36)
local ActionZone = Instance.new("Frame")
ActionZone.Name = "ActionZone"
ActionZone.Parent = ContentFrame
ActionZone.BackgroundTransparency = 1
ActionZone.Position = UDim2.new(0,0,1,-40)
ActionZone.Size = UDim2.new(1,0,0,40)
local Uninject = Instance.new("TextButton")
Uninject.Name = "Uninject"
Uninject.Parent = ActionZone
Uninject.BackgroundColor3 = Color3.fromRGB(27,27,27)
Uninject.Size = UDim2.new(0,120,0,30)
Uninject.Position = UDim2.new(0,10,0,5)
Uninject.Font = Enum.Font.SourceSansBold
Uninject.TextColor3 = Color3.fromRGB(255,255,255)
Uninject.TextSize = 16
Uninject.Text = "Uninject"
local unCorner = Instance.new("UICorner",Uninject)
unCorner.CornerRadius = UDim.new(0,5)
local unStroke = Instance.new("UIStroke",Uninject)
unStroke.Thickness = 1
unStroke.Color = Color3.fromRGB(36,36,36)
local StartBtn = Instance.new("TextButton")
StartBtn.Name = "StartAnalysis"
StartBtn.Parent = ActionZone
StartBtn.BackgroundColor3 = Color3.fromRGB(27,27,27)
StartBtn.Size = UDim2.new(0,120,0,30)
StartBtn.Position = UDim2.new(0,140,0,5)
StartBtn.Font = Enum.Font.SourceSansBold
StartBtn.TextColor3 = Color3.fromRGB(255,255,255)
StartBtn.TextSize = 16
StartBtn.Text = "Start Analysis"
local sCorner = Instance.new("UICorner",StartBtn)
sCorner.CornerRadius = UDim.new(0,5)
local sStroke = Instance.new("UIStroke",StartBtn)
sStroke.Thickness = 1
sStroke.Color = Color3.fromRGB(36,36,36)
local MultiBtn = Instance.new("TextButton")
MultiBtn.Name = "MultiScan"
MultiBtn.Parent = ActionZone
MultiBtn.BackgroundColor3 = Color3.fromRGB(27,27,27)
MultiBtn.Size = UDim2.new(0,120,0,30)
MultiBtn.Position = UDim2.new(0,270,0,5)
MultiBtn.Font = Enum.Font.SourceSansBold
MultiBtn.TextColor3 = Color3.fromRGB(255,255,255)
MultiBtn.TextSize = 16
MultiBtn.Text = "Multi-Scan"
local mCorner = Instance.new("UICorner",MultiBtn)
mCorner.CornerRadius = UDim.new(0,5)
local mStroke = Instance.new("UIStroke",MultiBtn)
mStroke.Thickness = 1
mStroke.Color = Color3.fromRGB(36,36,36)
local StopSuspiciousBtn = Instance.new("TextButton")
StopSuspiciousBtn.Name = "StopSuspicious"
StopSuspiciousBtn.Parent = ActionZone
StopSuspiciousBtn.BackgroundColor3 = Color3.fromRGB(27,27,27)
StopSuspiciousBtn.Size = UDim2.new(0,180,0,30)
StopSuspiciousBtn.Position = UDim2.new(0,400,0,5)
StopSuspiciousBtn.Font = Enum.Font.SourceSansBold
StopSuspiciousBtn.TextColor3 = Color3.fromRGB(255,255,255)
StopSuspiciousBtn.TextSize = 16
StopSuspiciousBtn.Text = "Stop Suspicious"
local ssCorner = Instance.new("UICorner", StopSuspiciousBtn)
ssCorner.CornerRadius = UDim.new(0, 5)
local ssStroke = Instance.new("UIStroke", StopSuspiciousBtn)
ssStroke.Thickness = 1
ssStroke.Color = Color3.fromRGB(36,36,36)
StopSuspiciousBtn.MouseButton1Click:Connect(function()
for _, obj in ipairs(suspiciousObjects) do
if obj and obj.Parent then
showCustomNotification("Stopped", "Stopped: " .. obj:GetFullName(), 2)
obj:Destroy()
end
end
suspiciousObjects = {}
end)
local function openScriptViewer(txt)
local viewer = Instance.new("Frame")
viewer.Name = "ScriptViewer"
viewer.Parent = ScreenGui
viewer.BackgroundColor3 = Color3.fromRGB(15,15,15)
viewer.BorderSizePixel = 0
viewer.Position = UDim2.new(0.3,0,0.3,0)
viewer.Size = UDim2.new(0,600,0,400)
local vCorner = Instance.new("UICorner",viewer)
vCorner.CornerRadius = UDim.new(0,10)
local vStroke = Instance.new("UIStroke",viewer)
vStroke.Thickness = 1
vStroke.Color = Color3.fromRGB(75,75,75)
local Topbar = Instance.new("Frame")
Topbar.Name = "Topbar"
Topbar.Parent = viewer
Topbar.BackgroundColor3 = Color3.fromRGB(20,20,20)
Topbar.BorderSizePixel = 0
Topbar.Size = UDim2.new(1,0,0,30)
local tbCorner = Instance.new("UICorner",Topbar)
tbCorner.CornerRadius = UDim.new(0,10)
local Title = Instance.new("TextLabel")
Title.Name = "Title"
Title.Parent = Topbar
Title.BackgroundTransparency = 1
Title.Size = UDim2.new(0.7,0,1,0)
Title.Position = UDim2.new(0.02,0,0,0)
Title.Font = Enum.Font.SourceSansBold
Title.TextSize = 16
Title.TextColor3 = Color3.fromRGB(255,255,255)
Title.Text = "Script Viewer"
Title.TextXAlignment = Enum.TextXAlignment.Left
local MinV = Instance.new("TextButton")
MinV.Name = "MinBtn"
MinV.Parent = Topbar
MinV.AnchorPoint = Vector2.new(1,0)
MinV.Position = UDim2.new(1,-60,0,0)
MinV.Size = UDim2.new(0,30,0,30)
MinV.Text = "_"
MinV.Font = Enum.Font.SourceSansBold
MinV.TextSize = 20
MinV.BackgroundColor3 = Color3.fromRGB(27,27,27)
MinV.TextColor3 = Color3.fromRGB(255,255,255)
local miniCC = Instance.new("UICorner",MinV)
miniCC.CornerRadius = UDim.new(0,5)
local Close2 = Instance.new("TextButton")
Close2.Name = "Close2"
Close2.Parent = Topbar
Close2.AnchorPoint = Vector2.new(1,0)
Close2.Position = UDim2.new(1,-30,0,0)
Close2.Size = UDim2.new(0,30,0,30)
Close2.Text = "X"
Close2.Font = Enum.Font.SourceSansBold
Close2.TextSize = 14
Close2.BackgroundColor3 = Color3.fromRGB(200,50,50)
Close2.TextColor3 = Color3.fromRGB(255,255,255)
local closeC = Instance.new("UICorner",Close2)
closeC.CornerRadius = UDim.new(0,5)
local ViewerContent = Instance.new("Frame")
ViewerContent.Name = "ViewerContent"
ViewerContent.Parent = viewer
ViewerContent.BackgroundTransparency = 1
ViewerContent.Position = UDim2.new(0,0,0,30)
ViewerContent.Size = UDim2.new(1,0,1,-30)
local CodeBox = Instance.new("TextBox")
CodeBox.Name = "CodeBox"
CodeBox.Parent = ViewerContent
CodeBox.BackgroundColor3 = Color3.fromRGB(25,25,25)
CodeBox.Position = UDim2.new(0,10,0,10)
CodeBox.Size = UDim2.new(1,-20,1,-20)
CodeBox.ClearTextOnFocus = false
CodeBox.MultiLine = true
CodeBox.TextSize = 14
CodeBox.TextWrapped = true
CodeBox.Font = Enum.Font.Code
CodeBox.TextColor3 = Color3.fromRGB(255,255,255)
CodeBox.TextXAlignment = Enum.TextXAlignment.Left
CodeBox.TextYAlignment = Enum.TextYAlignment.Top
CodeBox.Selectable = true
CodeBox.TextEditable = false
CodeBox.Text = txt or "No code available."
local cbCorner = Instance.new("UICorner",CodeBox)
cbCorner.CornerRadius = UDim.new(0,5)
local cbStroke = Instance.new("UIStroke",CodeBox)
cbStroke.Color = Color3.fromRGB(40,40,40)
cbStroke.Thickness = 1
local minimizedV = false
MinV.MouseButton1Click:Connect(function()
minimizedV = not minimizedV
if minimizedV then
ViewerContent:TweenSize(
UDim2.new(1,0,0,0),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quad,
0.2,
true
)
else
ViewerContent:TweenSize(
UDim2.new(1,0,1,-30),
Enum.EasingDirection.Out,
Enum.EasingStyle.Quad,
0.2,
true
)
end
end)
Close2.MouseButton1Click:Connect(function()
viewer:Destroy()
showCustomNotification("Viewer","Closed script viewer.",2)
end)
makeFrameDraggable(viewer)
local ResizeGrip = Instance.new("Frame")
ResizeGrip.Name = "ResizeGrip"
ResizeGrip.Parent = viewer
ResizeGrip.AnchorPoint = Vector2.new(1,1)
ResizeGrip.Position = UDim2.new(1,0,1,0)
ResizeGrip.Size = UDim2.new(0,15,0,15)
ResizeGrip.BackgroundColor3 = Color3.fromRGB(40,40,40)
local rcorner = Instance.new("UICorner",ResizeGrip)
rcorner.CornerRadius = UDim.new(0,5)
local resizing = false
local resizeStart
local startSize
ResizeGrip.InputBegan:Connect(function(inpt)
if inpt.UserInputType == Enum.UserInputType.MouseButton1 then
resizing = true
resizeStart = inpt.Position
startSize = viewer.Size
inpt.Changed:Connect(function()
if inpt.UserInputState == Enum.UserInputState.End then
resizing = false
end
end)
end
end)
ResizeGrip.InputChanged:Connect(function(inpt)
if resizing and inpt.UserInputType == Enum.UserInputType.MouseMovement then
local delta = inpt.Position - resizeStart
local newX = startSize.X.Offset + delta.X
local newY = startSize.Y.Offset + delta.Y
if newX < 300 then newX = 300 end
if newY < 80 then newY = 80 end
viewer.Size = UDim2.new(0,newX,0,newY)
end
end)
end
local function createResultItem(labelText, codeDetails)
local newItem = ResultTemplate:Clone()
newItem.Visible = true
newItem.Name = "ResultItem"
newItem.Parent = Listener
local path = newItem:FindFirstChild("Path")
local view = newItem:FindFirstChild("View")
local copy = newItem:FindFirstChild("Copy")
if path then
path.Text = labelText
end
if labelText:find("Unsuspicious") then
local refItem = newItem
task.delay(2,function()
if refItem and refItem.Parent then
refItem:Destroy()
end
end)
end
if view then
view.MouseButton1Click:Connect(function()
openScriptViewer(codeDetails)
end)
end
if copy then
copy.MouseButton1Click:Connect(function()
if setclipboard then
setclipboard(codeDetails)
showCustomNotification("Copied","Code copied to clipboard!",2)
else
showCustomNotification("Error","setclipboard() not available!",2)
end
end)
end
end
local function updateProgress(txt)
TitleLabel.Text = "Anticheat Finder | ".. txt
end
scanningCanceled = false
local function singleScan()
if scanningInProgress then
showCustomNotification("Scan","Already scanning!",2)
return
end
scanningInProgress = true
scanningCanceled = false
findingsCount = 0
for _,child in ipairs(Listener:GetChildren()) do
if child.Name=="ResultItem" then
child:Destroy()
end
end
updateProgress("Starting single-thread scan...")
showCustomNotification("Analysis","Starting analysis...",2)
-- 1. Scripts
local function doScripts()
local desc = game:GetDescendants()
processInBatches(desc,function(o)
if o:IsA("LocalScript") or o:IsA("ModuleScript") or o:IsA("Script") then
local code = safeDecompile(o)
local st,hits = getSuspicionLevel(code)
local colorLabel
if st=="Unsuspicious" then
colorLabel=("Script: %s [%s]"):format(o:GetFullName(),st)
elseif st=="Might be Anticheat" then
colorLabel=("Script: %s [%s]"):format(o:GetFullName(),st)
else
colorLabel=("Script: %s [%s]"):format(o:GetFullName(),st)
table.insert(suspiciousObjects, o)
end
local details = "Path: "..o:GetFullName().."\nStatus: "..st.." ("..hits.." hits)\n\n".. code.. checkRequireCalls(code)
createResultItem(colorLabel,details)
findingsCount = findingsCount + 1
end
end,100,function(i,t)
updateProgress("Analyzing scripts ("..i.."/"..t..")...")
end)
end
doScripts()
if scanningCanceled then
updateProgress("Scan canceled (scripts).")
scanningInProgress=false
return
end
local function doGC()
if not getgc then
createResultItem("getgc() missing","Cannot scan GC.")
return
end
local gl = getgc(true)
processInBatches(gl,function(f)
if type(f)=="function" and islclosure and islclosure(f) then
local code = safeDecompile(f)
local st,hits = getSuspicionLevel(code)
local colorLine
if st=="Unsuspicious" then
colorLine="Function (getgc) [Unsuspicious]"
elseif st=="Might be Anticheat" then
colorLine="Function (getgc) [Might be Anticheat]"
else
colorLine="Function (getgc) [Could be Anticheat]"
end
local details="--- Decompiled Function ---\n".. code.. checkRequireCalls(code)
local ups=tryGetUpvalues(f)
if #ups>0 then
details=details.. "\n\nUpvalues:\n".. table.concat(ups,"\n")
end
createResultItem(colorLine,details)
findingsCount=findingsCount+1
end
end,100,function(i,t)
updateProgress("Analyzing GC ("..i.."/"..t..")...")
end)
end
doGC()
if scanningCanceled then
updateProgress("Scan canceled (getgc).")
scanningInProgress=false
return
end
local function doRem()
local dList = game:GetDescendants()
processInBatches(dList,function(o)
if o:IsA("RemoteEvent") or o:IsA("RemoteFunction")
or o:IsA("BindableEvent") or o:IsA("BindableFunction") then
local ln=o.Name:lower()
local suspicious=false
for _,k in ipairs(suspiciousKeywords) do
if ln:find(k) then
suspicious=true
break
end
end
local st = suspicious and "Could be Anticheat" or "Unsuspicious"
local line
if st=="Unsuspicious" then
line=("Remote: %s [%s]"):format(o:GetFullName(),st)
else
line=("Remote: %s [%s]"):format(o:GetFullName(),st)
end
local info=remoteExtraInfo(o).. "\nStatus: "..st
createResultItem(line,info)
findingsCount=findingsCount+1
end
end,100,function(i,t)
updateProgress("Analyzing remotes ("..i.."/"..t..")...")
end)
end
doRem()
if scanningCanceled then
updateProgress("Scan canceled (remotes).")
scanningInProgress=false
return
end
local function doCoreGuiScan()
local coreGui = game:GetService("CoreGui")
local cgDescendants = coreGui:GetDescendants()
processInBatches(cgDescendants,function(o)
if o:IsA("LocalScript") or o:IsA("Script") then
local code = safeDecompile(o)
local st, hits = getSuspicionLevel(code)
local colorLabel
if st=="Unsuspicious" then
colorLabel=("CoreGui Script: %s [%s]"):format(o:GetFullName(),st)
elseif st=="Might be Anticheat" then
colorLabel=("CoreGui Script: %s [%s]"):format(o:GetFullName(),st)
else
colorLabel=("CoreGui Script: %s [%s]"):format(o:GetFullName(),st)
table.insert(suspiciousObjects, o)
end
local details="Path: "..o:GetFullName().."\nStatus: "..st.." ("..hits.." hits)\n\n".. code.. checkRequireCalls(code)
createResultItem(colorLabel,details)
findingsCount=findingsCount+1
end
end,100,function(i,t)
updateProgress("Analyzing CoreGui ("..i.."/"..t..")...")
end)
end
doCoreGuiScan()
if scanningCanceled then
updateProgress("Scan canceled (CoreGui).")
scanningInProgress=false
return
end
-- 5. ServerScriptService
local function doServerSideScan()
local success, serverService = pcall(function()
return game:GetService("ServerScriptService")
end)
if not success or not serverService then
createResultItem("ServerScriptService", "ServerScriptService not accessible.")
return
end
local ssDescendants = serverService:GetDescendants()
processInBatches(ssDescendants, function(o)
if o:IsA("Script") then
local code = safeDecompile(o)
local st, hits = getSuspicionLevel(code)
local colorLabel
if st=="Unsuspicious" then
colorLabel=("Server Script: %s [%s]"):format(o:GetFullName(),st)
elseif st=="Might be Anticheat" then
colorLabel=("Server Script: %s [%s]"):format(o:GetFullName(),st)
else
colorLabel=("Server Script: %s [%s]"):format(o:GetFullName(),st)
table.insert(suspiciousObjects, o)
end
local details="Path: "..o:GetFullName().."\nStatus: "..st.." ("..hits.." hits)\n\n".. code.. checkRequireCalls(code)
createResultItem(colorLabel,details)
findingsCount = findingsCount + 1
end
end,100,function(i,t)
updateProgress("Analyzing Server Scripts ("..i.."/"..t..")...")
end)
end
doServerSideScan()
if scanningCanceled then
updateProgress("Scan canceled (Server Scripts).")
scanningInProgress=false
return
end
local function doEx()
if hookmetamethod then
createResultItem("Metamethod Hooks Found","hookmetamethod is available.\n".. exploitInfo())
findingsCount=findingsCount+1
else
createResultItem("Metamethod Hooks?","No hookmetamethod found.\n".. exploitInfo())
findingsCount=findingsCount+1
end
if debug and debug.getupvalues then
createResultItem("Debug Functions","debug.getupvalues => deeper hooking.\n".. exploitInfo())
else
createResultItem("Debug Functions","No or partial debug library.\n".. exploitInfo())
end
findingsCount=findingsCount+1
end
doEx()
if scanningCanceled then
updateProgress("Scan canceled (exploits).")
scanningInProgress=false
return
end
if findingsCount == 0 then
createResultItem("Analysis complete","No suspicious paths found.")
end
updateProgress("Analysis complete. Found: ".. findingsCount)
showCustomNotification("Analysis","Scan complete. Found ".. findingsCount.." items.",3)
scanningInProgress=false
end
local function multiScan()
if scanningInProgress then
showCustomNotification("Scan","Already scanning!",2)
return
end
scanningInProgress = true
scanningCanceled = false
findingsCount = 0
for _,child in ipairs(Listener:GetChildren()) do
if child.Name=="ResultItem" then
child:Destroy()
end
end
updateProgress("Multi-Scan in progress...")
showCustomNotification("Multi-Scan","Starting parallel scans...",2)
local coScripts=coroutine.create(function()
local desc=game:GetDescendants()
processInBatches(desc,function(o)
if o:IsA("LocalScript") or o:IsA("ModuleScript") or o:IsA("Script") then
local code=safeDecompile(o)
local st,hits=getSuspicionLevel(code)
local label
if st=="Unsuspicious" then
label=("Script: %s [%s]"):format(o:GetFullName(),st)
elseif st=="Might be Anticheat" then
label=("Script: %s [%s]"):format(o:GetFullName(),st)
else
label=("Script: %s [%s]"):format(o:GetFullName(),st)
table.insert(suspiciousObjects, o)
end
local det="Path: "..o:GetFullName().."\nStatus: "..st.." ("..hits.." hits)\n\n"..code.. checkRequireCalls(code)
createResultItem(label,det)
findingsCount=findingsCount+1
end
end,100,function(i,t)
updateProgress("Analyzing scripts ("..i.."/"..t..")...")
end)
end)
local coGC=coroutine.create(function()
if not getgc then
createResultItem("getgc() missing","No getgc() => cannot scan GC.")
return
end
local gl=getgc(true)
processInBatches(gl,function(f)
if type(f)=="function" and islclosure and islclosure(f) then
local code=safeDecompile(f)
local st,hits=getSuspicionLevel(code)
local line
if st=="Unsuspicious" then
line="Function (getgc) [Unsuspicious]"
elseif st=="Might be Anticheat" then
line="Function (getgc) [Might be Anticheat]"
else
line="Function (getgc) [Could be Anticheat]"
end
local det="--- Decompiled Function ---\n".. code.. checkRequireCalls(code)
local ups=tryGetUpvalues(f)
if #ups>0 then
det=det.. "\n\nUpvalues:\n".. table.concat(ups,"\n")
end
createResultItem(line,det)
findingsCount=findingsCount+1
end
end,100,function(i,t)
updateProgress("Analyzing GC ("..i.."/"..t..")...")
end)
end)
local coRemotes=coroutine.create(function()
local dList=game:GetDescendants()
processInBatches(dList,function(o)
if o:IsA("RemoteEvent") or o:IsA("RemoteFunction")
or o:IsA("BindableEvent") or o:IsA("BindableFunction") then
local ln=o.Name:lower()
local suspicious=false
for _,k in ipairs(suspiciousKeywords) do
if ln:find(k) then
suspicious=true
break
end
end
local st=suspicious and "Could be Anticheat" or "Unsuspicious"
local line
if st=="Unsuspicious" then
line=("Remote: %s [%s]"):format(o:GetFullName(),st)
else
line=("Remote: %s [%s]"):format(o:GetFullName(),st)
end
local info=remoteExtraInfo(o).. "\nStatus: "..st
createResultItem(line,info)
findingsCount=findingsCount+1
end
end,100,function(i,t)
updateProgress("Analyzing remotes ("..i.."/"..t..")...")
end)
end)
local coExploits=coroutine.create(function()
if hookmetamethod then
createResultItem("Metamethod Hooks Found","hookmetamethod is available.\n".. exploitInfo())
findingsCount=findingsCount+1
else
createResultItem("Metamethod Hooks?","No hookmetamethod found.\n".. exploitInfo())
findingsCount=findingsCount+1
end
if debug and debug.getupvalues then
createResultItem("Debug Functions","debug.getupvalues => deeper hooking.\n".. exploitInfo())
else
createResultItem("Debug Functions","No or partial debug library.\n".. exploitInfo())
end
findingsCount=findingsCount+1
end)
coroutine.resume(coScripts)
coroutine.resume(coGC)
coroutine.resume(coRemotes)
coroutine.resume(coExploits)
while coroutine.status(coScripts)~="dead"
or coroutine.status(coGC)~="dead"
or coroutine.status(coRemotes)~="dead"
or coroutine.status(coExploits)~="dead" do
if scanningCanceled then
updateProgress("Multi-Scan canceled.")
break
end
RunService.Heartbeat:Wait()
end
if not scanningCanceled then
if findingsCount==0 then
createResultItem("Analysis complete","No suspicious paths found.")
end
updateProgress("Multi-Scan complete. Found: "..findingsCount)
showCustomNotification("Multi-Scan","Finished. Found ".. findingsCount.." items.",3)
end
scanningInProgress=false
end
local function singleScanWrapper()
if not scanningInProgress then
singleScan()
else
showCustomNotification("Info","Already scanning.",2)
end
end
local function multiScanWrapper()
if not scanningInProgress then
multiScan()
else
showCustomNotification("Info","Already scanning.",2)
end
end
Uninject.MouseButton1Click:Connect(function()
if scanningInProgress then
scanningCanceled = true
updateProgress("Scan canceled by user.")
showCustomNotification("Scan","Cancelled by user.",2)
else
showCustomNotification("Info","No scan in progress.",2)
end
end)
StartBtn.MouseButton1Click:Connect(singleScanWrapper)
MultiBtn.MouseButton1Click:Connect(multiScanWrapper)
local function showMainGUI()
if UI_OPEN then return end
UI_OPEN = true
MAIN_FRAME.Visible = true
MAIN_FRAME.Size = UDim2.new(0,0,0,0) -- Start bei 0,0
TweenService:Create(
MAIN_FRAME,
TweenInfo.new(0.3,Enum.EasingStyle.Quad,Enum.EasingDirection.Out),
{ Size = MAIN_SIZE }
):Play()
end
local function toggleGUI()
if UI_OPEN then
hideMainGUI()
else
showMainGUI()
end
end
showMainGUI()
UserInputService.InputBegan:Connect(function(input, gp)
if not gp and input.KeyCode == toggleKey then
toggleGUI()
end
end)
Players.LocalPlayer.Idled:Connect(function()
local vu = game:GetService("VirtualUser")
vu:CaptureController()
vu:ClickButton2(Vector2.new(0,0))
showCustomNotification("Anti-AFK","Anti-AFK active!",2)
end)