Gruntpocalypse is a jvm bytecode obfuscator written in kotlin with 30+ features.
This project aims for stability and versatility. Some ideas are from other obfuscators.
Join our Discord server and provide your suggestions: https://discord.gg/ysB2fMfeYW
100% passed JVM Obfuscation Test
If you encounter any compatibility issues, please raise an issue on GitHub to help us improve Grunt.
By the way, I appended the stability level on each feature. If you encountered unstable situation. You can turn off the low stability-level features.
Stability level: [1]=Unstable [5]=Stable
Controlflow requires ComputeMaxs disabled. Please ensure your included classes with full dependencies.
The dependencies of your project is highly required to ensure stability and intensity. If most of the project dependencies are unavailable for some reasons. I suggest you to enable useComputeMaxs in Global setting to ensure stability as much as possible. (If you encountered VerifyError, You should first try to complete the dependencies. It is recommended to only enable computeMaxs and disable controlflow obfuscation when most dependencies cannot be completed)
-
[5] ClassRename
-
[5] FieldRename
-
[5] MethodRename
-
[5] LocalVarRename
-
[3] ReflectionSupport
The method renamer supports InterfaceOverlap, InvokeDynamic, and FunctionalInterface check.
InterfaceOverlap: A class extends/implements more than 2 class/interfaces with same method name and descriptor. (Example: A implements B and C, B and C both are independent interface and have method invoke(I)J.)
- [4] MixinClassRename
- [4] MixinFieldRename
- [4] MixinMethodRename
- [4] ArithmeticEncrypt
- [5] ConstPoolEncrypt
- [5] NumberEncrypt
- [5] StringEncrypt
- [4] MethodScramble
- [5] FieldScramble
- [5] StringEqualsRedirect
- [5] InvokeDynamic
- [5] SourceDebugRemove
- [5] EnumOptimization
- [5] DeadCodeRemove
- [5] KotlinOptimize
- [4] Shrinking
- [5] AntiDebug
- [5] Crasher
- [5] Watermark
- [5] NativeCandidate
- [5] ShuffleMembers
- [5] TrashClass
- [5] ClonedClass
- [5] SyntheticBridge
- [5] HWIDAuthentication
- [5] PostProcess
- [5] DeclareFields
- [3] NoverifyHackery (Misc) Force noverify and hackery bytecodes (reference)
- [4] RemoteLoader (Misc) Remote authentication and constant class loading services
- [2] VersionPatcher (Misc) Downgrade the class version from java6 to java5 for Windows 98
- [5] RandomArithmeticExpr (Seed) Hide the seed operations to anti-simulation
- [4] BogusConditionJump (If, Goto) Generate fake jumps with random junk codes
- [4] MangledCompareJump (If, Goto) Generate conditional jump with junk codes to replace direct jump
- [5] ReversedIfJump (If, Goto) Random mutation to the jump condition
- [4] ParallelBranch (If, Goto) Generate junk parallel branch to prevent inference from returns
- [4] TableSwitchJump (Switch) Generate TableSwitch to replace direct jumps
- [4] TrappedSwitchCase (Switch) Random trapped jumps or weird loops between switch cases
- [4] JunkCodeGenerator (JunkCode) Generate junk calls
- [5] SwitchExtractor (Switch) Replace switches with blocks
- [4] ConstantBuilder (If, Switch) Using controlflow to build constants
- [4] SwitchProtector (Switch) Hide the real keys of switch
This is a free and open source software, licensed under GPLv3.
The previous Grunt versions are licensed under the MIT license (1.5.8 and before).