Java代码混淆工具入门——Allatori~
作者:threedaymanAllatori 是什么 Allatori是第二代java代码混淆工具,为你的产品知识产权提供全方位的保护。通过代码混淆,让代码逆向工程几乎变得不可能。
来源:恒生LIGHT云社区
除了代码混淆作用,Allatori还可以最小化应用代码大小,提高应用启动速度。
使用案例 创建一个mixup的maven工程如下图
文章图片
如上图 在根目录下创建allatori文件夹,放入配置文件allatori.xml,创建lib文件夹,在其下面放入allatori.jar和allatori-annotations.jar。
allatori.xml配置详细可见注释。
pom.xml中加入编译时需要用到的插件
org.apache.maven.plugins
maven-resources-plugin
2.6
copy-and-filter-allatori-config package
copy-resources
${basedir}/target
allatori
allatori.xml
true
org.codehaus.mojo
exec-maven-plugin
1.2.1
run-allatori package
exec
java -Xms128m
-Xmx512m
-jar
allatori/lib/allatori.jar
${basedir}/target/allatori.xml
通过maven package命令进行打包,在taget目录下生成了mixup-0.0.1-SNAPSHOT.jar和mixup-0.0.1-SNAPSHOT-obfuscated.jar(混淆后)文件。
文章图片
通过反编译工具查看mixup-0.0.1-SNAPSHOT-obfuscated.jar。
混淆前代码
package com.example.mixup.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {private Person person;
@RequestMapping("/hello")
public String sayHello(String name){
return "hello "+ name;
}
}
【Java代码混淆工具入门——Allatori~】混淆后通过反编译工具查看
package BOOT-INF.classes.com.example.mixup.controller;
import com.example.mixup.controller.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
private Person h;
@RequestMapping({"/hello"})
public String sayHello(String name) {
return (new StringBuilder()).insert(0, a("D@@IC\005")).append(name).toString();
}public static String a(Object s) {
// Byte code:
//0: iconst_4
//1: iconst_3
//2: ishl
//3: iconst_5
//4: ixor
//5: iconst_4
//6: iconst_3
//7: ishl
//8: iconst_5
//9: iconst_3
//10: ishl
//11: iconst_4
//12: ixor
//13: aload_0
//14: checkcast java/lang/String
//17: dup
//18: astore_0
//19: invokevirtual length : ()I
//22: dup
//23: newarray char
//25: iconst_1
//26: dup
//27: pop2
//28: swap
//29: iconst_1
//30: isub
//31: dup_x2
//32: istore_3
//33: astore_1
//34: istore #4
//36: dup_x2
//37: pop2
//38: istore_2
//39: iflt -> 79
//42: aload_1
//43: aload_0
//44: iload_3
//45: dup_x1
//46: invokevirtual charAt : (I)C
//49: iinc #3, -1
//52: iload_2
//53: ixor
//54: i2c
//55: castore
//56: iload_3
//57: iflt -> 79
//60: aload_1
//61: aload_0
//62: iload_3
//63: iinc #3, -1
//66: dup_x1
//67: invokevirtual charAt : (I)C
//70: iload #4
//72: ixor
//73: i2c
//74: castore
//75: iload_3
//76: goto -> 39
//79: new java/lang/String
//82: dup
//83: aload_1
//84: invokespecial : ([C)V
//87: areturn
// Local variable table:
//startlengthslotnamedescriptor
//0880sLjava/lang/Object;
}
}
混淆后代码难以阅读,通过java -jar mixup-0.0.1-SNAPSHOT-obfuscated.jar命令,混淆后的代码能够正常运行。
PS:allatori.xml中要加入一下代码,不要混淆spring框架中的代码,不然会影响springboot项目启动,出现ClassNotFoundException错误。
参考
allatori官网
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 工具|后天就是七夕节,你准备好了吗(送上几个七夕代码,展示你技能的时候到了!)
- Java|Java基础——数组