Game Development Community

Is your asset worth it?

by Neo Binedell · 04/03/2006 (11:58 am) · 9 comments

I've been seeing a lot of big talk in the forums about the fact that asset
protection is futile, etc, as crackers can just do this or that. Usually followed
by some example that the poster probably thinks makes him look like a
l33t cracker.

Look everyone knows its possible to steal assets by ripping from mem,
cracking, etc. What you should be concerned with is what is probable.

You have to choose a level of protection that falls on the appropriate point
on the curve of diminishing returns.

For example one of the simplest things you can do is add a few bytes at the
beginning of image files and just gunk those bytes before reading the stream
with the image libs. Most graphics apps will look at the header stored at the
beginning of a file and if the signature does not match a known header it will
think it is corrupt.

This is sufficient for a large part of your audience as they will try and open the
file and fail and not bother to go further.

Other apps however will scan the whole file looking for a known header and thus the
start of the stream, so if youre concerned about that you add simple encryption
like XOR or what not.

As soon as you get to that level youre moving into an higher level of expertise
required to view the assets, i.e. dev guys. They will have to make a commitment
to crack that asset (which is not THAT much work) but you have to weigh that
against the gains they perceive from having to actually do it.

Finding an unencrypted password in the exe is not that hard, you just dump the string
table and look for it. So if thats an issue for you then you mask or build the password,
(or a ton of other solutions).

Even having the password is not enough as you would have to know which algo was
used, what kind of salting and with what values, etc, then implement that either by using
libraries available or writing your own.

So the law of diminishing returns apply both to you the dev (as you have to do more
and more work to thwart a smaller and smaller probability set) and the cracker/thief
who will have to do the same but based on his perception of value.

For you it is your assets and for a limited product range and so more valuable where
as for the cracker it is a miniscule percentage of assets out there and so of lower value.
Obviously you have to weight this with things like popularity, etc but what asset could
be that valuable; surely you're not storing cc numbers? right?

So if you are going to encrypt at least do it with something like twofish or aes with
custom stream code and salting, etc instead of standard zip as those could just be dumped
out again with publically available zip readers. Encrypt per file and THEN add to zip file system, so
when reading you would stream the asset from the archive, unencrypting as you read it.


~neo

#1
04/03/2006 (1:10 pm)
If your game is OpenGL.... no encryption in the world is going to protect your art assets from someone who wants to get them.

glintercept.nutty.org/
ogle.eyebeamresearch.org/

Hell... Tribes used a custom graphics format... and it didn't stop us from writing extractors and converters to get to the images (I spent well over 2 months with a Hex Editor reverse engineering the .VOL format, the .PBMP format, etc.)
#2
04/03/2006 (1:18 pm)
We're talking about stored assets and your comment just proved my points above.

Any dev guy worth his salt should be able to lift assets from in memory at runtime,
OGL or no OGL, so I take it you didn't get what i was saying at all...

~neo
#3
04/03/2006 (1:26 pm)
Yeah, its kinda simple to grab hold of assets (if youre a programmer) and its almost as easy if you KNOW a programmer.

Frankly, just putting assets into a zipfile which has a password is about as cagey as I would care to get.
#4
04/03/2006 (1:30 pm)
Thats my view pretty much as well, unless of course you want to lock levels that require a serial etc...

~neo
#5
04/03/2006 (2:06 pm)
It's a red herring. Put enough effort to keep honest people honest and if you need real security, go with an actually secure approach (like requiring an account to play multiplayer a la steam, or at least not giving people the bits till they pay).

Proprietary hardware platforms are good for this sort of thing, too.
#6
04/03/2006 (3:19 pm)
I think the point would be more to just deter the majority of people from taking them... as far as most indies go.

i persionaly would like a way to deter the avrage users... am i going to make a supper secure living ...thingy to deter the L3et? nope...
#7
04/03/2006 (4:11 pm)
prior to picking up the t2d.net project, my primary interst was in program protection (obfuscation and tamper proofing).

It is a very interesting dillema, and generally speaking, you shouldnt bother trying a 'roll your own' method. spend the $300 for a nice anti-hacking tool, and call that good enough. if you are working on an online game (where you charge money or it is popular) then additional steps should be taken so the 1% hackers dont spoil the game for everyone else... but otherwise, dont worry about it right. It would actually be AWESOME for you if someone steals your stuff.. cuz then you can have a bling-bling lawsuit on your hands.
#8
04/04/2006 (3:43 pm)
I work with protection systems (mostly hardware based where it should be!) every day of my working life, and I can tell you, the harder you make it the more of a challenge it becomes to the "1337 haxxors" of this world.

Do enough to stop casual dabblers and no more, IMHO it is wasted development time that could be put to better use.

* Edited for my abysmal spelling! *
#9
05/25/2006 (11:36 am)
I've put a link to this post at the start of my encryption resource on TDN. This is a good read for every potential user of the resource :)