Maison > Article > interface Web > Comment Spring Boot utilise Allatori pour masquer le code
Cette fois, je vais vous montrer comment Spring Boot utilise Allatori pour obscurcir le code. Quelles sont les précautions que Spring Boot utilise Allatori pour obscurcir le code. Ce qui suit est un cas pratique. jetez un oeil.
Introduction à la technologie d'obfuscation Allatori
Allatori est un obfuscateur Java. Il s'agit d'un obfuscateur de deuxième génération, il peut donc protéger pleinement votre propriété intellectuelle. Allatori dispose des méthodes de protection suivantes : obscurcissement du nom, obscurcissement du flux, débogage obscurcissement des informations, obscurcissement des chaînes et technologie de filigrane. Cet obfuscateur est gratuit pour les projets éducatifs et non commerciaux. Prend en charge les formats de fichiers war et jar et permet d'ajouter des dates valides pour les applications nécessitant du code obscurci. Certains projets doivent protéger le code. Une solution relativement simple consiste à obscurcir le code. Après avoir décompilé les fichiers packagés, vous pouvez voir l'effet. De plus, la taille des sacs fabriqués avec Allatori sera plus petite.
Un projet Maven très ordinaire, la différence est que le package jar d'Allatori est ajouté au répertoire racine.
Jetons un coup d'œil au fichier pom.xml :
<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> </resource> </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> </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启动 --> <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>
Pour les projets construits à l'aide des plug-ins d'empaquetage Maven et Spring Boot, la configuration Allatori est également expliquée ci-dessus. Les plus importantes de la configuration Allatori sont :
<argument>${basedir}/lib/allatori.jar</argument> <argument>${basedir}/target/allatori.xml</argument>
. Spécifiez le chemin du fichier allatori.jar d'Allatori. Si votre projet est un projet pom, vous pouvez mettre le répertoire lib dans le projet parent, et le sous-projet n'a alors besoin que de :
<argument>../lib/allatori.jar</argument>
. C'est ça.
Le fichier allatori.xml est également très important, jetez un œil à son contenu :
<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>
C'est la configuration spécifique de l'obfuscateur Allatori. Ici, vous pouvez configurer de nombreuses informations, de nombreuses stratégies, et vous pouvez également spécifier quelles classes ne doivent pas être obscurcies. Les méthodes spécifiques peuvent être trouvées dans le document joint à la fin du document. article.
Ce qui doit être expliqué ici est :
<input> <jar in="confusion-0.0.1-SNAPSHOT.jar" out="confusion-0.0.1-SNAPSHOT-obfuscated.jar"/> </input>
confusion-0.0.1-SNAPSHOT.jar est le package non obscurci après l'empaquetage, et confusion-0.0.1-SNAPSHOT-obfuscated.jar est le package obscurci. C'est ce dont nous avons besoin.
Étapes d'emballage
1. Projet Maven propre.
2. Copiez le fichier allatori.xml sous ressources dans le répertoire cible.
3. Installez le projet maven. Cela signifie le succès après avoir vu les informations suivantes :
################################################ # # # ## # # ## ### ### ## ### # # # # # # # # # # # # # # # # ### # # ### # # # ## # # # # # ### ### # # # ### # # ### # # # # DEMO VERSION! # # NOT FOR COMMERCIAL USE! # # # # Demo version adds System.out's # # and gives 'ALLATORI_DEMO' name # # to some fields and methods. # # # # # # Obfuscation by Allatori Obfuscator v6.4 DEMO # # # # http://www.allatori.com # # # ################################################
4. Projet après succès :
La flèche pointe vers le package dont nous avons besoin et le code de ce package a été obscurci.
Vue des effets
Ici, un outil de décompilation est utilisé pour visualiser le package obscurci. J'utilise le logiciel jd-gui, qui est petit et pratique.
TestApplication.java avant obscurcissement :
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } }
TestApplication.java après obfuscation :
import java.io.PrintStream; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public 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################################################\n# #\n# ## # # ## ### ### ## ### #\n# # # # # # # # # # # # # #\n# ### # # ### # # # ## # #\n# # # ### ### # # # ### # # ### #\n# #\n# Obfuscation by Allatori Obfuscator v6.4 DEMO #\n# #\n# http://www.allatori.com #\n# #\n################################################\n"); SpringApplication.run(TestApplication.class, a); } }
TestController.java avant obscurcissement :
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @GetMapping("/test") public String test(){ return "88888888888888888"; } }
Après que TestController.java soit confus :
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public 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(?); } }
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de PHP !
Lecture recommandée :
AjaxUpLoad.js pour le téléchargement de fichiers
Résumé des opérations js sur les méthodes de données binaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!