ocultación del código fuente de Java
El siguiente pasaje está extraído del libro "Introducción a la programación Java móvil/PDA", que puede usarse como una descripción general del rendimiento del ofuscador:
No lo he usado DashO, por lo que no puedo comentar personalmente sobre su evaluación. Así que ahora sólo describiré los productos que he utilizado. Desde la perspectiva personal del autor, ZKM es el mejor, JAX está en el medio, RetroGuard y ProGuard son los peores. Es la eterna verdad de que obtienes lo que pagas. Sin embargo, si ZKM y JAX son buenos en términos de funcionalidad, JAX es un producto desarrollado por IBM, por lo que también hereda la característica más importante de la mayoría de los productos de IBM, que es "súper funcional, pero difícil de usar". Simplemente leer el archivo de configuración de JAX puede ser un gran problema.
A continuación se presentan varios mezcladores representativos y se compara el rendimiento de sus productos. Usamos diferentes ofuscadores para ofuscar el mismo código Java, enumerar los resultados de la descompilación del código ofuscado y brindar una experiencia de uso directa.
Código java original:
La clase pública SimpleBean implementa Serializable {
cadena privada[] nombre = {"nombre0", "nombre1", "nombre2", " nombre 3 " };
Lista de distribución personal myList = null
public void SimpleBean() {
mi lista = new ArrayList(4); p>
p>
}
public void init_public() {
mi lista add(" nombre ");
for(. int I = 1; i<4;i++){
init _ privado(I);
}
}
privado void init_private (int j ) {
mi lista . add(name[j]);
}
Objeto de escritura vacío privado (Java . io . flujo de salida del objeto). ) p>
Lanza IOException {
}
}
1. ProGuard 4.5.1
ProGuard es un Compresor, optimizador y ofuscador de archivos Java Class gratuito. Puede encontrar y eliminar clases, campos, métodos y propiedades inútiles. También optimiza el código de bytes, eliminando instrucciones inútiles. Finalmente, cambia el nombre de sus clases, nombres de campos y nombres de métodos con nombres simples y sin sentido. Después de las operaciones anteriores, el archivo jar se volverá más pequeño y será difícil realizar ingeniería inversa. Eclipse integra Proguard. Admite control de scripts, interfaz GUI, cadenas no cifradas y J2ME.
Ofuscador de código abierto con funciones similares:
Reverse Guard Iguade (una versión mejorada de Reverse Guard) JODE
Jad descompila la clase ofuscada obtenida Código: p>
Clase pública SimpleBean
Implementar serialización
{
Pública SimpleBean()
{
a _ java _ util _ List _ fld = null
}
public void SimpleBean()
{
a _ Java _ util _ Lista _ fld = new ArrayList(4);
}
public void init_public()
{
a _ Java _ util _ List _ fld . add(" nombre ");
for(int I = 1; i<4;i++)
{
int j. = I;
SimpleBean simplebean = this
a _ Java _ util _ List _ fld . add(simple bean . a _ Java _ lang _ String_array 1d_fld[j]);
}
}
Cadena privada a_Java_lang_String_array 1d_fld[ ]= {
"Nombre0", "Nombre1", "Nombre2", " Name3"
};
Lista privada a_java _ util _ List _ fld
}
Ventajas:
1. Los métodos privados internos se llaman en línea, pero básicamente no se logra el efecto de confusión;
2. La documentación es detallada y hay muchos ejemplos de archivos de configuración de opciones de ofuscación;
3. Las opciones de ofuscación son muy detalladas y la interfaz GUI se puede utilizar para admitir la protección de métodos locales.
4. Soporta j2me y se puede integrar en Eclipse
5.
Desventajas:
1. El nombre de ofuscación del símbolo es sugerente, la cadena no está cifrada y no existen otras medidas de ofuscación.
2. es principalmente para Xlet y Midlet. Cuando otras aplicaciones y archivos de biblioteca se confunden, el archivo de configuración será muy complicado.
En segundo lugar, con humor
JOCky es el trabajo personal del Sr. Yuan Honggang, el líder técnico de Kingdee Middleware (anteriormente conocido como Joc). Originalmente destinado a facilitar el desarrollo de los servidores de aplicaciones Apusic, ahora está abierto a todos para su uso gratuito. El compilador ofuscado Jocky se basa en el compilador Java (javac) proporcionado por Sun JDK. Modifique el proceso de generación de código, ofusque el código intermedio generado por el compilador y finalmente genere archivos de clase, de modo que la compilación y la ofuscación solo deban completarse en un solo paso. En otras palabras, funciona directamente desde el código fuente, que es la mayor diferencia entre Jocky y otros compiladores confusos. Además, se pueden insertar instrucciones de conservación de símbolos en el programa fuente para controlar qué símbolos deben conservarse, y el proceso de ofuscación se puede integrar con el proceso de desarrollo sin la necesidad de un archivo de configuración de opciones de ofuscación independiente. Las características anteriores de Jocky son más adecuadas para el caos de las bibliotecas de clases Java.
Jad descompila el código obtenido de la clase ofuscada:
La clase pública SimpleBean
implementa la serialización
{
Public SimpleBean()
{
Esto;
Cadena como[]= nueva Cadena[4];
como ;
as[0]= " nombre 0 ";
as;
intercambio JVM INSTR;
1;
"nombre 1";
JVM INSTR aastore
Dup de instrucción JVM
Intercambio JVM INSTR;
2;< /p >
"Nombre 2";
JVM INSTR aastore
Dup de instrucción JVM
Intercambio JVM INSTR;
3;
"Nombre 3";
JVM INSTR aastore
_$2;
_ $ 1 = nulo;
Regresar;
}
public void SimpleBean()
{
Esto;
JVM INSTR nuevo # 9 <Class array list>
Dup de instrucción JVM
Intercambio JVM INSTR;
4;
ArrayList ();
_$1;
}
public void init_public()
{
_ $ 1. add(" nombre ");
for(int I = 1;i<4;i++)
_ $ 1㈠;
} p>
Vacío privado _ $1(int i)
{
_ $ 1 agregar(_ $ 2[I]); void writeObject(flujo de salida del objeto flujo de salida del objeto)
Lanza IOException
{
}
Private String_$2[]; p>
Lista de mensajes privados_$1;
}
Ventajas:
1, excepto que la confusión de símbolos también agrega confusión de datos (inicialización de matriz de caracteres);
2. Algunas declaraciones solo pueden obtener instrucciones de código de bytes mediante descompilación;
3. En Sun JDK se completa según el compilador de Java (javac) La compilación y la ofuscación se completan una vez. , Y no es necesario generar un archivo de clase y luego ofuscarlo;
4. Se proporciona un complemento de Eclipse y Jocky se puede usar directamente en Eclipse.
Desventajas:
1. Las opciones de ofuscación son generales y pueden requerir que se agregue la directiva @preserve al código específico, lo que requiere una gran carga de trabajo;
2. No hay confusión en el flujo de control.
Tres. Alatori 3.1 _Demo
Alatori es un ofuscador de segunda generación y tiene la capacidad de proteger su propiedad intelectual en todos los aspectos. Allatori tiene los siguientes métodos de protección: ofuscación de nombres, ofuscación de transmisiones, ofuscación de información de depuración, codificación de cadenas y tecnología de marca de agua. Este ofuscador es un proyecto educativo gratuito y no comercial. La versión 2.1 admite formatos de archivos war y ear y permite agregar fechas efectivas a aplicaciones que requieren código ofuscado.
Jad descompila el código obtenido de la clase ofuscada:
La clase pública SimpleBean
implementa la serialización
{
public void init_public()
{
d . add(c . k(" { u { 0 "));
int I = 1;
ir a _L1
_L3:
h(一);
++ I;
_L1:
4;
JVM INSTR icmplt 21;
Ir a L2 L3
_L2:
}
public void SimpleBean()
{
d = nueva lista de matrices (4
}
); void privado H(int a)
{
d . add(c[a]);
}
SimpleBean público (. )
{
d =null;
}
Vacío privado H(flujo de salida del objeto flujo de salida del objeto)
Lanza IOException
{
}
Cadena privada c[] = {
c.k("\177q \177te " ), c.k("\177q\177td "), c.k("\177q\177tg "), c.k("\177q\177tf ")
};
Lista privada d ;
}
Nota: c.k es un método estático de clase C, que además se genera para el cifrado de cadenas.
Ventajas:
1. El diseño tiene en cuenta los escenarios de uso de ofuscación de archivos de biblioteca.
2 La documentación es detallada y tiene muchos ejemplos de ofuscación. archivos de configuración de opciones;
3. Además de la ofuscación de símbolos, también se utilizan dos métodos de ofuscación avanzados: ofuscación de control (reescritura de bucles) y cifrado de cadenas (inicialización de matrices de cadenas); 4. Las opciones de ofuscación son muy detalladas y admiten protección de método parcial.
5. Admite tecnología de marca de agua, lo que permite agregar la fecha de vigencia al código que debe ofuscarse.
6. Admite j2me;
1, software comercial (precio adjunto), gratuito para uso educativo y no comercial (el enlace URL es /price.html).
Adjunto: Precios
Licencia de desarrollador única
1 licencia $290
2-5 licencias $260
6 Licencia -10 $230
Licencia 11+ $200
Licencia de sitio web $3750
Licencia comercial $4850
Actualizaciones anuales de soporte $45
Cuarto, Zelix KlassMaster (ZKM)
Zelix KlassMaster es un producto comercial de Zelix Pty Ltd Obfuscator, su función de ofuscación rara vez se introduce en los documentos oficiales. Su función de protección es muy poderosa, puede realizar ofuscación de símbolos y ofuscación de control, y admite cadenas, ofuscación de pila, reconstrucción de excepciones, ofuscación incremental y protección de cifrado complejo J2ME. Zelix KlassMaster ofrece una versión de prueba disponible en.
Verbo (abreviatura de verbo) DashO Pro
DashO Pro es un ofuscador comercial desarrollado por Preemptive Solutions. Una versión de evaluación gratuita está disponible para descargar. La protección de código DashO Pro es potente, fácil de usar, conveniente y flexible (software comercial, no de código abierto). Este ofuscador de Java es la elección de Sun. Para aplicaciones empresariales, Sun Microsystems utiliza DashO Pro para ofuscar sus bibliotecas criptográficas como parte de su paquete de desarrollo Java. Dashoporo puede cambiar el nombre de los ID para convertirlos en caracteres sin sentido; desordenar el flujo de control de cambios, etc. , todas estas operaciones hacen que el código Java sea confuso y difícil de entender.
Las características del producto incluyen:
Mecanismo líder de protección del código fuente de Java;
Uso de tecnología patentada de inducción de sobrecarga para cambiar el nombre de paquetes/clases/métodos/campos;
Control de procesos avanzado mecanismo de ofuscación;
Tecnología de cifrado de cadenas;
Evita que el descompilador genere resultados útiles;
Software de marca de agua;
Mejora la eficiencia del código fuente Java código;
Eliminar completamente el repositorio constante sin clases/métodos/campos;
Optimizar a nivel de clase/método para mejorar el efecto JIT;
p>Carga dinámica de clases detectadas;
Extensión e implementación de código fuente Java integral y eficiente;
Soporta todas las versiones de JDK (JSE, J2EE, J2ME, etc.);
Automático conversión de seguimiento de pila;
Paquetes o javajars en rutas especificadas
Admite cualquier contenido Java empaquetado: programas, bibliotecas, aplicaciones pequeñas, programas de servidor pequeños, EJB, etc. Soporta la arquitectura J2ME CLDC, incluyendo MIDP e iAppli;
Clases de soporte de biblioteca de verificación previa CLDC;
Se puede extraer de rutas específicas, paquetes Zip o jars;
Soporta exportación de Java 100% puro y proporciona verificación;
La interfaz de línea de comandos es adecuada para la integración en el entorno de compilación;
Archivo de configuración basado en XML, simple y fácil de usar;
p>
Guía de usuario completa y precisa en formato PDF.