Sign In to Your Account

Manual registration is temporarily disabled. Please use Discord, Google or GitHub to create an account.

CONTINUE WITH
Raknet Packet Blocker (desync) - Universal Script | Free Roblox Script

Raknet Packet Blocker (desync)

Universal • 5 views • 18 hours ago
Raknet Packet Blocker (desync) - Roblox Script
Mobile Mobile Friendly
Key Key Required

Description

Credits: 21team

Require RakNet libraryJust an open-source RakNet packet blocker.Interface was vibecoded (I’m lazy).Idea: if Roblox updates the packet IDs, you’ll be able to easily find them.Tested on Potassium

580 Lines 19,777 Bytes
-- Discord: dsc.gg/21hub
-- Config:
local HideKey = "F1"
local BlockKey = "U"


-- DO NOT TOUCH UNDER THERE IF YOU DON'T KNOW WHAT YOU'RE DOING
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")

HideKey = HideKey or ""
BlockKey = BlockKey or ""

local PacketBlocker = {}
PacketBlocker.__index = PacketBlocker

local function createInstance(className, properties, children)
    local instance = Instance.new(className)
    for property, value in pairs(properties or {}) do
        instance[property] = value
    end
    for _, child in ipairs(children or {}) do
        child.Parent = instance
    end
    return instance
end

local function makeDraggable(frame, connectionTable)
    local isDragging = false
    local dragStart = nil
    local frameStart = nil
    local inputChangedConnection = nil

    local inputBeganConnection = frame.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            isDragging = true
            dragStart = input.Position
            frameStart = frame.Position

            local stateChangedConnection = input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    isDragging = false
                    if stateChangedConnection then
                        stateChangedConnection:Disconnect()
                    end
                end
            end)

            if connectionTable then
                table.insert(connectionTable, stateChangedConnection)
            end
        end
    end)

    local inputChangedConnection2 = frame.InputChanged:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
            inputChangedConnection = input
        end
    end)

    local globalInputConnection = UserInputService.InputChanged:Connect(function(input)
        if input == inputChangedConnection and isDragging then
            local delta = input.Position - dragStart
            frame.Position = UDim2.new(
                frameStart.X.Scale,
                frameStart.X.Offset + delta.X,
                frameStart.Y.Scale,
                frameStart.Y.Offset + delta.Y
            )
        end
    end)

    if connectionTable then
        table.insert(connectionTable, inputBeganConnection)
        table.insert(connectionTable, inputChangedConnection2)
        table.insert(connectionTable, globalInputConnection)
    end
end

function PacketBlocker.new()
    local self = setmetatable({}, PacketBlocker)

    self.isBlocking = false
    self.selectedPacket = 0
    self.blockedCount = 0
    self.packetCounts = {}
    self.logEntries = {}
    self.connections = {}
    self.activeHook = nil

    self.screenGui = createInstance("ScreenGui", {
        ResetOnSpawn = false,
        DisplayOrder = 999999999,
        Parent = Players.LocalPlayer:WaitForChild("PlayerGui")
    })

    self.mainFrame = createInstance("Frame", {
        Size = UDim2.new(0, 250, 0, 280),
        Position = UDim2.new(0.5, -330, 0.5, -155),
        BackgroundColor3 = Color3.fromRGB(25, 27, 32),
        BorderSizePixel = 0,
        ClipsDescendants = true,
        Parent = self.screenGui
    }, {
        createInstance("UICorner", { CornerRadius = UDim.new(0, 10) }),
        createInstance("UIPadding", {
            PaddingTop = UDim.new(0, 10),
            PaddingBottom = UDim.new(0, 10),
            PaddingLeft = UDim.new(0, 12),
            PaddingRight = UDim.new(0, 12)
        })
    })

    local titleFrame = createInstance("Frame", {
        Size = UDim2.new(1, 0, 0, 26),
        BackgroundTransparency = 1,
        Parent = self.mainFrame
    })

    self.titleLabel = createInstance("TextLabel", {
        Size = UDim2.new(0.42, 0, 1, 0),
        BackgroundTransparency = 1,
        Text = "Packet Blocker",
        TextColor3 = Color3.fromRGB(255, 255, 255),
        TextSize = 16,
        Font = Enum.Font.GothamBold,
        TextXAlignment = Enum.TextXAlignment.Left,
        Parent = titleFrame
    })

    self:createButton("Logs", UDim2.new(0.15, 0, 1, 0), UDim2.new(0.68, 0, 0, 0), titleFrame, function()
        self:toggleLogWindow()
    end, Color3.fromRGB(60, 64, 75))

    self:createButton("X", UDim2.new(0.14, 0, 1, 0), UDim2.new(0.86, 0, 0, 0), titleFrame, function()
        self:destroy()
    end, Color3.fromRGB(180, 50, 50))

    self.packetDisplay = createInstance("TextLabel", {
        Size = UDim2.new(1, 0, 0, 34),
        Position = UDim2.new(0, 0, 0, 32),
        BackgroundColor3 = Color3.fromRGB(35, 38, 45),
        BorderSizePixel = 0,
        Text = "Selected Packet: 0x00",
        TextColor3 = Color3.fromRGB(220, 220, 220),
        TextSize = 13,
        Font = Enum.Font.GothamMedium,
        Parent = self.mainFrame
    }, {
        createInstance("UICorner", { CornerRadius = UDim.new(0, 6) })
    })

    local inputContainer = createInstance("Frame", {
        Size = UDim2.new(1, 0, 0, 30),
        Position = UDim2.new(0, 0, 0, 72),
        BackgroundTransparency = 1,
        Parent = self.mainFrame
    })

    self.packetInput = createInstance("TextBox", {
        Size = UDim2.new(0.65, -5, 1, 0),
        BackgroundColor3 = Color3.fromRGB(35, 38, 45),
        BorderSizePixel = 0,
        Text = "",
        PlaceholderText = "0x00",
        TextColor3 = Color3.fromRGB(255, 255, 255),
        TextSize = 13,
        Font = Enum.Font.Gotham,
        Parent = inputContainer
    }, {
        createInstance("UICorner", { CornerRadius = UDim.new(0, 6) })
    })

    self:createButton("Apply", UDim2.new(0.33, 0, 1, 0), UDim2.new(0.64, 5, 0, 0), inputContainer, function()
        self:applyPacket()
    end, Color3.fromRGB(52, 120, 246))

    local controlsGrid = createInstance("Frame", {
        Size = UDim2.new(1, 0, 0, 68),
        Position = UDim2.new(0, 0, 0, 108),
        BackgroundTransparency = 1,
        Parent = self.mainFrame
    })

    self:createButton("< Back", UDim2.new(0.48, 0, 0, 30), UDim2.new(0, 0, 0, 0), controlsGrid, function()
        self:previousPacket()
    end)

    self:createButton("Next >", UDim2.new(0.48, 0, 0, 30), UDim2.new(0.52, 0, 0, 0), controlsGrid, function()
        self:nextPacket()
    end)

    self.toggleButton = self:createButton("Block " .. (BlockKey~="" and ("(%s)"):format(BlockKey)) or "", UDim2.new(1, 0, 0, 32), UDim2.new(0, 0, 0, 36), controlsGrid, function()
        self:toggleBlock()
    end, Color3.fromRGB(220, 50, 50))

    self.infoLabel = createInstance("TextLabel", {
        Size = UDim2.new(1, 0, 0, 36),
        Position = UDim2.new(0, 0, 0, 182),
        BackgroundTransparency = 1,
        Text = "For desync you need to find the packet in logs that increases while moving and block it\n\nScript credits to 21hub team",
        TextColor3 = Color3.fromRGB(140, 145, 155),
        TextSize = 10,
        Font = Enum.Font.Gotham,
        TextWrapped = true,
        RichText = true,
        TextXAlignment = Enum.TextXAlignment.Center,
        Parent = self.mainFrame
    })

    self.statusLabel = createInstance("TextLabel", {
        Size = UDim2.new(1, 0, 0, 30),
        Position = UDim2.new(0, 0, 1, -30),
        BackgroundColor3 = Color3.fromRGB(18, 20, 24),
        BorderSizePixel = 0,
        Text = "Status: Idle",
        TextColor3 = Color3.fromRGB(180, 180, 180),
        TextSize = 11,
        Font = Enum.Font.Gotham,
        Parent = self.mainFrame
    }, {
        createInstance("UICorner", { CornerRadius = UDim.new(0, 6) })
    })

    self:buildLogWindow()
    makeDraggable(self.mainFrame, self.connections)
    makeDraggable(self.logWindow, self.connections)
    self:registerHooks()

    return self
end

function PacketBlocker:createButton(text, size, position, parent, callback, color)
    local backgroundColor = color or Color3.fromRGB(45, 48, 56)
    local button = createInstance("TextButton", {
        Size = size,
        Position = position,
        BackgroundColor3 = backgroundColor,
        BorderSizePixel = 0,
        Text = text,
        TextColor3 = Color3.fromRGB(255, 255, 255),
        TextSize = 12,
        Font = Enum.Font.GothamBold,
        Parent = parent
    }, {
        createInstance("UICorner", { CornerRadius = UDim.new(0, 6) })
    })

    button:SetAttribute("BaseColor", backgroundColor)

    local mouseEnter = button.MouseEnter:Connect(function()
        local baseColor = button:GetAttribute("BaseColor") or backgroundColor
        TweenService:Create(button, TweenInfo.new(0.12), {
            BackgroundColor3 = baseColor:Lerp(Color3.fromRGB(255, 255, 255), 0.2)
        }):Play()
    end)

    local mouseLeave = button.MouseLeave:Connect(function()
        local baseColor = button:GetAttribute("BaseColor") or backgroundColor
        TweenService:Create(button, TweenInfo.new(0.12), {
            BackgroundColor3 = baseColor
        }):Play()
    end)

    local click = button.MouseButton1Click:Connect(callback)

    if self.connections then
        table.insert(self.connections, mouseEnter)
        table.insert(self.connections, mouseLeave)
        table.insert(self.connections, click)
    end

    return button
end

function PacketBlocker:setButtonColor(button, color)
    button:SetAttribute("BaseColor", color)
    TweenService:Create(button, TweenInfo.new(0.15), {
        BackgroundColor3 = color
    }):Play()
end

function PacketBlocker:buildLogWindow()
    self.logWindow = createInstance("Frame", {
        Size = UDim2.new(0, 250, 0, 280),
        Position = UDim2.new(0.5, 10, 0.5, -155),
        BackgroundColor3 = Color3.fromRGB(25, 27, 32),
        BorderSizePixel = 0,
        Visible = false,
        Parent = self.screenGui
    }, {
        createInstance("UICorner", { CornerRadius = UDim.new(0, 10) }),
        createInstance("UIPadding", {
            PaddingTop = UDim.new(0, 12),
            PaddingBottom = UDim.new(0, 12),
            PaddingLeft = UDim.new(0, 12),
            PaddingRight = UDim.new(0, 12)
        })
    })

    local header = createInstance("Frame", {
        Size = UDim2.new(1, 0, 0, 26),
        BackgroundTransparency = 1,
        Parent = self.logWindow
    })

    createInstance("TextLabel", {
        Size = UDim2.new(0.5, 0, 1, 0),
        BackgroundTransparency = 1,
        Text = "Packet Tracker",
        TextColor3 = Color3.fromRGB(255, 255, 255),
        TextSize = 15,
        Font = Enum.Font.GothamBold,
        TextXAlignment = Enum.TextXAlignment.Left,
        Parent = header
    })

    self:createButton("Clear", UDim2.new(0.28, 0, 1, 0), UDim2.new(0.52, 0, 0, 0), header, function()
        self:clearLogs()
    end, Color3.fromRGB(180, 50, 50))

    self:createButton("X", UDim2.new(0.16, 0, 1, 0), UDim2.new(0.84, 0, 0, 0), header, function()
        self.logWindow.Visible = false
    end, Color3.fromRGB(60, 64, 75))

    self.scrollList = createInstance("ScrollingFrame", {
        Size = UDim2.new(1, 0, 1, -34),
        Position = UDim2.new(0, 0, 0, 34),
        BackgroundTransparency = 1,
        BorderSizePixel = 0,
        ScrollBarThickness = 4,
        ScrollBarImageColor3 = Color3.fromRGB(80, 85, 95),
        CanvasSize = UDim2.new(0, 0, 0, 0),
        AutomaticCanvasSize = Enum.AutomaticSize.Y,
        Parent = self.logWindow
    }, {
        createInstance("UIListLayout", {
            SortOrder = Enum.SortOrder.LayoutOrder,
            Padding = UDim.new(0, 4)
        })
    })
end

function PacketBlocker:toggleLogWindow()
    local mainPos = self.mainFrame.AbsolutePosition
    self.logWindow.Position = UDim2.new(0, mainPos.X + 320 + 20, 0, mainPos.Y)
    self.logWindow.Visible = not self.logWindow.Visible
end

function PacketBlocker:recordPacket(packetId)
    if not packetId or not self.packetCounts then
        return
    end

    self.packetCounts[packetId] = (self.packetCounts[packetId] or 0) + 1
    local count = self.packetCounts[packetId]

    if self.logEntries[packetId] then
        local countLabel = self.logEntries[packetId]:FindFirstChild("CountLabel")
        if countLabel then
            countLabel.Text = string.format("x%d", count)
        end
    else
        local entry = createInstance("Frame", {
            Name = "Packet_" .. packetId,
            Size = UDim2.new(1, -6, 0, 22),
            BackgroundColor3 = Color3.fromRGB(32, 35, 42),
            BorderSizePixel = 0,
            Parent = self.scrollList
        }, {
            createInstance("UICorner", { CornerRadius = UDim.new(0, 4) }),
            createInstance("UIPadding", {
                PaddingLeft = UDim.new(0, 8),
                PaddingRight = UDim.new(0, 8)
            })
        })

        local clickConnection = entry.InputBegan:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
                self:selectPacket(packetId)
            end
        end)

        if self.connections then
            table.insert(self.connections, clickConnection)
        end

        createInstance("TextLabel", {
            Size = UDim2.new(0.5, 0, 1, 0),
            BackgroundTransparency = 1,
            Text = string.format("0x%02X", packetId),
            TextColor3 = Color3.fromRGB(220, 220, 220),
            TextSize = 11,
            Font = Enum.Font.GothamBold,
            TextXAlignment = Enum.TextXAlignment.Left,
            Parent = entry
        })

        createInstance("TextLabel", {
            Name = "CountLabel",
            Size = UDim2.new(0.5, 0, 1, 0),
            Position = UDim2.new(0.5, 0, 0, 0),
            BackgroundTransparency = 1,
            Text = string.format("x%d", count),
            TextColor3 = Color3.fromRGB(150, 155, 165),
            TextSize = 11,
            Font = Enum.Font.Gotham,
            TextXAlignment = Enum.TextXAlignment.Right,
            Parent = entry
        })

        self.logEntries[packetId] = entry
    end
end

function PacketBlocker:clearLogs()
    self.packetCounts = {}
    for _, entry in pairs(self.logEntries or {}) do
        entry:Destroy()
    end
    self.logEntries = {}
end

function PacketBlocker:selectPacket(packetId)
    self.selectedPacket = packetId
    self.blockedCount = 0
    self:updateDisplay()
    self:updateStatus()
end

function PacketBlocker:nextPacket()
    self:selectPacket((self.selectedPacket + 1) % 256)
end

function PacketBlocker:previousPacket()
    self:selectPacket((self.selectedPacket - 1 + 256) % 256)
end

function PacketBlocker:toggleBlock()
    self.isBlocking = not self.isBlocking

    if self.isBlocking then
        self.toggleButton.Text = "Unblock " .. (BlockKey~="" and ("(%s)"):format(BlockKey)) or ""
        self:setButtonColor(self.toggleButton, Color3.fromRGB(46, 160, 67))
    else
        self.toggleButton.Text = "Block " .. (BlockKey~="" and ("(%s)"):format(BlockKey)) or ""
        self:setButtonColor(self.toggleButton, Color3.fromRGB(220, 50, 50))
    end

    self:updateStatus()
end

function PacketBlocker:applyPacket()
    local inputText = self.packetInput.Text
    local hexMatch = inputText:match("0x([%da-fA-F]+)") or inputText:match("([%da-fA-F]+)")
    local packetId = hexMatch and tonumber(hexMatch, 16)

    if packetId and packetId >= 0 and packetId <= 255 then
        self:selectPacket(packetId)
    else
        self.statusLabel.Text = "Status: Invalid ID (0x00 - 0xFF)"
        self.statusLabel.TextColor3 = Color3.fromRGB(255, 220, 100)
    end
end

function PacketBlocker:updateDisplay()
    self.packetDisplay.Text = string.format("Selected Packet: 0x%02X", self.selectedPacket)
end

function PacketBlocker:updateStatus()
    if self.isBlocking then
        self.statusLabel.Text = string.format("Blocking 0x%02X | Blocked: %d", self.selectedPacket, self.blockedCount)
        self.statusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    else
        self.statusLabel.Text = string.format("Status: Idle (0x%02X)", self.selectedPacket)
        self.statusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
    end
end

function PacketBlocker:registerHooks()
    local raknetLibrary = raknet or (getgenv and getgenv().raknet) or (_G and _G.raknet)

    if raknetLibrary and typeof(raknetLibrary.add_send_hook) == "function" then
        self.activeHook = function(packet)
            if not self or not self.screenGui then
                return
            end

            if packet and packet.PacketId then
                if self.isBlocking and packet.PacketId == self.selectedPacket then
                    if typeof(packet.Block) == "function" then
                        packet:Block()
                    end
                    self.blockedCount = self.blockedCount + 1
                    self:updateStatus()
                    return
                end

                self:recordPacket(packet.PacketId)
            end
        end

        raknetLibrary.add_send_hook(self.activeHook)
        self.statusLabel.Text = "Status: RakNet Hook Active"
        self.statusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
    else
        self.statusLabel.Text = "Status: RakNet Library Not Found"
        self.statusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end

function PacketBlocker:toggle()
    self.screenGui.Enabled = not self.screenGui.Enabled
end

function PacketBlocker:destroy()
    self.isBlocking = false

    local raknetLibrary = raknet or (getgenv and getgenv().raknet) or (_G and _G.raknet)
    if raknetLibrary and typeof(raknetLibrary.remove_send_hook) == "function" and self.activeHook then
        pcall(function()
            raknetLibrary.remove_send_hook(self.activeHook)
        end)
    end

    self.activeHook = nil

    if self.connections then
        for _, connection in ipairs(self.connections) do
            if connection and connection.Connected then
                connection:Disconnect()
            end
        end
        table.clear(self.connections)
        self.connections = nil
    end

    if self.logEntries then
        for _, entry in pairs(self.logEntries) do
            if entry then
                entry:Destroy()
            end
        end
        table.clear(self.logEntries)
        self.logEntries = nil
    end

    if self.logWindow then
        self.logWindow:Destroy()
        self.logWindow = nil
    end

    if self.screenGui then
        self.screenGui:Destroy()
        self.screenGui = nil
    end

    if self.packetCounts then
        table.clear(self.packetCounts)
        self.packetCounts = nil
    end

    setmetatable(self, nil)
end

local packetBlockerInstance = PacketBlocker.new()


local toggleConnection = UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end

    if HideKey~="" and input.KeyCode == Enum.KeyCode[HideKey] then
        packetBlockerInstance:toggle()
     elseif BlockKey~="" and input.KeyCode == Enum.KeyCode[BlockKey] then
        packetBlockerInstance:toggleBlock()
    end
end)

table.insert(packetBlockerInstance.connections, toggleConnection)

Comments

Comments section coming soon...

Frequently Asked Questions

To use this script, you need a Roblox Executor. Simply copy the script from this page, paste it into your executor, and run it while you are in the Universal game.

This script may require a payment or subscription. Please check the script's description for more details.

Yes, this script has a key system. You may need to complete a task or join a Discord server to get a key.

Yes, this script is designed to be compatible with mobile executors.

Similar Scripts

Share Script

Share this script with others by copying the link or using your device's share options.

https://rbxscripts.net/scripts/raknet-packet-blocker-desync/
or

Report Script

Help us maintain a safe community. Your report will be reviewed by our moderation team and appropriate action will be taken if needed.

Select a reason...
Malicious Code
Inappropriate Content
Copyright Infringement
Spam
Misleading Information
Other