Introduction to Allatori obfuscation technology
Allatori is a Java obfuscator, which belongs to the second generation obfuscator, so it can protect your intellectual property rights in all aspects. Allatori has the following protection methods: naming obfuscation, stream obfuscation, debug information obfuscation, string obfuscation, and watermarking technology. This obfuscator is free for educational and non-commercial projects. War and jar file formats are supported and allow for adding valid dates to applications that need to obfuscate code. There are projects that need to protect the code. The more basic solution is to obfuscate the code. After decompiling the packaged file, you can see the effect. In addition, the size of the bags made with Allatori will be a little smaller.
Project Introduction
A very ordinary maven project, the difference is to add the jar package of Allatori in the root directory.
Let's take a look at the pom.xml file:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lovnx</groupId> <artifactId>confusion</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Allatori plugin start --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-and-filter-allatori-config</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target</outputDirectory> <resources> <resource> <directory>${basedir}/allatori</directory> <includes> <include>allatori.xml</include> </includes> <filtering>true</filtering> </resources> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <id>run-allatori</id> <phase>package</phase> <goals> <goal>exec</goal> </goals> </execution> </execution> </execution> </executions> <configuration> <executable>java</executable> <arguments> <argument>-Xms128m</argument> <argument>-Xmx512m</argument> <argument>-jar</argument> <argument>${basedir}/lib/allatori.jar</argument> <argument>${basedir}/target/allatori.xml</argument> </arguments> </configuration> </plugin> <!-- Allatori plugin end --> </plugins> </build> <dependencies> <!-- Test Begin --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- Test End --> <!-- springboot startup --> <dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> </parent></project> Using maven to package plug-in, Spring Boot builds the Allatori configuration is also explained above. What is more important in the Allatori configuration is:
<argument>${basedir}/lib/allatori.jar</argument><argument>${basedir}/target/allatori.xml</argument> Specify the alllatori.jar file path of Allatori. If your project is a pom project, you can place the lib directory in the parent project, and then the child project only needs:
<argument>../lib/allatori.jar</argument>
Just do it.
The allatori.xml file is also very important, take a look at the contents of it:
<config> <input> <jar in="confusion-0.0.1-SNAPSHOT.jar" out="confusion-0.0.1-SNAPSHOT-obfuscated.jar"/> </input> <keep-names> <class access="protected+"> <field access="protected+"/> <method access="protected+"/> </class> </keep-names> <property name="log-file" value="log.xml"/></config>
That is, the specific configuration of the Allatori obfuscator. Here you can configure a lot of information and various strategies, and you can also specify which classes are not obfuscated. Various specific methods can be obtained in the documentation in the attachment at the end of the article.
What needs to be explained here is:
<input> <jar in="confusion-0.0.1-SNAPSHOT.jar" out="confusion-0.0.1-SNAPSHOT-obfuscated.jar"/> </input>
confusion-0.0.1-SNAPSHOT.jar is an unobfuscated package after package, while confusion-0.0.1-SNAPSHOT-obfuscated.jar is an obfuscated package, which is what we need.
Packaging steps
1. Clean maven project.
2. Copy the allatori.xml file below resources to the target directory.
3. Install the maven project, and after seeing the following information, it means it is successful:
######################################################################################################################################## DEMO VERSION! ## NOT FOR COMMERCIAL USE! ### ## Demo version adds System.out's ## and give 'ALLATORI_DEMO' name ## to some fields and methods. ## ## ## Obfuscation by Allatori Obfuscator v6.4 DEMO ## ## http://www.allatori.com ## #################################################################################################################################################################################################################################################################################################################################################################################################################################################################
4. Successful project:
The arrow points to the package we need, and the code of this package has been obfuscated.
Effect view
Here we use the decompilation tool to view the obfuscated packages. I use the jd-gui software, which is small and practical.
Before the TestApplication.java obfuscation:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); }} After the TestApplication.java is obfuscated:
import java.io.PrintStream;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class TestApplication{ public static String ALLATORIxDEMO(String a) { int tmp4_3 = 4; int tmp7_6 = 1; int tmp21_18 = a.length(); int tmp25_24 = 1; tmp25_24; int j; int ? = tmp25_24; int k = tmp21_18; int tmp35_31 = (j = new char[tmp21_18] - 1); tmp35_31; int i = 5 << 4 ^ (0x2 ^ 0x5); (tmp4_3 << tmp4_3 ^ tmp7_6 << tmp7_6); if (tmp35_31 >= 0) { int tmp45_44 = j; j--; ?[tmp45_44] = ((char)(a.charAt(tmp45_44) ^ i)); int tmp66_63 = (j--); ?[tmp66_63] = ((char)(a.charAt(tmp66_63) ^ k)); } return new String(?); } public static void main(String[] a) { System.out.println("/n############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################## Allatori Obfuscator v6.4 DEMO #/n# #/n# http://www.allatori.com #/n# #/n#####################################################################################################/n"); SpringApplication.run(TestApplication.class, a); }} Before the TestController.java is confused:
import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController { @GetMapping("/test") public String test(){ return "888888888888888"; }} After the TestController.java is obfuscated:
import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController{ @GetMapping({"/test"}) public String test() { return ALLATORIxDEMO("*]*]*]*]*]*]*]*]*"); } public static String ALLATORIxDEMO(String a) { int tmp27_24 = a.length(); int tmp31_30 = 1; tmp31_30; int j; int ? = tmp31_30; int k = tmp27_24; int tmp41_37 = (j = new char[tmp27_24] - 1); tmp41_37; int i = (0x3 ^ 0x5) << 4 ^ 0x5; (2 << 3 ^ 0x2); if (tmp41_37 >= 0) { int tmp51_50 = j; j--; ?[tmp51_50] = ((char)(a.charAt(tmp51_50) ^ i)); int tmp72_69 = (j--); ?[tmp72_69] = ((char)(a.charAt(tmp72_69) ^ k)); } return new String(?); }} Hahaha, how about it, don’t you understand? And the obfuscation package runs as usual without any problems.
--------》github source code and document address "-------
The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.