Name Obfuscation
Name obfuscation includes the obfuscation of the class names, method names and parameters. And though you probably won't be able to find an obfuscator, which fails to provide name obfuscation, still the methods it uses seem to be of great importance. We can estimate the quality of name obfuscation this or that obfuscator makes taking into account the algorithms it uses. The more deliberate those algorithms are the better.
That's why we have devoted plenty of time to the name obfuscation. As a result Allatori was designed so that it could understand and be able to work with projects of any complexity. Your software's architecture doesn't really matter to Allatori - unlike to other obfuscators. It is able to distinguish and convert into an obfuscated code any kinds of dependencies and schemes of inheritance.
The very Allatori's algorithm of name obfuscation seems to be one of the product's peculiarities: the point is that Allatori tries to give one name to as many elements as possible. Thanks to that there is a certain probability, that one name will be used for naming the class, the class methods (e.g. methods, which differ only by argument types) and class variables. This will allow blocking the work of the majority of decompilers, not to mention the fact that it's simply impossible to fathom this code.
Besides, the methods of choosing new names are designed so that the application could as a result have the minimal size. That can be of great importance in those spheres, where size does matter (take applets, for example).
You can realize what Allatori is able to do by dint of looking at the example given below.
Original source:
/**
* Returns sum of the elements in the first rowsCount rows
* and columnsCount columns.
*/
int sumOfElements(int[][] matrix, int rowsCount, int columnsCount) {
int sum = 0;
for (int row = 0; row < rowsCount; row++)
for (int column = 0; column < columnsCount; column++)
sum += matrix[row][column];
return sum;
}
Name obfuscated then decompiled:
int a(int a[][], int a, int a) {
int i = 0;
for(int j = 0; j < a; j++) {
for(int k = 0; k < a; k++)
i += a[j][k];
}
return i;
}



















