SourceFormatX

CodeMorph

Overview

Features

CodeMorph C++

CodeMorph Delphi

Code Obfuscation

Screenshots

Documentation

FAQs & Tips

Update History

License Policy

CodeToHtml

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 »