Forum: Community Center


Subject: Preventing usage of Warez

bazze opened this issue on Jan 12, 2007 · 84 posts


Talain posted Fri, 19 January 2007 at 1:56 PM

Quote - You are thinking in mathematics, but you must think in software code.
Software code is very limited to some few functions: add, substract, multiply and shift.
Division can be used in only a small amount because it is slow.
Many mathematical functions have no inverse, software code always has an inverse.
If in the forward direction you shift right, in the backward direction you shift left.

Running software code in reverse, or inverting individual instructions, will not yield a function that reverses what the original function did.  A very simple example - taking an integer and multiplying it by itself.  This is so simple it can be done with a single multiply instruction.  Inverting this - taking the square root of a number, requires many more steps, though it is still doable in a reasonable amount of time.

Practically any mathematical algorithm can be implemented on a computer.

On the x86, code can be executed from any location in memory (newer extensions add the NX bit to prevent this, in order to thwart things like buffer overflow attacks).  A program could store an encrypted function as data, and decrypt it and call the location of the decrypted code as a function pointer.  (Ironically, Vista would balk at this unless DEP was turned off for the program in question).

It would certainly be possible to design an operating system that could handle code that was stored in encrypted form on disk, and to be able to decrypt it as it loads it into memory (upon being passed the decryption key).