Code protection is provided by the shell protection method that wraps the executable. The shell protection employs several techniques to protect the code (including algorithms and intellectual property) against tampering and reverse engineering. The techniques include code encryption, anti-debugging/anti-tracing, and anti-tampering. In addition, the KeyCheck API also provides a method to authenticate the Key and protect against DLL emulation.
· Code Encryption. The shell protection encrypts the whole native executable or managed .NET assembly to safeguard against decompilation and disassembly. To thwart access to the code, the shell protection only decrypts the needed code just before the run time in memory. After the execution, the code is immediately returned to its encrypted state.
· Anti-Debugging and Anti-Tracing. The shell protection transparently and constantly monitors the run-time to detect if the executable runs under control of a debugger. When such an event is detected, the shell protection immediately halts the operation of the executable. In addition, the shell protection itself is designed with complicated and confused logics to protect against debugging and tracing.
· Anti-Tampering. The shell protection always performs integrity check of the executable, as well as the ElecKey system files, to protect against tampering, modification, and virus infection. If it is found that the checksum of the executable or the ElecKey system files is different from the originally computed, the shell protection immediately terminates the executable.
· Key Authentication. The Key system allows you to specify and store up to 10 key-value pairs for authentication purposes. Using the KeyCheck API, you can create a series of random challenge-response authentication from the application to the Key. While the application interfaces with the Key through the provided DLL, this method can provide extra security to protect against DLL emulation.