yGuard Changelog

yGuard 2.6 - Changes since 2.5.5

  • Fixed incorrect obfuscation of invokedynamic instructions leading to AbstractMethodErrors of class files which had their constant pool entry order permutated for some reason (for example by the JarJar plugin for maven).
  • Added support for Java 8 Type Annotations.
  • The implements attribute now considers types in <externalclasses> as well when determining the interfaces implemented by a given class.
  • Changed the class file version of the yGuard library, so yGuard can be run with Java 7 again.

yGuard 2.5.5 - Changes since 2.5.4

  • Fixed IllegalArgumentException: "Invalid fully qualified name (b)" that occurred when referencing or attempting to obfuscate classes that start with a dollar ('$') sign.

yGuard 2.5.4 - Changes since 2.5.3

  • Fixed IllegalArgumentException caused by Java 8 compatibility problems that arose in certain situations, for example when using hierarchy based keep instructions.

yGuard 2.5.3 - Changes since 2.5.2

  • Fixed incorrect obfuscation of invokedynamic instructions leading to AbstractMethodErrors when using default methods.

yGuard 2.5.2 - Changes since 2.5.1

  • Added support for renaming META-INF/services entries if the entry corresponds to a type that is obfuscated.
  • Fixed a bug that caused the stacktrace deobfuscation tool to ignore class name mappings that started with one or more $ characters.

yGuard 2.5.1 - Changes since 2.5

  • Fixed broken binary class file of the attached com.yworks.util.annotation.Obfuscation annotation in ObfuscationAnnotation.jar.

yGuard 2.5 - Changes since 2.4.0.1

  • Added support for controlling obfuscation exclusion via annotations.
  • Improved Java 7 support. yGuard does now support invokedynamic in the obfuscation process.

yGuard 2.4.0.1 - Changes since 2.4

  • Fixed a regexp that could cause yGuard to parse manifest files for a very long time.

yGuard 2.4 - Changes since 2.3.0.1

  • Added basic Java 7 class file support (see the note on Java 7 compatibility).
  • Fixed a bug that caused yGuard to introduce invalid signatures for typed classes with inner classes.
  • Fixed a bug that caused yGuard to erroneously exclude all classes from obfuscation when an implements attribute was used for a <class> element without an additional name or expose attribute.
  • Fixed a bug that caused the shrinker to ignore the attribute element if the default shrinking settings were used (i.e. if no keep element was defined).

yGuard 2.3.0.1 - Changes since 2.3.0

  • Fixed a bug that caused the shrinker to remove the static initializer of a non-static inner class when only fields of the inner class were referenced (e.g. compiler-generated switch map tables for enums).

yGuard 2.3.0 - Changes since 2.2.0

  • yGuard won't try to initialize external classes needed for resolving anymore.
  • The default behavior of the shrinker was changed to keep any referenced runtime visible annotation and parameter annotation attributes.
  • The shrinker will now correctly adhere to the "lineNumberTable", "runtimeVisibleParameterAnnotations" etc. attributes of the <keep> element.
  • Fixed a bug that caused the shrinker to remove the enclosing method of anonymous inner classes declared as entry points.
  • Fixed a bug that caused the shrinker to remove referenced Annotation elements from Annotation interfaces.
  • yGuard now won't rename or remove the package-info class.
  • Fixed possible "Illegal group reference" Exception in yGuard's parse tool.
  • The shrinker will now keep classes that are used as field types of referenced fields.
  • The shrinker will now correctly keep method attributes of methods that are kept as stubs.

yGuard 2.2.0 - Changes since 2.1.0

  • yGuard is now fully JDK-1.6 compatible.
  • The yGuard task now supports a way of specifying a set of Jar files that should be obfuscated at the same time using simple patternset syntax.
  • yGuard now uses the same technique for all elements in the MANIFEST file to adjust fully qualified class name strings.
  • It is now possible to tell yGuard not to obfuscate specific package names.
  • yGuard can now be given a list of digest algorithms that will be used to create the digests in the manifest.
  • yGuard now issues a warning if the package or class or method name of a native method is obfuscated.

yGuard 2.1.0 - Changes since 2.0.3

  • Fixed a bug that caused yGuard to throw a NullPointerException if an attribute element contained no nested patternset.
  • Fixed a bug that caused yGuard to use multiple logging instances if a yGuard task was executed multiple times.
  • Fixed LineNumberTable and SourceFile elements.
  • Added overloadEnabled property.

yGuard 2.0.3 - Changes since 2.0.2

  • Fixed a bug that broke the nested map element of the rename element.

yGuard 2.0.2 - Changes since 2.0.1

  • Fixed a bug that caused yGuard to fail during class file parsing if a method signature contained an inner class of a parameterized class.
  • yGuard will not complain about the Java 1.5 attributes Bridge, Enum, and Varargs as 'unknown attributes' anymore.
  • Fixed a bug that caused all class names to be kept from renaming if the extends attribute was used in combination with the classes attribute.

yGuard 2.0.1 - Changes since 2.0

  • Fixed an inconsistency between the interpretation of the Ant syntax in the rename and shrink elements. Now, both elements apply patternset elements in nested method and field elements to class names, just as stated in the yGuard documentation.
  • If the classes attribute of the class element is not set or set to "none", the shrinking engine will now include the classes that match based on the given name attribute or nested patternset, effectively ignoring the classes attribute.

yGuard 2.0 - Changes since 1.5.0_03

  • New elaborate code shrinking functionality.
  • More powerful Ant syntax: extends/implements attributes for the class element.
  • General Ant syntax changes due to the introduction of the new yguard, shrink, and rename elements.
  • yGuard now needs Java 2 SDK 1.4.x or greater to function properly.

yGuard 1.5.0_03 - Changes since 1.5.0_02

  • Fixed bad treatment of the new enclosing method feature in Tiger which sometimes led to AbstractMethodErrors at runtime.

yGuard 1.5.0_02 - Changes since 1.5.0_01

  • Improved obfuscation logic for enumerations. Now the two static methods valueOf(String) and values() don't have to be exposed manually anymore.
  • Fixed bad annotation handling for non-trivial annotations. Annotations had not been parsed and handled correctly, which could lead to either errors during obfuscation or Errors at runtime.

yGuard 1.5.0_01 - Changes since 1.5

  • Fixed a bug that made yGuard ignore some of the attributes in the expose section ("sourcefile" and "linenumbertable").
  • Fixed a rare but severe bug that accidentally removed method attributes and sometimes led to ArrayIndexOutOfBoundsExceptions during the obfuscation.

yGuard 1.5 - Changes since 1.3.2

  • Added JDK 1.5 (a.k.a Java 5.0 code-named Tiger) compatibility. yGuard can now deal correctly with the new JDK and Java features: generics, var-args, enumerations, annotations, new ".class" bytecode construct, signatures, local variable type table, enclosing method information.
  • Implemented the ability to obfuscate/scramble/shrink line number information. This makes it possible to more easily debug stacktraces without exposing line number information in the obfuscated version of the application.
  • Implemented the ability to obfuscate the source file information. This is necessary in order to view line number information in stack traces. It is now possible to reassign the source file attribute inside class files so that the original source file name is not exposed in the obfuscated application.
  • Added the ability to determine on a per-class basis what attributes to expose or obfuscate. This includes line number information (with optional scrambling/compression or removal), source file attributes, deprecation attributes, etc. This makes it easy to obfuscate parts of your application while keeping the public API untouched and debug information for third party jars intact.
  • Improved the stacktrace deobfuscation tool. It can now unscramble line number information from stacktraces, features a more polished view of the mapping rules and deobfuscates stacktraces more reliably if the stacktraces are ambiguous.