Allatori属于第二代混淆器都,除了保护功能之外,还附加了一系列的功能,几乎可以抵御一切的代码攻击。同时,Allatori可以让您的程序体积更小,速度更快,效果简直让人难以置信。
Name Obfuscation:命名混淆
命名混淆是Allatori的一大特色。命名混淆包括混淆类名、函数名和参数名。命名混淆的性能取决于算法。算法越精密越复杂,性能越强大。 为此,Allatori花了大量的时间设计算法。无论多么复杂的工程项目,Allatori都能够识别和处理。Allatori可以区分任何继承关系和方式,而且不受软件架构的影响。
Flow Obfuscation:流程混淆
一般来说,Java里常用的就是循环、条件和顺序,然而Allatori却可以对流程进行混淆。通过对流程进行混淆, 大部分的反编译工具基本上就趴窝了。举个例子:
源代码:
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; }
混淆后:
int a(int a[][], int a, int a) { int i = 0; int j = 0; goto _L1 _L6: int k = 0; goto _L2 _L4: i += a[j][k]; ++k; _L2: a; JVM INSTR icmplt 17; goto _L3 _L4 _L3: ++j; _L1: a; JVM INSTR icmplt 10; goto _L5 _L6 _L5: return i; }
Debug Info Obfuscation:调试信息混淆
调试信息也混淆,出错信息也找不到可钻的空子。
上例子:
java.lang.NullPointerException at com.company.c.a(Util.java:38) at com.company.b.b(TraceTest.java:53) at com.company.b.a(TraceTest.java:14) at com.company.a.a(Main.java:27)
混淆后:
java.lang.NullPointerException at com.company.c.a(Unknown Source) at com.company.b.b(Unknown Source) at com.company.b.a(Unknown Source) at com.company.a.a(Unknown Source)
或者还能这样:
java.lang.NullPointerException at com.company.c.a(m:61) at com.company.b.b(w:94) at com.company.b.a(w:83) at com.company.a.a(n:75)
String Encryption:字符串加密
无论应用程序多么简单,通常都含有字符串数据。它可能是文本的快捷键、GUI组件(如按钮)、错误/异常信息或文本信息。对黑客来说,这些信息比任何代码还有用。通过搜索代码中的字符串,就可以显示使用过此字符串的准确位置,帮助黑客更容易的理解程序算法。所以,字符串数据加密很重要。
Allator会对所有的字符串数据分析并进行编码,使其处于类常量池中。Allatori还增加了一小段代码,用于在程序运行时对字符串进行解码。因此,黑客反编译出来的将会是随机组成的符号集,而不是字符串数据。
100% Protection Against Popular Decompilers:100%防止被反编译
俗话说,知己知彼,百战不殆。因此,Allatori团队花费大量时间研究和分析现代反编译器的原理。我们不仅仅研究它们是如何工作的,更试图寻找它们的弱点,阻止反编译过程。Allatori有一个特殊的代码转换模块,任何试图反编译的行为都将产生致命的错误。因此,你的代码是绝对安全的,因为不可能找到可用的反编译器。
Optimizing:优化
Allatori除了混淆代码以外,他还不务正业的针对程序的性能、体积和稳定性进行优化。Allatori还打包票说,对于绝大部分应用而言,使用Allatori的优化算法,肯定能够提升性能,并且缩小体积。
Watermarking:水印
Allatori还支持水印,通过给程序添加水印,可以跟踪出使用者,通过水印来打击盗版也是美滋滋。
Incremental Obfuscation:增量混淆
当您需要为应用程序创建补丁或插件时,使用增量混淆。在这种情况下,可以保证类的新名称、方法和字段都与先前混淆处理的版本一致,使得两个完全兼容。因此,补丁或插件可以无缝集成到以前部署的应用程序中。
Stack Trace Utility:堆栈跟踪工具
上面有提到说,调试信息也能被混淆,那么作为开发人员,怎么处理用户反馈过来的错误日志呢?Allatori的堆栈跟踪工具可以将进过混淆的日志恢复如初。。。
Build Tool Interface:Build Tool接口
Allatori可以支持各种自动构建工具,其中Ant和Maven已经集成好了。
J2ME Obfuscation:J2ME项目混淆
J2ME现在用的人也少了。知道就行。不是考点。
Android Obfuscation:Android项目混淆
Allatori是一个全功能的Android混淆器,可以很容易的集成到构建中去。由此产生的apk体积更小,更难被逆向。
混淆效果(左图为混淆之后)
整体结构:
Verify.class
我们再看看MacUtil.class,没有混淆之前,经过反编译之后的代码,下面右图所示。
可以看出来,反编译之后的代码,基本上和写的一模一样。再看左面混淆之后的代码,呃,return D(); 我们去看看D.class里是啥。
呃,这是啥。字节码么?注释么?从上到下全是这种绿油油的字节码?反正小编是看不懂写的啥了。
Allatori官网上最便宜也要290美元,如果自己想用的话只能看看万能的马云家有没有了。
本文暂时没有评论,来添加一个吧(●'◡'●)