Skip to main content
gamedev.net
🔒 Locked

preventing lua hacking

Started by dtekfoo 10 replies 1.9k views
Original Post
dtekfoo
dtekfoo
I''m working on a game project, and I am considering using Lua to script it. But theres a problem. When I eventually release a competed game, I do not want just anyone easily reverse engineering my AI etc. Is there any way to prevent this, such as encrypting scripts etc?? Thanks alot! -dtekfoo
Borfaux
Borfaux
Lua allows you to compiler your scripts. If that is what you mean.

But to adding your own compression to your program and place all your scripts within it.

If someone wants to get into your scripts they will. That is life. So the more layers of security you put behind your application the easier it is to sway the rookie crackers. But those that are determined will, regardless of how extreme you want to go.

[edited by - Borfaux on May 25, 2003 2:31:52 PM]
dtekfoo
dtekfoo
heh, yea thats life.
Kool idea, il look into it. Thx!
-dtekfoo
dtekfoo
dtekfoo
Do you know how one might go about making a decoder for the lua scripts? Would you have to modify lua, or add something to the main engine?

Thx! -dtekfoo
MindCode
MindCode
I'm planning to use lua down the road. My anti-hack idea was to simply compare the client scripts with the server scripts (in on-line play) to see if they are the same. If they differ the client will auto-matically download the "proper" script. So hacked files will be replaced as they should be.

Script files are so small it would take no time at all the transfer the memory. So why not eh?

As for single player hacking... who cares? They're not hurting anyone. Let them fuck with the engine as much as they want. They might come up with some fun stuff.

[edited by - MindCode on May 26, 2003 1:20:05 PM]
That's just my understanding; I could be wrong.
MindCode
MindCode
You couldn''t do that while in game play.

Lets say you browse around, find a game and login to it. The server that it''s under checks the scripts that it going to load. You can''t give it different files than you intend to use, and you can''t switch the files afterword because they will already have been loaded. Even if you copy-paste the modified files after they''re replaced it won''t do you any good because the engine is already using the real ones.

The only way to really hack anything is to fuck with the binaries themselves. If anyone attempts that, then I say "good luck".
That's just my understanding; I could be wrong.
Dobbs
Dobbs
In multiplayer the scripts shouldn''t be executed on the client at all if they''re AI related - you just can''t trust the client. In single player I agree with Mindcode, who cares? If someone wants to modify the AI more power to them. Maybe they''ll write better AI than you did.
dtekfoo
dtekfoo
Heh, true dat. it may not be worth the trouble to encrypt it. As for keeping it server side, I''m trying to keep from spending too much money on server banks. For this reason, I think i''ll just make it client-client, and have the host act as a "server". This way, the only server I need is to connect peeps to their games.

This once again brings up the problem of scripts, since the host will be running all AIs. But as you guys have said so well, who cares? Heck, I could even write a mod so that people could program + compile AI scripts and pit them against each other. Thx 4 the wisdom guys.
dtekfoo
dtekfoo
Could you guys help me out wit one more thing? I''ve been thinking about what I should script, and what I should hardcode.

Guess I forgot to tell you guys, my game is a 3D rts much like starcraft (cept 3D). Besides scripting my AI, I am going to script each unit. I am considering having a different script for each distinct unit, and loading an instance every time a new unit is created. Is this alright? Hopefully it won''t put too much strain on the system, wit maybe 100 scripts running at once. If this is going to be a problem, what is my best alternative?

Also, is there anything else that I should script? (ie weapons, user interface etc?)
Thx a bunch!
-dtekfoo
MindCode
MindCode
I wouldn''t load a new instance for each unit. Load one and have all instances of that unit share it. You will save memory that way. Unless there is some reason that the scripts need be unique to each unit (which I wouldn''t see why), then I think it would be the best way to go.
That's just my understanding; I could be wrong.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.