As i stated before the ping that the server sends to the client has a 92 digit code that is encrypted the server is waiting for the client to unencrypted the message retrieve the instructions and then encrypt those instructions and the 92 digit code that they then send to the server the server then checks if the 92 digit code is the same as the one they encrypted and then sent them and if it matches up then it knows that the anti-cheat is the one that responded to the request
I havenāt developed the specific things the anti-cheat will combat i have developed the system where the client anti-cheat is secure and that is most important making sure the client anti-cheat is not being bypassed and is running along with being able to send encrypted messages to the server to kick the players who have been flagged by the anti-cheat iād assume that u can do alot more things to detect exploiters on the client then u can on the server i will do more research into that but i have came here and given my basic system to make sure that the anti-cheat is not being bypassed.
(Another thing to note that each encrypted message contains an encryption key this key is used to decrypt it every-time the system encrypts something it has a randomly generated encryption key attached to it which is the only way the text can be decrypted this ensures that each time even if its the same message being encrypted its a different encryption)
I see. Thatās a very good idea. Definitely would win in an Alice And Bob cryptography problem. May I ask you, what system is your encryption ?
I canāt tell you what methods i use to encrypt messages/tables yet because that would make this entire anti-cheat useless but i am willing to provide more information in the future regarding the encryption once its mastered.
I still havenāt lost sight of what really counts here. I am doing this because it will educate you and help you learn exactly what can be done by the exploiter. In this āAlice and Bob cryptographyā game as fancy calls it, you are simply encrypting data. Letās pretend that I am the one who is going to bypass your security. Hereās how I would do it. I would break it down to a microscopic level. Letās say your system involves sending a 1 number code from a string value in your humanoidrootpart from the client to the server to keep the client anti cheat running and if the client deletes the local script, the server kicks the client because the code is no longer sending to the server. What exactly would stop the exploiter from sending the code themselves without the anti cheat script? Itās a 1 digit code so all the exploiter has to do is take the code and fire the server with it while the local anti cheat is deleted. Isnāt that how easy this is to bypass on a microscopic level with no encryption?
This message is what gave me clues that your anti cheat isnāt as genius as I thought it was without more detailed explanations of exactly what itās doing. It would be great if you can confirm that my microscopic level bypass would actually work using the system I provided.
This quote is the system
This quote is the bypass
I think it would be easier for you to understand if i gave you access to a local copy where you can clearly see how this system happens.
The bypass doesnt work because the ping has to be responded to with the instructions in the encrypted message that the server sent the client which can only be retrieved by decrypting the message the server sent
I completely understand. So hereās the algorithm you are using if I understand correctly.
Server(String Value randomize the value to a random number letās say itās 5) -----> Client(Now my string value the value is 5)
Client(Now I must pass this string value with value 5 back to the server because if I fail to respond to the server without the instructions I will get kicked) ----> Server(Success! The clientās string value is 5 and if it wasnāt changing to the exact number the server generated, the client would have been kicked)
Correct me if Iām wrong
Yes that is what happens except all the responses are encrypted so for the client to retrieve the instructions from the server it must first decrypt the message that the server sent them to retrieve the unencrypted instructions
it then encrypts those same instructions with a different encryption key and sends it back to the server the server then unencrypts that messsage and checks if the instructions are the same ones that the server originally sent them and if they arent it kicks the client
(And to clear up any future confusion these messages are sent using remote events which would usually be unsecure but with encryption the messages they send to eachother are now secure as the messages are encrypted)
im going to provide the randomizer i use to generate the what i call āpromptsā the prompts that the client got from the server and decrypted that they then encrypt and send back to the server
local SecureSentenceModule = {}
local words = {
"alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa",
"lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigma", "tau", "upsilon",
"phi", "chi", "psi", "omega", "zenith", "quasar", "neutron", "galaxy", "binary",
"quark", "vector", "matrix", "lambda", "omega", "quantum", "flux", "nucleus", "cosmos",
"void", "stellar", "nebula", "particle", "helium", "argon", "neon", "photon", "plasma",
"electron", "proton", "neutron", "fusion", "gravity", "blackhole", "singularity", "event",
"horizon", "celestial", "supernova", "darkmatter", "antimatter", "subatomic", "frequency",
"velocity", "entropy", "dimension", "parallel", "photon", "alphaWave", "gammaRay", "betaDecay",
"ion", "oscillation", "muon", "meson", "boson", "tachyon", "lepton", "gluon", "atom", "molecule",
"crystal", "spatial", "energy", "velocity", "momentum", "galactic", "vortex", "interstellar"
}
local function randomizeCapitalization(word)
local randomizedWord = ""
for i = 1, #word do
if math.random() > 0.5 then
randomizedWord = randomizedWord .. string.upper(word:sub(i, i))
else
randomizedWord = randomizedWord .. word:sub(i, i)
end
end
return randomizedWord
end
function SecureSentenceModule.generateSecureSentence()
local sentenceLength = math.random(12, 16)
local selectedWords = {}
local sentence = ""
for i = 1, sentenceLength do
local word
repeat
word = words[math.random(#words)]
until not selectedWords[word]
selectedWords[word] = true
if math.random() > 0.7 then
word = randomizeCapitalization(word)
end
if math.random() > 0.5 then
word = word .. tostring(math.random(0, 9))
end
if math.random() > 0.5 then
word = tostring(math.random(0, 9)) .. word
end
if math.random() > 0.5 then
word = word .. string.char(math.random(33, 47))
end
sentence = sentence .. word .. " "
end
return sentence:sub(1, -2)
end
return SecureSentenceModule
Note: Iām really sorry it took like this long and this many responses to explain to everybody how it worked its just really complicated explaining how this process is because of how many moving parts are involved in it
I appreciate your feedback the reason i posted it on there is so that people could tell me about vulnerabilities i did not know about.
But number 4 would not happen because as i said the random value that its sending is encrypted before its sent to retrieve the random value the message containing the random value must first be decrypted
this answer also makes number 2 wrong as the exploiters would be unable to retrieve the expected value without first decrypting the message that has the expected value
but in complete honesty i appreciate your feedback and will take more of a look into all of your stated points.
Yes that is true that is why i will be using Lua.rh its originally an obfuscator that every paid exploit uses and has proven to be reliable in the past so for any obfuscation i will be using the market standard in roblox which is lua.rh
Perfect. That is exactly what you should do and this will be my last message because it concludes this conversation. Your approach with Lua.rh is a valid and secure way to anti cheat using a server to client to server model. My approach is also a viable option and would be the much easier route to take. I made a post not too long ago
about how I would go about it and I have so many tricks up my sleeve. I would be happy to privately show you a place file where I demonstrate my knowledge of anti cheat. I would gladly do this for you because you are an asset to this community and you took much time out of your day to help the community understand exactly how to approach encryptioned based anti cheat.
Custom encryption? So you have encryption systems available LOCALLY?
No point in doing that, I come with specific software and I decompile your system. Then I read through it and understand everything. I could also change the behavior of remotes to do custom stuff as an exploiter can basically modify raw instances
There are ways to counteract that, I didnāt read through all of it, Iām sure you did a good job. I still think itās better to have some sort of SAFE system of course, as the vast majority of people wonāt care about anti cheats, and will try to exploit blindlessly.
Donāt bother trying to elaborate things that are too complex though
I understand the deobfuscation issues but Lua.rph has never been deobfuscated unless the actual script had blind security vulnerabilities within it I also understand the concern for having encryption on the local side but itās obfuscated I know that only helps a little bit but I have plans to make the encryption third party so it is more secure I cannot guarantee that my methods are unbypassable but with this scheme it makes client sides anti cheats incredibly hard to bypass in terms of normal client sided anti cheats but I simply do not know as I havenāt had it stress tested but if any vulnerabilities come up when I allow it to be stress tested I am dedicated to finding alternatives and fixing them.
To add onto this although the encryption systems are local they are obfuscated
Addressing that other concern about the remotes It does not matter how the remote is changed by an exploiter modified or viewed because in any case that the anti cheat does not respond with the custom encryption ensuring itās the actual anti cheat replying it will disconnect the player
Decompiling the anti cheat is essentially useless as the original source code will not be displayed when decompiled because of the obfuscation I use you can view the specific obfuscator here: https://lura.ph/ it is paid with a one dollar per obfuscation or a monthly fee depending on the plan
Obfuscation is useful whenever users attempt to read the raw content of a script you wrote. I have witnessed people decompiling scripts I have written. The result were a complete reformatted script generated by the decompiler. It chose variable names automatically & reformatted the code with indents.
The fact the naming scheme used by the software does not match the names of the original variables/functions you wrote implies that you lose some context if you properly named your variables, but it also implies that obfuscation (variable name change & function reassignment) is basically useless. Same goes with uglification.
I urge you to look at the specific details of my obfuscation itās not just uglification luaralph has never been decompiled
What if you kick the exploiter in a random interval after their tampering so it takes them longer to realize what caused them to be kicked?
Great idea! Iāll also make the randomized time kicking from the server so itās not tampered with I also have a randomized ping interval so they exploiters will not be able to differentiate between ping requests and requests for kicking them.
Everything is bypassable, your anti-cheat requires a little bit more effort. And has been done many times before.