Introdução à tecnologia de ofuscação Allatori
A Allatori é um ofuscador Java, que pertence ao ofuscador de segunda geração, para que possa proteger seus direitos de propriedade intelectual em todos os aspectos. A Allatori possui os seguintes métodos de proteção: Nomeação de ofuscação, ofuscação do fluxo, ofuscação de informações de depuração, ofuscação de cordas e tecnologia de marca d'água. Este ofuscador é gratuito para projetos educacionais e não comerciais. Os formatos de arquivo de guerra e jar são suportados e permitem adicionar datas válidas a aplicativos que precisam ofuscar o código. Existem projetos que precisam proteger o código. A solução mais básica é ofuscar o código. Depois de descompilar o arquivo embalado, você pode ver o efeito. Além disso, o tamanho dos sacos feitos com o Allatori será um pouco menor.
Introdução ao projeto
Um projeto Maven muito comum, a diferença é adicionar o pacote JAR de Allatori no diretório raiz.
Vamos dar uma olhada no arquivo 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> <PupidId> org.springframework.boot </proupId> <stifactId> primavera-boot-maven-plugin </artifactId> </flugin> <!-allatori plugin start-> <tlugin> groupidid> org.apache.maven.plugins </groupid> <stifactId> maven-maven-saven -sss.maven. <Version> 2.6 </siers> <c Executions> <secution> <id> copy-and-filter-allatori-config </dod> <shase> pacote </shase> <lects> <lection> copy-resources </as Goal> </conotent> <figuration> <putputDirectory> $ {baseado}/Target <putoldDirectory> <weethys> <weethdirectory> $ {Basedir}/Target <putoldDirectory> <Directory> $ {baseado}/allatori </diretório> <inclui> <cluir> allatori.xml </incluir> </inclui> <filtering> true </filtering> </suplys> </suplys> </figuration> </secution> </executões> </plugin> <plugin> <plupId> org.codeha. <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 -> </flugins> </fruct> <pendências> <!-teste começa-> <pendency> <voundid> junit </foupid> <stifactId> junit </stutifactId> <cope> teste </scope> </dependência> <!-end- <TRAFACTID> Spring-boot-Starter-web </starfactId> </pendesicency> </dependências> <aroger> <puerpiD> org.springframework.boot </groupiD> <TrAtifactId> Spring-Boot-Starter-Parent </ArtiftId> <BerS> 1.5.8.Release </versão> </versão> </versão </versão> </versão </versão> </versão </versão> </versão </versão> </versão </versão> </versão </versão </sulder> </versão </sulder> </sulder> </versão </sulder> </sully> </soundter-starter-parent </artif> <versão> 1.5.8.release </versão> Usando o maven para empacotar plug-in, a inicialização da mola cria a configuração do Allatori também é explicada acima. O que é mais importante na configuração do Allatori é:
<argumentos> $ {baseado} /lib/allatori.jar </gument> <argument> $ {baseado} /target/allatori.xml </gument> Especifique o caminho do arquivo alllatori.jar do Allatori. Se o seu projeto for um projeto POM, você pode colocar o diretório LIB no projeto pai e, em seguida, o projeto infantil só precisa:
<argument> ../ lib/allatori.jar </gument>
Apenas faça.
O arquivo allatori.xml também é muito importante, dê uma olhada no conteúdo dele:
<FIFG> <input> <jar in = "confusion-0.0.1-snapshot.jar" out = "confusion-0.0.1-snapshot-obfuscated.jar"/> </input> <te manuten> <classe de acesso = "proteged+"> <field = "proteged+"/> <método "" " value = "log.xml"/> </config>
Isto é, a configuração específica do ofuscador Allatori. Aqui você pode configurar muitas informações e várias estratégias, e também pode especificar quais classes não são ofuscadas. Vários métodos específicos podem ser obtidos na documentação no anexo no final do artigo.
O que precisa ser explicado aqui é:
<input> <jar in = "confusion-0.0.1-snapshot.jar" out = "confusion-0.0.1-snapshot-obfuscated.jar"/> </input>
Confusion-0.0.1-snapshot.jar é um pacote não obscecido após o pacote, enquanto o Confusion-0.0.1-snapshot-obfuscated.jar é um pacote ofuscado, que é o que precisamos.
Etapas de embalagem
1. Projeto Limpo Maven.
2. Copie o arquivo allatori.xml abaixo dos recursos para o diretório de destino.
3. Instale o projeto Maven e, depois de ver as seguintes informações, significa que é bem -sucedido:
#####Omas #####Omas Versão de demonstração! ## Não é para uso comercial! ### ## A versão de demonstração adiciona System.out's ## e dê 'allatori_demo' nome ## a alguns campos e métodos. ## ## ## OBFUSCAÇÃO POR ALLATORI OBFUSCATOR V6.4 Demo ## ## http://www.allatori.com ## ####################################–##################################################–#############################H####h#############################h####h###############h#############h######################h############################h##ws ####################################–##################################################–#############################H####h#############################h####h###############h#############h######################h############################h##ws ####################################–##################################################–#############################H####h#############################h####h###############h#############h######################h############################h##ws ######################################################Ws
4. Projeto bem -sucedido:
A seta aponta para o pacote de que precisamos e o código deste pacote foi ofuscado.
Visão de efeito
Aqui, usamos a ferramenta de descompilação para visualizar os pacotes ofuscados. Eu uso o software JD-Gui, que é pequeno e prático.
Antes da ofuscação do testApplication.java:
importar org.springframework.boot.springApplication; importar org.springframework.boot.autoconfigure.springbootapplication; @springbootapplicationpublic classe TestApplication {public static void main (string [] args) {springApplication.runication (testapplation {public static Main (string [] args) {springApplication.runication (TestAppLication {public STATID Main (string [] args) {SpringApplication.runication (TestAppLication {public STATID Main (string [] args) {springApplication.Runication (Testation {Testation. }} Após o testApplication.java, é ofuscado:
importar java.io.printStream; importar org.springframework.boot.springApplication; importar org.springframework.boot.autoconfigure.springbootapplication; @springbootapplicationpublic class {public static string allatorxdemo (string) (stringp) {public strats allAtatorxdemo (string) (stringp) {public static strat4; 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 = novo 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)); } retornar nova string (?); } public static void main (string [] a) { System.out.println ("/n ########################################################################################################################################################################################################d###################################################d###omas #####Omas ###Omas #####Omas ###Omas #####Omas ###Omas Allatori OBFUSCATOR V6.4 Demo #/n # #/n #http://www.allatori.com #/n # #/n#####################################################################################################/n"); SpringApplication.run (testApplication.class, a); }} Antes do testController.java ficar confuso:
importar org.springframework.web.bind.annotation.getmapping; importar org.springframework.web.bind.annotation.restcontroller; @restcontrollerpublic class; }}
Após o testController.java, é ofuscado:
importar org.springframework.web.bind.annotation.getmapping; importar org.springframework.web.bind.annotation.restcontroller; @restcontrollerpublic class string test () 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 = novo 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)); } retornar nova string (?); }} Hahaha, que tal, você não entende? E o pacote de ofuscação é executado como de costume sem problemas.
--------》 Código fonte do GitHub e endereço do documento "-------
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.