Incremental Obfuscation allows PreEmptive Protection - DashO to reuse the same class and method renames and string encryption/decryption methods used during a previous obfuscation. This is important if you need to redistribute a portion of your application or if you rename serialized classes. For example, consider your application consists of three
.jar files. After a release you discover a major issue in some logic and you would like to redistribute one of the
.jar files in a patch. You would need to use incremental obfuscation to:
make sure the jar file has the same class and method names.
call (or contain) the same injected string decryption methods.
properly interface with the renamed classes and methods in the other two jars.
Incremental Obfuscation is supported by two mapping files which you should always configured to be output:
Renaming Map File
A renaming map file contains a mapping the original and new names of classes and methods. This information is necessary for stack-trace decoding and incremental obfuscation.
String Encryption Map File
A string encryption map file contains information about the algorithms used by DashO to encrypt strings and the locations and algorithms used when injecting the decrypters (decryption methods). This information is necessary for incremental obfuscation.
Both these output files should be kept internally, possibly in source control, so that when the need arises for either stack-trace decoding or incremental obfuscation you will be ready.
To perform an incremental obfuscation, these files should be renamed and set as the input maps for renaming and string encryption. You should use the same configuration as the original build because changes to items such as renaming-exclusions or entry points may impact if classes/methods are renamed or removed. Once the build is finished, you should compare the new output maps with the input maps to make sure there are no unexpected inconsistencies.
An error will be output if the input map contains a new name for a class, method, or field which cannot be used because:
- The configuration has changed to prevent that class, method, or field from being renamed.
- The new name conflicts with another name.