Product Purchase
Key RequiredUniversal

Product Purchase

Universal ScriptEducationalistEducationalist 2.2K views 1.7K executesUpdated May 2, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•305 lines (10140 chars)
-- Product Purchase Vulnerability Demonstrator
-- Exploits improper purchase validation in vulnerable games

local Players = game:GetService("Players")
local MarketplaceService = game:GetService("MarketplaceService")
local CoreGui = game:GetService("CoreGui")
local UserInputService = game:GetService("UserInputService")
local HttpService = game:GetService("HttpService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer
local mouse = player:GetMouse()

-- Create ScreenGui
local gui = Instance.new("ScreenGui")
gui.Name = "ProductExploit"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

-- Try to parent to CoreGui for protection, fallback to PlayerGui
pcall(function()
    gui.Parent = CoreGui
end)
if not gui.Parent then
    gui.Parent = player:WaitForChild("PlayerGui")
end

-- Main Frame
local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 400, 0, 350)
mainFrame.Position = UDim2.new(0.5, -200, 0.5, -175)
mainFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 40)
mainFrame.BorderSizePixel = 0
mainFrame.Parent = gui

-- Top Bar
local topBar = Instance.new("Frame")
topBar.Size = UDim2.new(1, 0, 0, 30)
topBar.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
topBar.BorderSizePixel = 0
topBar.Parent = mainFrame

-- Title
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -60, 1, 0)
title.Position = UDim2.new(0, 5, 0, 0)
title.BackgroundTransparency = 1
title.Text = "Product Exploit | Vulnerable Games Only"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.TextScaled = true
title.Font = Enum.Font.SourceSansBold
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = topBar

-- Minimize Button
local minimizeBtn = Instance.new("TextButton")
minimizeBtn.Size = UDim2.new(0, 25, 0, 25)
minimizeBtn.Position = UDim2.new(1, -55, 0, 2.5)
minimizeBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 50)
minimizeBtn.Text = "-"
minimizeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeBtn.TextScaled = true
minimizeBtn.Font = Enum.Font.SourceSansBold
minimizeBtn.Parent = topBar

-- Close Button  
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 25, 0, 25)
closeBtn.Position = UDim2.new(1, -27, 0, 2.5)
closeBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
closeBtn.Text = "X"
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.TextScaled = true
closeBtn.Font = Enum.Font.SourceSansBold
closeBtn.Parent = topBar

-- Content Frame (shown/hidden for minimize)
local contentFrame = Instance.new("Frame")
contentFrame.Size = UDim2.new(1, 0, 1, -30)
contentFrame.Position = UDim2.new(0, 0, 0, 30)
contentFrame.BackgroundTransparency = 1
contentFrame.Parent = mainFrame

-- Product ID Input
local idLabel = Instance.new("TextLabel")
idLabel.Size = UDim2.new(0, 100, 0, 30)
idLabel.Position = UDim2.new(0, 10, 0, 10)
idLabel.BackgroundTransparency = 1
idLabel.Text = "Product ID:"
idLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
idLabel.TextScaled = true
idLabel.Font = Enum.Font.SourceSans
idLabel.TextXAlignment = Enum.TextXAlignment.Left
idLabel.Parent = contentFrame

local idTextBox = Instance.new("TextBox")
idTextBox.Size = UDim2.new(0, 270, 0, 30)
idTextBox.Position = UDim2.new(0, 110, 0, 10)
idTextBox.BackgroundColor3 = Color3.fromRGB(45, 45, 50)
idTextBox.BorderSizePixel = 0
idTextBox.Text = ""
idTextBox.PlaceholderText = "Enter Product ID or click item below"
idTextBox.TextColor3 = Color3.fromRGB(255, 255, 255)
idTextBox.TextScaled = true
idTextBox.Font = Enum.Font.SourceSans
idTextBox.ClearTextOnFocus = false
idTextBox.Parent = contentFrame

-- Buy Button
local buyBtn = Instance.new("TextButton")
buyBtn.Size = UDim2.new(0, 180, 0, 35)
buyBtn.Position = UDim2.new(0.5, -90, 0, 55)
buyBtn.BackgroundColor3 = Color3.fromRGB(60, 180, 60)
buyBtn.Text = "EXPLOIT PURCHASE"
buyBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
buyBtn.TextScaled = true
buyBtn.Font = Enum.Font.SourceSansBold
buyBtn.Parent = contentFrame

-- Products List Frame
local listFrame = Instance.new("ScrollingFrame")
listFrame.Size = UDim2.new(1, -20, 0, 200)
listFrame.Position = UDim2.new(0, 10, 0, 100)
listFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
listFrame.BorderSizePixel = 0
listFrame.ScrollBarThickness = 4
listFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
listFrame.Parent = contentFrame

-- Status Label
local statusLabel = Instance.new("TextLabel")
statusLabel.Size = UDim2.new(1, -20, 0, 20)
statusLabel.Position = UDim2.new(0, 10, 1, -25)
statusLabel.BackgroundTransparency = 1
statusLabel.Text = "Ready | Only works on vulnerable games"
statusLabel.TextColor3 = Color3.fromRGB(100, 200, 100)
statusLabel.TextScaled = true
statusLabel.Font = Enum.Font.SourceSans
statusLabel.Parent = contentFrame

-- Dragging functionality
local dragging = false
local dragStart = nil
local startPos = nil

topBar.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        dragging = true
        dragStart = input.Position
        startPos = mainFrame.Position
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
        local delta = input.Position - dragStart
        mainFrame.Position = UDim2.new(
            startPos.X.Scale,
            startPos.X.Offset + delta.X,
            startPos.Y.Scale,
            startPos.Y.Offset + delta.Y
        )
    end
end)

UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        dragging = false
    end
end)

-- Load developer products
local function loadProducts()
    statusLabel.Text = "Loading products..."
    statusLabel.TextColor3 = Color3.fromRGB(200, 200, 100)
    
    local success, products = pcall(function()
        return MarketplaceService:GetDeveloperProductsAsync():GetCurrentPage()
    end)
    
    if success and products then
        local yPos = 5
        for _, product in ipairs(products) do
            local productBtn = Instance.new("TextButton")
            productBtn.Size = UDim2.new(1, -10, 0, 40)
            productBtn.Position = UDim2.new(0, 5, 0, yPos)
            productBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 55)
            productBtn.BorderSizePixel = 0
            productBtn.Text = string.format("%s | ID: %d | %d R$", 
                product.Name or "Unknown", 
                product.ProductId, 
                product.PriceInRobux or 0)
            productBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
            productBtn.TextScaled = true
            productBtn.Font = Enum.Font.SourceSans
            productBtn.Parent = listFrame
            
            productBtn.MouseButton1Click:Connect(function()
                idTextBox.Text = tostring(product.ProductId)
                statusLabel.Text = "Selected: " .. (product.Name or "Unknown")
                statusLabel.TextColor3 = Color3.fromRGB(100, 200, 100)
            end)
            
            yPos = yPos + 45
        end
        
        listFrame.CanvasSize = UDim2.new(0, 0, 0, yPos)
        statusLabel.Text = "Products loaded | Select one"
        statusLabel.TextColor3 = Color3.fromRGB(100, 200, 100)
    else
        statusLabel.Text = "No products found in this game"
        statusLabel.TextColor3 = Color3.fromRGB(200, 100, 100)
    end
end

-- Exploit purchase function
local function exploitPurchase()
    local productId = tonumber(idTextBox.Text)
    
    if not productId then
        statusLabel.Text = "Invalid Product ID"
        statusLabel.TextColor3 = Color3.fromRGB(200, 100, 100)
        return
    end
    
    statusLabel.Text = "Attempting exploit..."
    statusLabel.TextColor3 = Color3.fromRGB(200, 200, 100)
    
    -- Primary exploit method - SignalPromptProductPurchaseFinished
    local success1 = pcall(function()
        MarketplaceService:SignalPromptProductPurchaseFinished(
            player.UserId,
            productId,
            true
        )
    end)
    
    -- Secondary method - Fire the signal directly
    local success2 = pcall(function()
        for _, connection in pairs(getconnections(MarketplaceService.PromptProductPurchaseFinished)) do
            connection:Fire(player.UserId, productId, true)
        end
    end)
    
    -- Tertiary method - Simulate receipt processing
    local success3 = pcall(function()
        local receipt = {
            PlayerId = player.UserId,
            ProductId = productId,
            PurchaseId = HttpService:GenerateGUID(false),
            CurrencyType = Enum.CurrencyType.Robux,
            CurrencySpent = 0,
            PlaceIdWherePurchased = game.PlaceId
        }
        
        -- Try to trigger any client-side handlers
        for _, v in pairs(getgc()) do
            if type(v) == "function" then
                local info = debug.getinfo(v)
                if info.name and string.find(info.name:lower(), "receipt") then
                    pcall(v, receipt)
                end
            end
        end
    end)
    
    if success1 or success2 or success3 then
        statusLabel.Text = "Exploit sent! Check inventory"
        statusLabel.TextColor3 = Color3.fromRGB(100, 200, 100)
    else
        statusLabel.Text = "Game not vulnerable - uses ProcessReceipt"
        statusLabel.TextColor3 = Color3.fromRGB(200, 100, 100)
    end
end

-- Button connections
buyBtn.MouseButton1Click:Connect(exploitPurchase)

closeBtn.MouseButton1Click:Connect(function()
    gui:Destroy()
end)

local minimized = false
minimizeBtn.MouseButton1Click:Connect(function()
    minimized = not minimized
    if minimized then
        contentFrame.Visible = false
        mainFrame.Size = UDim2.new(0, 400, 0, 30)
        minimizeBtn.Text = "+"
    else
        contentFrame.Visible = true
        mainFrame.Size = UDim2.new(0, 400, 0, 350)
        minimizeBtn.Text = "-"
    end
end)

-- Load products on start
spawn(loadProducts)

-- Notification
game.StarterGui:SetCore("SendNotification", {
    Title = "Product Exploit Loaded",
    Text = "Only works on games with improper purchase handling",
    Duration = 5
})

Features & Information

A roblox Product Faker that sends signals to fake purchases-Educational purposes only
#Educationalist

Community Comments (1)

UnKnown_OutsUnKnown_OutsMay 9, 2026

yooo

More Scripts for Universal Scripts