Java Obfuscator Change Log
|
|
DashO-Pro v4.x
DashO-Pro v3.x
DashO-Pro v2.x |
DashO-Pro v4.x
| Version 4.1 |
Date |
| 4.1 Build 2 |
06/19/2008 |
- New Project Wizard in the File > New Project menu. You can have DashO's New Project Wizard create a project for your application. The Wizard can create projects for libraries, applications, or WAR files. WAR file obfuscation requires installing DashO's Ant tasks.
- Enhancement: control flow re-ordering is stable between obfuscation runs so that methods that trigger JIT compiler bugs can be safely excluded.
- Enhancement: when creating an output jar with a manifest, the name of the manifest may be a jar name. This jar is then used as the source for the manifest that will be placed in the output jar.
- Change: entry points that reference excluded classes are now generate a warning and are ignored rather than halting the build.
- Change: DashO now excludes all packages that are defined in JDK 1.6.
- Change: INCLUDEJAVA and INCLUDESUN global options have been removed. These options are ignored and removed from the project file.
- Change: PACKAGERTJARCLASSES global option has been renamed to NODEFAULTEXCLUDES. The old option is automatically renamed when you save a project file. When this option is specified DashO does not use its internal list of Java packages that are excluded - only the exclusions in the project file will be used.
- Bug fix for:
- Null Pointer Exception when opening translator dialog.
- Incremental renaming performance problems with large class hierarchies.
- Messages not appearing on the problems tab.
- Typing property reference in report name field causes exception.
- Non-class file editing boxes being enabled when no item has been selected.
- Build halted when field references are made to missing classes even when IGNORENOTFOUNDCLASSES has been specified. A warning is now generated.
- Build halted when generic signatures make reference to missing classes even when IGNORENOTFOUNDCLASSES has been specified. A warning is now generated.
|
| Version 4.1 |
Date |
| 4.1 Build 1 |
05/21/2008 |
- User interface enhancements.
- New Ant tasks : <obfuscate>; <obfuscate-jar>; <watermark>. Requires Apache Ant 1.5 or newer.
- String Encryption improvements to thwart decompilation and reduce class sizes.
- New Peep Hole optimizer.
- Improved error messages for missing classes showing the context of the class reference.
- Enhancement: entry points, special classes, library entry points, classpath, quick jars, and supporting jars panels now have popup menus.
- Enhancement: entry points can now contain ** and * patterns using Ant-like semantics.
- Bug fix for:
- Manifest version is automatically added if not present in the text file.
- Insertion of manifests files that do not contain versions.
- Jar mode interface: can't turn off optimize byte codes.
- Error with forname detection in unusual instruction patterns.
- Decoding of stack traces that contain a combination of renamed and non-renamed methods and classes.
- String encrypted code that uses == vs equals() no longer works.
- Results panel draws blank text with Window Xp using Window 2000 display mode.
- Input jars list has compressed display when jar has a blank name.
- User interface cannot save files that contain field rules.
- User interface can lose value of manifest name on ouput panel.
|
| Version 4.0 |
Date |
| 4.0 Build 1 |
04/11/2008 |
- New user interface.
- Jar Mode interface is now combined with the Advanced Mode interface.
- Enhanced use of properties throughout the DOX file.
- Class name in entry points can use wildcards. Wildcard can now locate classes stored in jars.
- If a property is not defined it is no longer an error that halts the build. Instead the unexpanded value is left in the string.
- Relative filenames in project files are resolved relative to the project files location, not the current working directory as in 3.4.
- All tags that are a child of <dasho> in the DOX file are now optional. Note that this makes the files incompatible with 3.4.
- User preferences are now stored using Java's user preference mechanism. DashO no longer reads or writes .cfg files.
- The script files now use a shared configuration file. See readme.txt for instructions on setting JVM options when running DashO.
- Two new sample projects have been added.
|
DashO-Pro v3.x |
| Version 3.4 |
Date |
| 3.4 Build 2 |
03/13/2008 |
- Improved console output when showing names of classes and methods.
- Improved display of time to console rather than raw millisecond display.
- Control flow message display with the verbose setting rather than the errors setting.
- Fix for JDK 1.5 class literals used with arrays.
- Fix for bug where classes were not sorted in the class trees.
- Fix for bug where spurious rename warnings were displayed during incremental renaming.
- Fix for bug for overriding methods in particular class inheritance patterns.
- Fix for incremental renaming performance issues.
| |
| Version 3.4 |
Date |
| 3.4 Build 1 |
01/16/2008 |
- DashO's jar manifest now contains a Class-Path entry so that it can be run without specifying all the jars in the lib directory.
- DashO's user interface can now take in the name of a DOX file as an argument from the command line.
- DashO's user interface now uses the native look-and-feel of the OS rather than using the Metal cross-platform look-and-feel.
- The Remove tab in DashO's user interface has been removed and the removal options are now on the Setup tab's General Options section. It is now labeled "Unused Fields/Methods" to indicate that removal only applies to items that DashO has determined are not being used.
- The menus in DashO's user interface now contain keyboard accelerators.
- The tool bar in DashO's user interface has two new items: "Save As" and "Cancel". The Cancel item was previously only displayed while a build was running and appeared on the extreme right side of the tool bar. It is now always available on the tool bar, but only enabled while a build is running.
- DashO now creates temporary files in the temporary directory as defined by the operating system rather than in the install directory.
- DashO reports the name of removed interfaces in verbose mode.
- The StackMap attribute is now only generated for classes compiled for Java 6. Previously it was generated for all classes.
| |
| Version 3.3 |
- Support for JDK 1.6
- Other minor fixes and improvements.
| |
| Version 3.2 |
- Watermarking has been added. You can now encode an (optionally) encrypted string into a jar file with near transparency. The output must be a jar file for watermarking.
- Support for embedded properties in library tag
- Optional suffix option for incremental obfuscation. This feature can be used to immediately track changes across incremental obfuscations (i.e., the suffix could be the date or some other identifying string).
| |
| Version 3.1 |
- QuickJar (aka "Jarmode") has been added. This mode processes jars as a whole and does not create a transitive closure of the method call tree. Its an excellent mode for "quickly obfuscating a jar". Pruning is not active in this mode.
- Jarmode GUI: A new GUI for Jarmode has been added. At this time, this gui emphasizes uncomplicated ease-of-use. You cannot do fine-grained configuration with it as that is not its intent. However, it can create a simple jarmode .dox file which then you can edit externally.
- Jars in library mode: It is now acceptable to use a jar file in library mode (as opposed to only using directories full of classes).
- Other bug fixes including Class Format errors with ignorenotfoundclasses option.
- New look and feel for the original and Jarmode GUIs.
| |
| Version 3.0 |
- New and Easier to Use GUI.
- Stack Trace Decoding Tool.
- String Encryption.
- Control Flow Obfuscation.
- Method Devirtualization.
- Peephole Optimization.
- XML Configuration.
| |
DashO-Pro v2.x |
| Version 2.3 |
- Added the ability to specify a renaming prefix along with the keeppackages option.
- More getX and setX inlining improvements.
- Fixed bug resulting in "Method Not Found" errors when running projects compiled with javac -target 1.2 switch.
- Fixed bug where renameforname option was not working correctly when target classes were not in default package.
- Fixed "renaming recursion" when incremental input file is specified along with keeppackages option.
- DashO-Pro will no longer work on J2ME applications. See the license agreement for details. If you need to package a J2ME or other embedded application, please migrate to our new product, DashO Embedded Edition. DashO-EE is and will continue to be specifically tailored to the special needs of embedded applications.
| |
| Version 2.2 |
- Inlining getX and setX is now less aggressive in the presence of method overrides. Methods required to satisfy contracts defined by interfaces and abstract classes are not inlined. This was causing AbstractMethodErrors in Dasho'd applications.
- Inlining of getX and setX now changes access level of target field to public, even if the nomakepublic general option is set.
- GUI bugs fixed relating to running the same project multiple times, or changing projects.
- Dasho was improperly processing outer classes that contained anonymous inner classes that referenced the outer class. This was causing "Truncated Class File" messages in Dasho'd applications.
- Command line version was in some cases returning a zero exit value in the case of errors. The correct return value in the case of any error is 1.
| |
| Version 2.1 |
- Now supports JDK version 1.3 compilation.
- Simple getX and setX (where "X" is anything) methods are optimized out when optimizations are set to SPEED or SIZE. This is a simple method inline.
- Fixed bug in rename prefix.
- New General Option: RENAMEFORNAME
Allows dynamically loaded classes to be renamed - ALSO: All classes in IncludeClasses: are renamed too! (IncludeClassesUnconditional remains unchanged). Use NoRenameClass for old IncludeClasses functionality with this option.
- Can now run DashO with no trigger methods (assumingly you'll use IncludeClasses or some other way of introducing classes).
| |
| Version 2.0 |
- Support for serialized classes has been enhanced. The readObject and writeObject methods of serialized classes are automatically treated as triggers. The serialVersionUID field of any class is automatically kept intact.
This behavior can be suppressed by adding NOAUTOSERIALIZE to the -General option of the .dop file.
- Native methods are never renamed. Now, the Classes they reside in are also not renamed. Allowing this produced difficult to track errors.
This behavior can be suppressed by adding RENAMENATIVECLASSES to the -General option of the .dop file.
- Recent verifiers have begun getting sticky about like named static and instance methods. Prior versions of overload induction excluded statics from the overload algorithm and allowed to be renamed separately. In this release, OI includes statics thus satisfying all verifiers. The side-effect is that some jars may get slightly larger (less that 1% bigger).
This behavior can also be suppressed by a -General option. It is NOINDUCTSTATICS.
- Constant Pool Tag: A new dop entry of
-ConstantPoolTag:
Your String Here
Allows you to insert a string covertly into the constant pool of EVERY class of your application. This can allow you to put copyright or ownership information into your classes. This entry does not affect usability of your class and is ignored by the runtime. Obviously, it can trivially increase the size of your final jar.
- Incremental Obfuscation
Two dop entries (and corresponding GUI fields) provide for the ability to log DashO's obfuscation path and allow it to reproduce it in a future run. That is, if you distribute a "dasho'd" application then wish to patch a given class, DashO can be instructed to rename the application in the same way as the first run. It attempts to rename classes, methods, and fields to the same names as a previous run. The options to do this are -IncUpdateInputFile and -IncUpdateOutputFile
-IncUpdateInputFile:
incfile.dup ;; a file created from a PREVIOUS run of DashO
-IncUpdateOutputFile:
incfile1.dup ;; a file that will be created from this run (for use in future runs)
To be sure unexpected overwrites of these files occur, DashO will not overwrite an output file unless the "OVERWRITE:" keyword is specified.
-IncUpdateOutputFile:
OVERWRITE:incfile.dup
- Excludable Methods
A prefix may be specified such that all methods which begin with that prefix are effectively ignored from DashO's discovery procedure. For example you may have debug methods throughout your application that all begin with the string "debug...". You can tell DashO to not include them AND not follow their call trees with:
-ExcludedMethods:
debug*
- Trigger Fields: You can specify fields in given classes to not be removed or renamed just as you do Trigger methods. Note that the field serialVersionUID is automatically kept now in DashO 2.0 regardless if specified under trigger fields or not.
-TriggerFields:
Class1:myField:
| |