Cbro Hack
Cbro Hack
util.allocateMemory = allocateMemory;
util.startThread = executeCode;
util.freeMemory = deAlloc;
openProcess("RobloxPlayerBeta.exe")
openProcess("Windows10Universal.exe")
--pause()
util.intToBytes = function(val)
if val == nil then
error'Cannot convert nil value to byte table'
end
local t = { val & 0xFF }
for i = 1,7 do
table.insert(t, (val >> (8 * i)) & 0xFF)
end
return t
end
util.stringToBytes = function(str)
local result = {}
for i = 1, #str do
table.insert(result, string.byte(str, i))
end
return result
end
local rapi = {}
rapi.toInstance = function(address)
return setmetatable({}, {
__index = function(self, name)
if name == "self" then
return address
elseif name == "Name" then
local ptr = readQword(self.self + nameOffset)
if ptr then
local fl = readQword(ptr + 0x18)
if fl == 0x1F then
ptr = readQword(ptr)
end
if readString(readQword(ptr)) then
return readString(readQword(ptr))
end
return readString(ptr)
else
return "???"
end
elseif name == "JobId" then
if self.self == dataModel then
return readString(readQword(dataModel + jobIdOffset))
end
return self:findFirstChild(name)
elseif name == "className" or name == "ClassName" then
local ptr = readQword(self.self + 0x18) or 0
ptr = readQword(ptr + 0x8)
if ptr then
local fl = readQword(ptr + 0x18)
if fl == 0x1F then
ptr = readQword(ptr)
end
return readString(ptr)
else
return "???"
end
elseif name == "Parent" then
return rapi.toInstance(readQword(self.self + parentOffset))
elseif name == "getChildren" or name == "GetChildren" then
return function(self)
local instances = {}
local ptr = readQword(self.self + childrenOffset)
if ptr then
local childrenStart = readQword(ptr + 0)
local childrenEnd = readQword(ptr + 8)
local at = childrenStart
if not at or not childrenEnd then
return instances
end
while at < childrenEnd do
local child = readQword(at)
table.insert(instances,
rapi.toInstance(child))
at = at + 16
end
end
return instances
end
elseif name == "findFirstChild" or name == "FindFirstChild" then
return function(self, name)
for _, v in pairs(self:getChildren()) do
if v.Name == name then
return v
end
end
return nil
end
elseif name == "findFirstClass" or name == "FindFirstClass" or
name == "FindFirstChildOfClass" then
return function(self, name)
for _, v in pairs(self:getChildren()) do
if v.className == name then
return v
end
end
return nil
end
elseif name == "setParent" or name == "SetParent" then
return function(self, other)
writeQword(newChildren + 0x8, e)
writeQword(newChildren + 0x10, e)
print("Set parent")
end
elseif name == "value" or name == "Value" then
if self.className == "StringValue" then
return readString(self.self + 0xC0)
elseif self.className == "BoolValue" then
return readByte(self.self + 0xC0) == 1
elseif self.className == "IntValue" then
return readInteger(self.self + 0xC0)
elseif self.className == "NumberValue" then
return readDouble(self.self + 0xC0)
elseif self.className == "ObjectValue" then
return rapi.toInstance(readQword(self.self + 0xC0))
elseif self.className == "Vector3Value" then
local x = readFloat(self.self + 0xC0)
local y = readFloat(self.self + 0xC4)
local z = readFloat(self.self + 0xC8)
return {
X = x,
Y = y,
Z = z
}
else
print("Value read failed, indexing Instance instead")
return self:findFirstChild(name)
end
elseif name == "Disabled" then
if self.className == "LocalScript" then
return readByte(self.self + 0x1EC) == 1
end
return self:findFirstChild(name)
elseif name == "Enabled" then
if self.className == "LocalScript" then
return readByte(self.self + 0x1EC) == 0
end
return self:findFirstChild(name)
elseif name == "DisplayName" then
if self.className == "Humanoid" then
return readString(self.self + 728)
end
return self:findFirstChild(name)
elseif name == "LocalPlayer" or name == "LocalPlayer" then
return rapi.toInstance(readQword(players.self +
LocalPlayerOffset))
elseif name == "GetService" or name == "getService" then
return function(self, name)
return self:findFirstChild(name)
end
elseif name == "Locked" then
return readByte(self.self + 0x1BA) == 1
else
return self:findFirstChild(name)
end
end,
__newindex = function(self, name, value)
if name == "value" or name == "Value" then
if self.className == "StringValue" then
writeString(self.self + 0xC0, value)
elseif self.className == "BoolValue" then
writeByte(self.self + 0xC0, value and 1 or 0)
elseif self.className == "IntValue" then
writeInteger(self.self + 0xC0, value)
elseif self.className == "NumberValue" then
writeDouble(self.self + 0xC0, value)
elseif self.className == "ObjectValue" then
writeQword(self.self + 0xC0, value.self)
elseif self.className == "Vector3Value" then
writeFloat(self.self + 0xC0, value.X)
writeFloat(self.self + 0xC4, value.Y)
writeFloat(self.self + 0xC8, value.Z)
else
print("Value write failed, indexing Instance
instead")
self:findFirstChild(name)
end
elseif name == "Disabled" then
if self.className == "LocalScript" then
writeByte(self.self + 0x1EC, value and 1 or 0)
end
self:findFirstChild(name)
elseif name == "Enabled" then
if self.className == "LocalScript" then
writeByte(self.self + 0x1EC, value and 0 or 1)
end
elseif name == "DisplayName" then
if self.className == "Humanoid" then
writeString(self.self + 728, value)
end
elseif name == "Locked" then
writeByte(self.self + 0x1BA, value and 1 or 0)
elseif name == "Parent" then
self:setParent(value)
elseif name == "Name" then
local ptr = readQword(self.self + nameOffset)
if ptr then
local fl = readQword(ptr + 0x18)
if fl == 0x1F then
ptr = readQword(ptr)
end
if readString(readQword(ptr)) then
writeString(readQword(ptr), value)
else
writeString(ptr, value)
end
end
end
end,
__metatable = "The metatable is locked",
__tostring = function(self)
return string.format("Instance: %s", self.Name)
end
})
end
local pid;
pid = getOpenedProcessID()
players = rapi.toInstance(players)
game = rapi.toInstance(dataModel)
for i = 0x10,0x600,4 do
local ptr = readQword(players.self + i)
if readQword(ptr + parentOffset) == players.self then
LocalPlayerOffset = i
break
end
end
print(string.format("Players->LocalPlayer offset: %02X", LocalPlayerOffset))
for i = 1,8 do
aobs = aobs .. string.format("%02X", bres[i])
end
if res then
valid = false
for i = 1,#res do
result = res[i]
--print(string.format("Result: %08X", result))
injectScript = rapi.toInstance(injectScript)
print(string.format("Inject Script: %08X", injectScript.self))
return function()
writeBytes(targetScript.self + 0x100, oldBytes)
print("Bytecode restored successfully!")
end
end
--[[
local locals = game:findFirstChild("Script Context").StarterScript
local char = game.Workspace:FindFirstChild(LocalPlayer.Name)
for i = 1, #game:findFirstChild("Script Context"):GetChildren() do
print(game:findFirstChild("Script Context"):GetChildren()[i].Name)
if game:findFirstChild("Script Context"):GetChildren()[i].Name ~=
"CoreScripts/AvatarMood" and game:findFirstChild("Script Context"):GetChildren()
[i].Name ~= "CoreScripts/ChatEmoteUsage" then
locals = game:findFirstChild("Script Context"):GetChildren()[i]
end
end
--]]
--[[
print("Got PlayerScripts:", PlayerScripts.self)
-- Counter Blox
if game:GetService("StarterGui"):FindFirstChild("CBScoreboard") then
print(("PlayerGui %s [%s]"):format(PlayerGui.Name, PlayerGui.self))
-- Tool
if Backpack:FindFirstClass("Tool") then
local RestoreBytecode =
InjectBytecode(Backpack:FindFirstClass("Tool"):FindFirstClass("LocalScript"))
createNativeThread(function()
repeat sleep(200) until PlayerGui:FindFirstChild("RC1")
print("RC1 Loaded!")
RestoreBytecode()
end)
end
end
inject()
start()
Video: https://www.youtube.com/watch?v=0vCryeUDC00