Any way to build a non-disassemblable executable?

General discussion about LÖVE, Lua, game development, puns, and unicorns.
tomshreds
Party member
Posts: 101
Joined: Thu Oct 18, 2012 8:49 pm

Any way to build a non-disassemblable executable?

Post by tomshreds »

Hi,

Let me explain myself. I will release in the next months a game commercially. I need a way to encrypt or to simply make an executable that won't be disassemblable.

I mean, when you simply "copy /b love.exe+game.love game.exe" the resulted binary can be easily disassembled into pieces and one of them is a zip compressed ensemble of lua files, which is the game source code.

I want a way to make such actions impossible. Any known ways of doing so?

I'd also need the solution to be possible on all platforms (Windows, OS X and Linux).

Thanks very much and have a nice day!
scutheotaku
Party member
Posts: 235
Joined: Sat Dec 15, 2012 6:54 am

Re: Any way to build a non-disassemblable executable?

Post by scutheotaku »

tomshreds wrote:Hi,

Let me explain myself. I will release in the next months a game commercially. I need a way to encrypt or to simply make an executable that won't be disassemblable.

I mean, when you simply "copy /b love.exe+game.love game.exe" the resulted binary can be easily disassembled into pieces and one of them is a zip compressed ensemble of lua files, which is the game source code.

I want a way to make such actions impossible. Any known ways of doing so?

I'd also need the solution to be possible on all platforms (Windows, OS X and Linux).

Thanks very much and have a nice day!
AFAIK this is not possible, or if it is then it won't be easy. If open source is an issue for you or your project, I would recommend not using LOVE, or Lua in general.

Here are some more threads on the topic:
viewtopic.php?f=4&t=9084
viewtopic.php?f=3&t=2646
viewtopic.php?f=4&t=6989
User avatar
Jasoco
Inner party member
Posts: 3725
Joined: Mon Jun 22, 2009 9:35 am
Location: Pennsylvania, USA
Contact:

Re: Any way to build a non-disassemblable executable?

Post by Jasoco »

Nothing is unbreakable. If someone really wants to disassemble or decompile or crack something bad enough, they will find a way. No matter how hard you make it. You can obfuscate. You can luac. You can hide things away. But if someone wants to see your source, they will one way or another.
User avatar
Inny
Party member
Posts: 652
Joined: Fri Jan 30, 2009 3:41 am
Location: New York

Re: Any way to build a non-disassemblable executable?

Post by Inny »

So here's the deal: Love loads data from the end of the exe file, because Zip files don't have a header, they have a footer. One file can double as two, and that's what gets exploited. So anyone can rename your exe to a zip and get access to the contents. So, all of the artwork is up for grabs. As for the code, you have the program luac, which can stamp out lua source files as a compiled lua binaries. That will mostly help, but anyone can theoretically use a disassembler on that to get back a reasonably similar source file. Java and regular C aren't immune to this either, just for the record. Also, the compiled binary files are version locked to Lua 5.1 and Love 0.8.

So, tl;dr:
1. Art can't be protected, people can unzip the png and jpg files.
2. Source code can be compiled, but are locked to Love 0.8 and won't work in future versions of Love.
tomshreds
Party member
Posts: 101
Joined: Thu Oct 18, 2012 8:49 pm

Re: Any way to build a non-disassemblable executable?

Post by tomshreds »

Inny wrote:So here's the deal: Love loads data from the end of the exe file, because Zip files don't have a header, they have a footer. One file can double as two, and that's what gets exploited. So anyone can rename your exe to a zip and get access to the contents. So, all of the artwork is up for grabs. As for the code, you have the program luac, which can stamp out lua source files as a compiled lua binaries. That will mostly help, but anyone can theoretically use a disassembler on that to get back a reasonably similar source file. Java and regular C aren't immune to this either, just for the record. Also, the compiled binary files are version locked to Lua 5.1 and Love 0.8.

So, tl;dr:
1. Art can't be protected, people can unzip the png and jpg files.
2. Source code can be compiled, but are locked to Love 0.8 and won't work in future versions of Love.
You are so much right. I was focusing on protecting the code, but the important part to protect is all the game's art. I've got many spritesheets and animation sheets that I need protected.

I wonder if I could code some kind of C++ process wrapper that would keep user away from the zip archive... Argh and I need it to work for OS X too.

That's a shame, I don't really care if people look at the code. But the arts must stay private...

Woah, that's going to be a fun ride. I really don't want to get my characters stolen by others. Maybe I'm overthinking this.

CaveStory must have found a way? I mean it's the only other commercial love-based title there is right?
EDIT: I downloaded the original (japanese) and it's not even a love game? Already had Cave Story++ but it uses C++/SDL and not love. Where's the love version?

EDIT2: I read on https://love2d.org/wiki/LuaC that LuaC isn't recommended. Then is there any way of securing the code?

Anyways, I just thought about it and almost any games have ressources accessible by the public. So I guess this isn't the end of the world... If I see somebody using my stuff I'll just tell them...


Thanks
User avatar
Robin
The Omniscient
Posts: 6506
Joined: Fri Feb 20, 2009 4:29 pm
Location: The Netherlands
Contact:

Re: Any way to build a non-disassemblable executable?

Post by Robin »

tomshreds wrote:I've got many spritesheets and animation sheets that I need protected.
Nope.
tomshreds wrote:I wonder if I could code some kind of C++ process wrapper that would keep user away from the zip archive... Argh and I need it to work for OS X too.
Nope.
tomshreds wrote:But the arts must stay private...
Nope.

You can't "protect" your art with any technical measure. Not if you want anyone to actually play your game. Because to play the game, the art has to get "unprotected" so it can be drawn on the screen. This has nothing to do with Lua, C++, OS X, or LÖVE. It's inevitable.
tomshreds wrote:Maybe I'm overthinking this.
Let me ask you a question: why would it be bad if your art gets "stolen"? What would they do with it? And why would it be bad for you?
tomshreds wrote:Then is there any way of securing the code?
Same "Nope. Nope. Nope." story.
tomshreds wrote:Anyways, I just thought about it and almost any games have ressources accessible by the public. So I guess this isn't the end of the world... If I see somebody using my stuff I'll just tell them...
That's a good and mature way to handle this. I wish I read this far before replying. Ah, well.
Help us help you: attach a .love.
scutheotaku
Party member
Posts: 235
Joined: Sat Dec 15, 2012 6:54 am

Re: Any way to build a non-disassemblable executable?

Post by scutheotaku »

Generally, the art of a game is something that is protected the least. Many professional games leave it out there, easy to get there. A lot of games have the art in some sort of compressed file (e.g. the WADs and Paks of the Doom and Quake series), but the developers often (usually?) provide the tools to get to them. And even if the art is protected in some way, it's usually the easiest thing to "steal" in some usable form.

Just make a good game: a game so good that people would rather player your version than a copy/clone. Sure, there's always the chance that someone might steal your code for their own game, but...who cares? Or do you plan on selling what you make?

As far as Cave Story, I'm pretty sure that it wasn't made with LOVE. It was released in 2004 (which I think predates LOVE?), and according to the developer it was in development for about 5 years before release, so he started making it some time in 1999 (which definitely predates LOVE). But yeah, it wasn't made with LOVE.

There could be a fan remake of Cave Story or something made with LOVE, but a search of these forums doesn't bring anything up.
corb
Prole
Posts: 3
Joined: Sat Feb 16, 2013 10:41 am

Re: Any way to build a non-disassemblable executable?

Post by corb »

And this is the reason why there isn't a single commercial game released with love2d to date and never will be. :3
It's a good tool for prototyping, learning lua and a general process of making a game though so take it for what it is.

I would never waste my time and the time of a coder making a product we're going to sell if there isn't even a basic way of protecting our work, piracy is bad enough but if your source and asset files are open to all too ... :joker: . Yeah it's true most big companies leave their assets comparably unguarded but at the same time they have big lawyers too, so they don't have to worry much about that. For indie devs though, security is an issue.

You get what you pay for. Free engines produce free games.
User avatar
slime
Solid Snayke
Posts: 3144
Joined: Mon Aug 23, 2010 6:45 am
Location: Nova Scotia, Canada
Contact:

Re: Any way to build a non-disassemblable executable?

Post by slime »

corb wrote:And this is the reason why there isn't a single commercial game released with love2d to date and never will be. :3
There are multiple commercial games released which use LÖVE, and there will be many more in the future. I would probably not waste my time working with someone who valued "code protection" over other things. For indie developers, security is not a very big issue.
corb wrote:I would never waste my time and the time of a coder making a product we're going to sell if there isn't even a basic way of protecting our work, piracy is bad enough but if your source and asset files are open to all too ... :joker: . Yeah it's true most big companies leave their assets comparably unguarded but at the same time they have big lawyers too, so they don't have to worry much about that. For indie devs though, security is an issue.

You get what you pay for. Free engines produce free games.
Do you know what other independent game has all of its non-engine code (hundreds of thousands of lines of Lua) completely visible and editable? Natural Selection 2. It is a critically acclaimed game available on Steam, and has been very successful sales-wise.
The openly viewable code only contributed to its success: players can submit their own code fixes and changes to the developers. Many people have done this, and the game is better for it. It also allowed the game to be quite easily moddable when combined with Steam Workshop.

A couple other commercial independent games whose source code and assets have been viewed and edited by its players: Minecraft (code via JVM decompilers), and Terraria (code via C#/.NET decompilers). Interesting how neither Minecraft nor Terraria used a commercial engine.

Commercial game engines such as Unity3D (nearly all script code written for Unity is easily decompilable, by the way) and the Unreal Engine are not widely used because of their perceived code security, they're widely used because they have full-time employees making the engines as good as possible and marketing it to every game developer, as their day job.
Last edited by slime on Sat Feb 16, 2013 11:56 am, edited 1 time in total.
mongrol
Prole
Posts: 33
Joined: Fri Nov 30, 2012 1:01 am

Re: Any way to build a non-disassemblable executable?

Post by mongrol »

I'd like to ask why you want to prevent disassembly anyway? Do you believe that you will lose some monitary value if you don't do this? If so, please explain how.
Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests