Pregunta

Cómo ocultar código rápidamente. Tengo una muy pequeña Java App y quiero entregar el código ofuscado a mi cliente. He oído mucho acerca de ProGuard al código obfuscate y han descargado, pero doesn' t sabe cómo ofuscar mi "abc.jar" archivo.

he comprobado su sitio web, pero contiene una gran cantidad de material para leer. No necesito la ofuscación pesada. Sólo necesito un obfuscate que simplemente cambia el nombre de variables, métodos y clases para algunos ilegibles. Sé ProGuard proporcionar todo esto con una tonelada de otras funcionalidades también.

Q1. Así podría alguien decirme por favor un cierto ofuscadores simples o algunos pasos sencillos para usar Proguard de modo que pueda acaba de introducir "abc.jar" y emite "obfuscate_abc.jar" o algo sencillo de esa manera.

Q2. Una cosa más, como mi programa Java utiliza bibliotecas externas, por lo que debería necesitar para ofuscar las bibliotecas también?

Q3. ¿Hay alguna Eclipse o NetBeans Plugin dispongan para este ofuscación?

También he oído que debemos conservar el archivo de tabla de asignación con nosotros para que en el futuro podamos depurar o modificar ese código ofuscado por la primera de-ofuscar con la ayuda de que el mapeo de la tabla que fue creado en el momento de ofuscación .

Q4. Por lo tanto, es una pregunta más ¿Por qué necesitamos para mantener esa asignación-mesa con nosotros? Simplemente, puede conservar una copia de la solicitud no-ofuscado con el fin de cambios que realice en (si es necesario en el futuro). ¿Hay alguna razón para retener ese archivo de mapeo-mesa con nosotros?

¿Fue útil?

Solución

  

Q1. Así podría alguien decirme por favor un cierto ofuscadores simples o algunos pasos sencillos para usar Proguard de modo que pueda acaba de introducir "abc.jar" y emite "obfuscate_abc.jar" o algo tan simple como eso.

Simplemente de ProGuard, es sin duda una herramienta bueno (recomendado en muchas respuestas aquí en SO como éste , éste y éste ).

  

Q2. Una cosa más, como mi programa Java utiliza bibliotecas externas, por lo que si necesito para ofuscar las bibliotecas también?

No hay necesidad en mi humilde opinión (ni siquiera mencionar que es posible que no).

  

Q3. ¿Hay alguna Eclipse o NetBeans Plugin dispongan para este ofuscación?

Yo prefiero sugiere utilizar el Ant tareas o la Proguard-maven-plugin . Ver esta pregunta sobre el plugin de Maven, si es necesario.

  

Q4. Por lo tanto, es una pregunta más ¿Por qué necesitamos para mantener esa asignación-mesa con nosotros. Simplemente, puede conservar una copia de la solicitud no-ofuscado con el fin de cambios que realice en (si es necesario en el futuro). ¿Hay alguna razón para retener ese archivo de mapeo-mesa con nosotros?

Sí, "traducir" StackTrace.

Otros consejos

He intentado esto desde el principio. Debe empezar. Creo que la clave será entender las "Opciones de separación" en el archivo de configuración.

El uso de este código:

import java.util.*;

public class Example {

    public static void main(String... args) {
        Example ex = new Example();
        ex.go();
    }

    public void go() {
        String[] strings = { "abc", "def", "ijk" };
        for (String s : strings) {
            System.out.println(s);
        }
    }

}

I creó una Example.jar. Copié el proguard.jar desde el directorio lib ProGuard, y encontré esta línea de comandos

java -jar proguard.jar @myconfig.pro

donde myconfig.pro contiene:

-injars Example.jar
-outjars ExampleOut.jar
-libraryjars <java.home>/lib/rt.jar

-keep public class Example {
    public static void main(java.lang.String[]);
}

Esto produce ExampleOut.jar que contiene la misma funcionalidad y se ofuscado (verificado con JAD). Tenga en cuenta que no hizo uso de un manifiesto, por lo que la funcionalidad de prueba, y se prueba unjarred la clase. Ejecución de puntos de entrada dentro de los tarros se dejan para el lector.

Hay muchas más opciones que figuran keep en la sección Uso .

Sólo es necesario para ofuscar las otras bibliotecas en el caso en que es necesario protegerlos de lo que usted piensa ofuscación está haciendo por su código. Sin embargo, usted debe leer las licencias para esas otras bibliotecas para ver si se restringen de distribuir versiones modificadas.

respecto P4: El mapeo se utiliza cuando los usuarios le envíen informes de errores que contienen stacktraces de excepción desde el código ofuscado. ProGuard le permite traducir estas stacktraces de nuevo a los nombres de las clases originales y números de línea si usted tiene la asignación.

Sólo respondiendo a Q4 ...

Hay una buena razón para mantener la asignación. Si el cliente nunca le envía un StackTrace, puede ser muy útil para saber en qué parte del código que StackTrace vino. El propósito de un ofuscador es deshacerse de esa información ;-) Al mantener el mapeo, se habilita la conversión de la StackTrace en donde el problema se produjo en el código original.

puedo responder a la pregunta 4. Debe conservar para la depuración. Digamos que tienes un error en la función "printTheAlphabet ()" en la línea 23, después de ofuscar el seguimiento de la pila podría decir algo como "Error en j6z9r () en la línea 27", que hace que sea bastante imposible localizar el error en el código fuente.

Como código obfuscate rápido y sucio:

Inténtelo: http://www.daftlogic.com/projects- línea-javascript-obfuscator.htm o: http://javascriptobfuscator.com/default.aspx o Google "javascript ofuscador en línea".

Yo sé que es para Javascript, pero se puede obtener la resultado de la función utilizando un eval Javascript para Java (echar un vistazo a: https://stackoverflow.com/a/2605051/450148)

No es la mejor aprouch, pero puede ser útil si usted está realmente en un apuro y usted no es un paranoico de la seguridad.

EDIT: La siguiente pieza de código utiliza la sencilla ROT13 de no exponer directamente su contraseña. Lo bueno es el "hacker" no sabe qué algoritmo que utiliza (se puede reemplazar ROT13 para el que algoritmo de estado similares), pero aún así es muy fácil de romper hacia abajo:

static String password;

static {
    password = a("NXVNWQX5CHXRWTKGDMHD");
}

private static String a(String b) {
    String c = "eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c])}}return p}('k a(b){2 5=\\'\\';o(2 i=0;i<b.e;i++){2 c=b.g(i);2 1=b.f(i);4(c>=\\'a\\'&&c<=\\'m\\')1+=3;6 4(c>=\\'n\\'&&c<=\\'9\\')1-=3;6 4(c>=\\'7\\'&&c<=\\'h\\')1+=3;6 4(c>=\\'7\\'&&c<=\\'p\\')1-=3;2 d=8.l(1);5+=d}j 5}',26,26,'|charcode|var|13|if|sb|else|A|String|z|||||length|charCodeAt|charAt|M||return|function|fromCharCode|||for|Z'.split('|'),0,{}));";

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("js");
    Object z = "";

    //noinspection EmptyCatchBlock
    try {
        z = engine.eval(c + " a('" + b + "');");
    } catch (ScriptException e) {}

    return z.toString();
}

He tenido un rápido vistazo a yGuard antes y me gustó el hecho de que pudiera integrar los ofuscación pasos en un script Ant. Esto le permite utilizar muy fácilmente en Eclipse, etc, si lo desea.

La documentación que viene con proporcionar una serie de scripts Ant hechas listos para empezar. Estos sólo tiene que ser modificado para que funcione con su diseño de proyectos, es decir, el establecimiento de los nombres de los paquetes correctos, etc.

Si no está clara sobre cómo llegar hormiga va en Eclipse, que prácticamente sólo tiene que añadir un archivo build.xml al proyecto, copia el script de ejemplo que viene con yGuard en ella, modificar la secuencia de comandos para trabajar con su proyecto y ejecute la tarea yGuard desde el punto de vista de la hormiga.

Con respecto a su pregunta tabla de asignación. La única razón que se me ocurre es posible que tenga algo como esto sería si no se puede replicar un error sus exposiciones tarro ofuscado, de su código original. En este punto, puede que tenga que trabajar con la versión ofuscado, tal vez para determinar si la ofuscación ha causado un problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top