quote:
Original post by walkingcarcass
not all anti-crack techniques are performance-inhibiting: checks are only taken under certain conditions, these conditions are quick to test and the low-performance checks (cd examination etc) can be done less often.
as for stability, this *really* should be a no-compromise priority anyway.
Agreed. I think I might post the email conversation I had with this guy, if I get his permission.
The concept that security should be an underlying ''mantra'' rather than an ''add-in component'' is important.
If a game is made totally independent of it''s security component - and, with a software factory, that''s the case; all components are meant to be largely independent of each other - then cracking or removing the component doesn''t affect the rest of the game in any significant way.
However, if you have security throughout the game, then they need to crack the entire game; cracking one procedure or check somewhere might get them past one bit, but if the rest of the security system is either depending on or working with that component, then they''ll have to crack the rest of the security system too.
I was discussing a bit of this with glassJAw last night, and we figured out some stuff.
Firstly, you can checksum game data files and dlls to make sure they haven''t been tampered with. The problem is that if a hacker does tamper with them, all they have to do is update the checksum... so here''s what we figured out.
You could create a resource in your executable of, say, 1024 bytes of garbage. Then you store the checksum (or serial number, whatever) in there. Because you move it around each time - that is, each time the exe loads it reads in the resource, gets the checksum out of it and then re-encodes it in a different way - it becomes very difficult to crack. If you then have that number being checked throughout the game - using a highly-optimized checking function which you inline, so they can''t just crack one instance of the function - then they can''t mess with the number loading/saving code; the best they can do is mess with the number itself.
So, my weird funky encoding: you treat the 1024 bytes as a ''rectangular array,'' with row+column sizes that you specify yourself for each app. You then pick numbers for ''opcodes'' - ''up,'' ''down,'' ''left,'' and ''right,'' along with ''destination.'' Then, it follow a lot like Befunge; starting at a fixed point, you follow the opcodes until you arrive ate the ''destination'' code, which tells you how many bytes to move in the current direction to get to the number. All unused bytes are filled with garbage (containing a relatively high proportion of opcode values).
So it means that even if the cracker figures out which the ''destination'' opcode is, they still would have to trace the whole thing from the beginning to find out which direction to move from there.
It''s not uncrackable - a cracker could write a program to read the resource, specifying width and opcode values, to get it to trace to the number; but still, that''s pretty damned secure.
Superpig
- saving pigs from untimely fates, and when he''s not doing that, runs
The Binary Refinery.