Changelog

3.7.0

  • Java 21 support
  • Improved memory efficiency of loader
  • Hardened string encryption and flow obfuscation against JVM-side hooking
  • Improved performance of generated native code with CSE on JNI ID caches

3.6.0

  • Java 20 support
  • Zig 0.11.0 support (Zig 0.10.1 or newer is now required)
  • New <useIntrinsics> option to enable supported Java methods, such as String#equals, to be implemented directly in native code, preventing instrumentation.
  • Added static analysis to improve code generation by eliding null checks where they are not required.

3.5.1

  • Fixed a rare mistranslation of long arithmetic
  • Fixed a rare segfault on ARM compiles when multiple native threads attempt to load a class concurrently
  • Optimised some corner cases in code generation
  • Zig 0.10.0 or newer is now required

3.5.0

  • Java 19 support
  • New <fastCompile> option to improve compilation times for large projects
  • Faster, more compact and more secure native string encryption based on ChaCha20
  • Support for annotations to include and exclude methods from translation
  • Hardened <flowObf> against reverse engineering
  • Hardened invokedynamic translation against reverse engineering

3.4.0

  • Java 18 support
  • New <flowObf> option to enable native control flow obfuscation
  • New <options> section in the config which encloses <stringObf>, <mangle> and the new <flowObf> option
  • Randomised data layouts in native code

3.3.0

  • Up to a 40% reduction in file size for large projects
  • Translations of instanceof and athrow now handle null correctly
  • Targets are now compiled in parallel
  • Hardened protection mechanisms against static analysis

3.2.0

  • JNIC now requires Java 11+ and Zig 0.9.1+ to run, but can still process Java 8 classes
  • Fixed a bug with invokedynamic translation on Java 9+
  • Hardened protection mechanisms with stringObf enabled

3.1.1

  • Loader class name is now randomly generated to prevent conflicts

3.1.0

  • All native methods are now compiled into a single library
  • Improved performance of generated code by up to 4x
  • Improved performance of invokedynamic emulation by up to 10x
  • Significantly reduced file size overhead of string encryption
  • Various bugfixes

3.0.0

  • Java 17 support
  • Obfuscation is now a single step
  • Multi-platform support without needing to compile on each platform separately
  • Various bugfixes

2.1.0

  • Implemented per-user / online licencing
  • Changed default optimisation level to -O1 from -O3

2.0.0

  • Implemented XOR based string encryption
  • <clinit> is now translated by moving it to $jnicClinit
  • Added methodDesc attribute to <match> tags

1.0.1

  • Java 14 support
  • Relocated main package to dev.jnic

1.0.0

Initial release

Last Updated:
Contributors: Vincent