String Encryption

Every application - even if it's as simple as possible - always has string data. This may be the text in shortcuts, buttons and other GUI components, error messages and exception information; any kind of textual information which is used by your application. This sort of information can help the hacker more than any code can. A simple search of the string in the code will show the exact place where it's used, which means it will localize the necessary piece of code and, as a consequence, make it much easier for the hacker to understand the algorithm of your program. So the string data encryption must be grasped not just as a subsidiary feature, but as an indispensable attribute of every high-quality obfuscator - just like Allatori.

After analyzing your class Allatori will find all the string data and encode it. In this state it will be kept in constant pool of your class. Allatori also adds a small piece of code that decodes the strings at runtime. As a result the hacker, having decompiled the class obfuscated by Allatori, will be presented with a seemingly random collection of symbols, rather than the string data.

A little example below displays rather clearly what you'll get if using Allatori:

Original source:

    private void checkLicense() throws Exception {
        if (!isLicenseValid())
            throw new Exception("Invalid License.");
        else
            return;
    }

Obfuscated with String Encryption then decompiled:
    private void b() throws Exception {
        if(!a())
            throw new Exception(a.a("\\z`t}}v5Q}}pwg\177{"));
        else
            return;
    }