|
CodeMorph Code Obfuscation Principle |
|
| |
Code Obfuscation Principle
Programs written in programming languages such as C++ or Pascal are compiled into the machine language of a
given computer before they become a program. Programmers write "source code", computers run "machine code" so
this conversion is necessary. There is (generally) a one way transformation from source code to machine code.
Machine code is not encrypted and is easy for anyone to see, but the format is so tedious for humans that
reverse-engineering efforts are slow and painful.
So disassembler appears. Disassembler can translate machine language back into assembly language, performing the
inverse operation to that of an assembler, and no matter in which language the application was originally written.
The common disassemblers, such as IDA Pro Disassembler,
OllyDbg and WinDasm are the great menace for technical protection and intellectual property protection.
|
|
CodeMorph code obfuscator can help you face these disassemblers. It is an excellent solution to protect
software applications from reverse engineering, analysis, tracing and modifications. CodeMorph
turns binary code into an undecipherable mess that is not similar to normal compiled code, and completely
hides execution logic of the protected code.
CodeMorph's code morphing technology protects the code on the CPU command level. It breaks up the
protected code into several processor commands or small command snippets and replace them by others, while
maintaining the same end result.
|
There is no concept of code decryption with this approach of CodeMorph. Protected code are always in the
executable state, and they are executed as a transformed code. The original code is completely lost and
code restoration is an impossible task.
Source Code Obfuscation Example
writeln('CodeMorph'); // Object Pascal (Delphi) testing code
After compilation:
mov eax, [$ 004092ec]
mov edx, $00408db4
call @WriteOLString
call @WriteLn
call @_IOTest
After the junk code inserting and compilation, the code becomes undecipherable mess:
db 3
add al, $30
xlat
call +$000025b2
jmp +$00000eec
call +$00000941
or al, $4a
scasd
call -$304ffbe9
rol eax, $14
mov edi, [ebx]
jmp +$00001738
mov ebx, eax
shr ebx, $03
push ebx
jmp +$0001b5e
call -$000001eb
jmp +$00003203
jmp +$00005df8
call +$00000910
adc dh, ah
fmul st(7)
adc [eax], al
les eax, [ecx+$0118bfc0]
stosb
The weak point of junk code generator is that it significantly increases the size and affects the speed of a
program. But protecting an application author usually doesn't need to transform its entire code. It is enough to
protect only critical parts of your code, responsible for serial number verification, trial expiration date, and
other evaluation restrictions. The rest of application code remains intact and software execution speed remains
the same.
CodeMorph C/C++ Code Obfuscator »
CodeMorph Delphi Code Obfuscator »
|