Maison  >  Article  >  interface Web  >  Comment Spring Boot utilise Allatori pour masquer le code

Comment Spring Boot utilise Allatori pour masquer le code

php中世界最好的语言
php中世界最好的语言original
2018-04-12 13:56:113963parcourir

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 :

Spring Boot使用Allatori代码混淆的方法

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn