Home
Softono

Enigma

Open source Java
172
Stars
25
Forks
22
Issues
9
Watchers
3 years
Last Commit

 About Enigma

Gradle Plugin - Obfuscator String Encryption (Android/Java)

Platforms

Web Self-hosted iOS Android

Languages

Java Dart

Need Help Installing Enigma?

We provide expert installation service for this software. Our team will install, configure, and secure Enigma on your server. plans start at just $30.

Enigma

Gradle Plugin - Obfuscator Strings Encryption (Android/Java)

This project is a simple Gradle plugin to help you to encrypt all String values of your Android Java code at the compilation time.

Important: Enigma plugin won't execute if your project is not managed by a SCM tool such as git or SVN.

Recommended: commit your changes before compile your app with Enigma activated

Links:

How integrate it?

First of all, be sure that a SCM is initialized in your project, such as Git for example:

$ cd /path/of/your/project/
$ git init
$ git add .
$ git commit -m "Initial commit"

build.gradle (project)

buildscript {
  repositories {
    google()
    jcenter()
    // Add Maven repo
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {     
    classpath 'com.android.tools.build:gradle:3.5.2'
    // Add the Enigma classpath
    classpath 'gradle.plugin.chrisney:enigma:1.0.0.8'
  }
}

build.gradle (app)

apply plugin: 'com.android.application'

// Add Enigma Plugin
apply plugin: 'com.chrisney.enigma'

// Set Enigma options:
enigma.enabled = true
enigma.injectFakeKeys = true
enigma.ignoredClasses = ["com.my.packagename.MainActivity.java"]

android {
    buildTypes {
        release {
            // Don't forget to enable ProGuard !
            minifyEnabled true
        }
    }
}

Compile your App

During the compilation process, Enigma plugin will:

  • Backup all Java files in backup directory enigma-backup
  • Parse your code and encrypt all String values for each Java file
  • Inject Enigma source code (encryption code)
  • Inject fake secrete keys (optional - check enigma.injectFakeKeys option)
  • Compile your App (classic process)
  • Restore your original Java files
$ ./gradlew assembleRelease
> Task :app:backup
๐Ÿ’พ Backup: /app/src/main/java/com/app/helloworld/MainActivity.java
๐Ÿ’พ Backup: /app/src/main/java/com/app/helloworld/helpers/IResponse.java
๐Ÿ’พ Backup: /app/src/main/java/com/app/helloworld/helpers/Utils.java
๐Ÿ’พ Backup: /app/src/main/java/com/app/helloworld/helpers/ATest.java
๐Ÿ’พ Backup: /app/src/main/java/com/app/helloworld/helpers/TestImpl.java
๐Ÿ’พ Backup: /app/src/main/java/com/app/helloworld/Constants.java

> Task :app:encrypt
๐Ÿ” MainActivity.java encrypted
๐Ÿ” IResponse.java encrypted
๐Ÿ” Utils.java encrypted
๐Ÿ” ATest.java encrypted
๐Ÿ” TestImpl.java encrypted
๐Ÿ” Constants.java encrypted

> Task :app:injectCode
โœ๏ธ Add Enigma code

> Task :app:restore
โ™ป๏ธ Restore: /app/src/main/java/com/proto/helloworld/MainActivity.java
โ™ป๏ธ Restore: /app/src/main/java/com/app/helloworld/helpers/IResponse.java
โ™ป๏ธ Restore: /app/src/main/java/com/app/helloworld/helpers/Utils.java
โ™ป๏ธ Restore: /app/src/main/java/com/app/helloworld/helpers/ATest.java
โ™ป๏ธ Restore: /app/src/main/java/com/app/helloworld/helpers/TestImpl.java
โ™ป๏ธ Restore: /app/src/main/java/com/app/helloworld/Constants.java
๐Ÿงน Remove Enigma code: ~/HelloWorld/app/src/main/java/com/app

Options

Bellow the options of Enigma plugin:

  • enigma.enabled (true | false) : Enable or disable the string encryption process (default: true)
  • enigma.injectFakeKeys (true | false) : if activated, create fake string keys and injected it into your code (default: true)
  • enigma.hash (string) : let you define your own encryption key (32 characters recommended)
  • enigma.classes (array of strings) : let you defined the only classes to encrypt
  • enigma.ignoredClasses (array of strings): define the classes to not encrypt
  • enigma.srcJava (string): root path of your JAVA files (default: /app/src/main/java)

Unit Tests

The JAVA parser is unit tested with more than 300 complex JAVA classes: