Detect uwp/microsoft store Roblox

Is it possible to detect if a player is running the UWP version of roblox aka the microsoft store version. This will be useful and prevent most exploits currently available since byfron slightly secures the web version.

10 Likes

There’s no way to accurately detect it. There are various ways to make a guess, and I believe the only reliable way was patched.

One way I’ve heard is to use UserInputService:GetLastInputType(), which returns an enum value indicating the type of input that was last used by the player. For example, if the player is using a keyboard or mouse, the method will return Enum.UserInputType.Keyboard or Enum.UserInputType.MouseButton1. However, if the player is using the UWP version of Roblox, the method will return Enum.UserInputType.Gamepad1, regardless of the actual input device used. This is because the UWP version of Roblox emulates a gamepad input for compatibility reasons. This may have been patched - you’ll have to test it.

Let me know if it works. There’s also another devforum post on the same subject, but no one ever gave an answer.

3 Likes

yes you can detect UWP by calling deprecated “version” function that returns their current roblox client version

print(version())
keep in mind this will work only inside localscript and exploiters could spoof version function!

for example if the client version doesnt match byfron client feel free to kick them from the game but that will lock your game and only allow people on PC to play it so you gotta whitelist other client versions like macos version and xbox version (pretty sure xbox is also UWP so by kicking out UWP you kick out mobile phones that have android and IOS and you also kick out xbox players)

2 Likes

Taken from my post from this thread: https://devforum.roblox.com/t/byfron-required-place/2544853/29

6 Likes

This isn’t the ideal solution because many injectors automatically modify the version name to match the 64-bit Byfron-enabled client. It’s probably better than nothing but won’t stop the majority of people, especially if they’re determined enough.

2 Likes

Preciate it and sorry for the late reply ill be sure to check ur method out!

2 Likes

I can’t risk kicking mobiles out so thats not a method for me to consider. Thank you tho!

Ill have a look at this it looks very useful

add check for TouchEnabled and version

TouchEnabled is located in UserInputService
game:GetService(“UserInputService”).TouchEnabled --usually true if the screen is touchable

localscript in ReplicatedFirst (so it executes faster than most auto-execute in UWP exploits)

reminder: exploiters might downgrade to old version in order to bypass this or just force __newindex on LocalPlayer and change it to Instance.new(“Player”) lol

local UWPVersions={
  "2.590.678",
  "2.592.586",
}
if table.find(UWPVersions,version()) and game:GetService(“UserInputService”).TouchEnabled == false then
        game:GetService("Players").LocalPlayer:Kick("UWP detected")
end 
2 Likes
local UWPVersions = {
    "2.590.678",
    "2.592.586",
}

game.Players.PlayerAdded:Connect(function(player)
    local success, version = pcall(function()
        return player:GetJoinData().ClientVersionString
    end)
    if success and table.find(UWPVersions, version) then
        player:Kick("UWP detected")
    end
end)

how about we try to make module that will update uwpversions?

local UWPVersions = {
    "2.590.678",
    "2.592.586",
}

return UWPVersions
-- MainScript.lua
local UWPVersions = require(script:WaitForChild("UWPVersions"))

game.Players.PlayerAdded:Connect(function(player)
    local success, version = pcall(function()
        return player:GetJoinData().ClientVersionString
    end)
    if success and table.find(UWPVersions, version) then
        player:Kick("UWP detected")
    end
end)

the UWPVersions table is stored in a separate module script called UWPVersions.lua, simply edit the UWPVersions.lua module script and add or remove versions as needed (ikr its stupid idea but if someone can come with brilliant idea then :shock:)

2 Likes

i would use your version

but i would add one more thing

getting roblox client version directly from Google Play Store (or apple store) because those versions are equal to the one from UWP microsoft store with HTTPEnabled

automaticially add the version to blacklist

win!

HOW IT WILL FIX UWP thing?

IF IT CHECKS YOUR BITS ON COMPUTER

WHAT IF 64-BIT PLAYER PLAYING THE UWP VERSION

local HttpService = game:GetService("HttpService")
local UWPVersions = require(script:WaitForChild("UWPVersions"))

-- Get the latest version of the Roblox client from the Google Play Store
local success, response = pcall(function()
    return HttpService:GetAsync("https://play.google.com/store/apps/details?id=com.roblox.client&hl=en_US&gl=US")
end)
if success then
    local version = string.match(response, "Current Version.+>([%d%.]+)<")
    if version and not table.find(UWPVersions, version) then
        table.insert(UWPVersions, version)
    end
end

game.Players.PlayerAdded:Connect(function(player)
    local success, version = pcall(function()
        return player:GetJoinData().ClientVersionString
    end)
    if success and table.find(UWPVersions, version) then
        player:Kick("UWP detected")
    end
end)
player:GetJoinData().ClientVersionString

I believe this doesnt work i tried and all i got is LaunchData in that table (tested in roblox player)

Zrzut ekranu (113)

game:GetService("Players").PlayerAdded:Connect(function(plr)
	print("printing data")
	table.foreach(plr:GetJoinData(),print)
	print(plr:GetJoinData().LaunchData,"launch data")
	print("printed successfully")
end)

idk if i remade it but here you go

local UWPVersions = {
    "2.590.678",
    "2.592.586",
}

game.Players.PlayerAdded:Connect(function(player)
    local success, version = pcall(function()
        return player:GetJoinData().ClientVersionString
    end)
    if success and table.find(UWPVersions, version) then
        player:Kick("UWP detected")
    end
end)

what its the same thing

GetJoinData doesnt have client version inside of it!

you must call Version() on localscript instead

local version = Version()
print(“Client version:”, version)
?

local HttpService = game:GetService("HttpService")
local UWPVersions = require(script:WaitForChild("UWPVersions"))

-- Get the latest version of the Roblox client from the Google Play Store
local success, response = pcall(function()
    return HttpService:GetAsync("https://play.google.com/store/apps/details?id=com.roblox.client&hl=en_US&gl=US")
end)
if success then
    local version = string.match(response, "Current Version.+>([%d%.]+)<")
    if version and not table.find(UWPVersions, version) then
        table.insert(UWPVersions, version)
    end
end

game.Players.PlayerAdded:Connect(function(player)
    local success, version = pcall(function()
        return player:GetJoinData().ClientVersionString
    end)
    if success and table.find(UWPVersions, version) then
        player:Kick("UWP detected")
    end
end)

yes and it must be localscript not serverscript :man_facepalming: