Copy protection for Windows game?

Anyone investigated this and have any suggestions? I searched the past threads and found some info on copy protection on a Mac, but what about Windows? Do any of those “exe wrapper” protection tools work with a Unity Windows stand-alone?

As exe wrappers only “protect” the executable, (which is the same for all published games) and not the data, simply applying one of those protection mechanisms will not work out of the box on Unity games. A cracker will just have to replace the executable with a non-protected one from another game.

Didn’t know that. Darn, scratch that idea for a simple / inexpensive solution… :frowning:

I found a couple threads here on copy protection for a mac, but nothing for Windows. How would someone do it in script for Windows? Won’t the Unity compiler refuse to compile it (since it will use Windows only code and will probably need to access a windows .dll)?

Is Unity games limited to only free or non-copy protected games when run under windows? If so, ouch! :shock:

Which solutions are you looking at using?

Using a C++ plugin, and a bit of bit-twiddling Mono code, you should be able to implement a decent scheme for yourself.

d.

I was looking for a solution for someone with limited coding skills. Preferably something that could be implimented without any code or through Javascript.

In an old post by Joachim, he mentioned that a basic copy protection scheme could be implimented using any of the scripting languages, so I started to investigate this.

I wonder if this would be possible in Javascript: Assume your game will not have a “demo period” or any “cripple” or “nag” features. To keep it simple, the users will just buy the software and then register it over the internet. Now, the first time the user launches the game it prompts him to enter his name, then it checks for his HD’s serial #, and it gives him an encrypted registration number (using one of the encrypting Javascripts that are freely available). They email their name and this registration number to the game company. This information is then put through another encryption script using the name and registration numbers as keys. The unlocking “key” is then emailed to the user who saves it in the game’s directory. The next time the game is run, it looks for this file, runs the decrypting script, if the name, HD serial #, and registration number result in the same key as is in the file, the game will run. Otherwise it will go back to the registration window.

What do you think? I’m no programmer, and am certainly not any kind of hacker, so this might be very easy to defeat, I don’t know…

Sounds like a reasonable scheme. I wouldn’t spend too much time on copy protection until everything else is done… no reason to protect your work unless there’s something to protect, so to speak.

d.

Thanks. The only other problem (besides that I’ve never done this before) is that I won’t be able to test it within the Unity editor. I’ll have to build stand-alones, install it on a Windows machine and then test it.

Has anyone thought of an easier way to provide “decent” copy protection in Unity?

This scheme sounds like it’ll be similar on Mac and Windows. And again, I don’t think you should worry too much about it until you’re ready with a valuable product.

d.

http://siliconrealms.com/index.shtml

You tried this with Unity and it works? They don’t have a demo, but from what I can tell it just protects the .exe like the other apps I tried.

I haven’t tried it with unity but it got some other stuff of mine which got wrapped with it. It’s quite common in the win world.

As for protecting media data there are different solutions i have used so far like using xtras like vList (AES encoded) or directors own shockwave format, protected archives (password), your own binary solution, … but what’s so bad about just protecting the executable in this case? As freyr said you can crack the exe but hey this has to be done first and users must have access to the cracked exe.

You for sure won’t appear on sites like gamecopyworld if you’re not using some sort of annoying cd-protection.

I agree with David and would say a exe protection is fine but i wouldn’t worry about that every single bit is protected.

One question: Do you publish it on your own? Normally the publisher is responsible for these kind of things.

Thanks Taumel, I think you’re missing the point (or maybe I am :wink:): You can defeat a .exe protector by copying a .exe from another Unity application. That would allow anyone that knows how to use google to run your game on an “unauthorized” machine.

As for encrypting the data so it can’t be torn apart and used for something else: I think David said that they use some fairly robust encryption already (I could be wrong about this, but I think I remember reading this in another thread).

I found an application that will pack all your files into a single .exe (email me if you can’t find it through Google) and it worked on the Unity standalone I tested, but it doesn’t include copy protection. I tried using one of the .exe wrappers with the resulting packed .exe and it didn’t work. Just seems to be a lot of work, and if you’re releasing on both Mac and PC, you’ll have to do it twice.

This seems to be a gaping hole in the abilities of all game engines. I haven’t found any that offer a plugin that includes copy protection. This is a even more difficult situation when the game engine produces more than a single .exe (as Unity and several other engines do).

But you can forget about all these kind of things as the best copy protection a human mind (i guess it was a humans one) ever came up where codewheels - hah! :O)

http://www.djgallagher.com/games/pc/monkeyisland1/dial_a_pirate.php

Ha! Thanks for that!

If Unity had a single-click protection method, then it’s likely that if/when one of the games protected in this way are cracked, they are all compromised. It seems better to me that resources aren’t going into what is basically a hopeless fight. Guaranteeing copy protection means endless updates to stay ahead of the people who want to break it.

I don’t have an easy answer myself for both Windows and the Macintosh (Unity itself uses PACE, which is middleware), but since the ability is there, why worry until you have to?

I guess you and David never heard the Boy Scout’s motto “be prepared” :lol:

I agree that attempting to prevent -all- copy theft is a futile battle, but that doesn’t mean some sort of copy protection shouldn’t be used anyways. Even if it’s to put the individual’s name and serial number on every copy you sell.

Creating a game is so much more fun than figuring out how to copy protect it, and I think most indy’s design games because a. it’s fun and b. to make money. I think it should be an integral part of a game engine’s plan to include (or offer) some sort of copy protection scheme. Just MHO…

I swear I posted before, but what about a simple name-based key?

The deterrent is the display of the buyer’s name on the licensed game’s launch screen.

Only a casual deterrent, but also less intrusive than hardware-keyed protection. And simple to implement cross-platform. The purchaser enters their name along with a key code you derived from that name and sent them. Both get stored in a text file, and without that file–or if name and code don’t match–you’re in Demo mode.

I know I got the idea from somewhere but couldn’t remember who posted it. Not sure I like the external text file though, just too easy to change. I was thinking about building it into individual copies of the game. This would become pretty awkward if you start selling more than a couple copies a day, and like your idea, it relies more on a person’s sense of guilt more than anything else.

Back in the “old days” we hid a “secret” file in a hidden folder during the install process. This is too easy to defeat and I bet many virus scanning apps would cough on it. I had some other ideas, but all of them could be easily defeated with a simple cut and paste.

I have found a temporary, albeit ugly, solution using a number of off the shelf tools. It works, doesn’t seem to effect the Unity player, but the total cost is about the same as buying a copy of Unity Indy :frowning: . I’m also doing my homework on encryption with Javascript and accessing hardware info with C#. I believe the ultimate solution lies here, but it will be a while before I understand enough to implement it.

Yeah, it’s just guilt-based… but I’m hoping that helps with casual piracy, and I wonder whether NON-casual piracy can ever even be dented.

Changing the file wouldn’t be easy though: if you put in your own name or something, it would no longer match the key and wouldn’t work. (The creation and matching of the key would be done by some scrambling algorithm in Unity, and a matching algorithm in a key generator you’d use to send keys to purchasers. Make the algorithm complex enough, and it won’t be broken casually.)

Simple: instead of making the reg. code display the NAME of the buyer, his serial is his VISA card number. Then its no longer guilt, but paranoia-based instead.