ZProtect
Code_Confusion es una etiqueta criptográfica de código fuera de orden que te permite seleccionar una parte del código que está fuera de orden
Insertar código ({ 235, 8, 83, 84, 95, 83, 84, 65, 82, 84 }) ' Code_Confusion marca para empezar
Insertar código ({ 235, 8, 83, 84, 95, 83, 84, 69, 78, 68 }) ' Code_Confusion final de la marca
Code_Elimination es un marcador de purga de código que permite seleccionar una porción de código que se eliminará de la memoria tras ejecutarlo; El propósito de usar este marcado es evitar que los crackers volquen el código completo del programa de la memoria.
Insertar código ({ 235, 8, 79, 67, 95, 83, 84, 65, 82, 84 }) ' Code_Elimination etiqueta comienza
Insertar código ({ 235, 8, 79, 67, 95, 79, 67, 69, 78, 68 }) ' Code_Elimination marca al final
Decode_onExec es un marcado dinámico de decodificación que permite seleccionar una parte de código que solo se descifra cuando se ejecuta; Esta parte del código se decodifica solo cuando necesita ser ejecutada, y se cifra antes y después de la ejecución
Insertar código ({ 235, 8, 68, 89, 95, 83, 84, 65, 82, 84 }) // Decode_onExec etiqueta comienza
Inserta código ({ 235, 8, 68, 89, 95, 68, 89, 69, 78, 68 }) // Decode_onExec marcar el final
Decode_onReg es una etiqueta de decodificación de registro que permite seleccionar una parte del código que se descifra con una clave válida; Si la clave de registro es incorrecta, entonces esta parte del código siempre estará cifrada. En términos sencillos, esta parte del código solo se ejecuta en la versión registrada
Se pueden usar cualquier número de etiquetas de Decode_onReg en el código fuente, pero estos fragmentos de código se descifran al mismo tiempo que se ejecutan. La etiqueta de decodificación de registro se utiliza principalmente para activar características restringidas en la versión no registrada para registrarla como versión completa.
Insertar código ({ 235, 8, 82, 68, 95, 83, 84, 65, 82, 84 }) // comienza Decode_onReg etiqueta
Insertar código ({ 235, 8, 82, 68, 95, 82, 68, 69, 78, 68 }) // Decode_onReg marcar el final
Zprotect_VM es una etiqueta de cifrado de máquina virtual que te permite seleccionar una porción de código para poner en la máquina virtual y ejecutarla; El sistema de instrucciones de la máquina virtual es completamente diferente de las instrucciones x86 existentes, lo que puede impedir eficazmente la restauración y el análisis de código
Insertar código ({ 235, 8, 86, 77, 95, 83, 84, 65, 82, 84 }) // Zprotect_VM marcar para empezar
Insertar código ({ 235, 8, 86, 77, 95, 86, 77, 69, 78, 68 }) // Zprotect_VM marcar fin
----------- para ZProtect versión V1.4.9.0---------
VMProtect
Inserta el código ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' Bandera de inicio de protección VMP
'Código clave
Insertar el código ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 0 }) ' Bandera final de protección VMP
El SDK del lenguaje de cifrado Enigma
Marque el código ({ 235, 10, 69, 67, 82, 79, 78, 69, 88, 69, 69, 69, 67, 66 })
'Código clave
Insertar código ({ 235, 10, 69, 67, 82, 79, 78, 69, 88, 69, 88, 69, 67, 69 }) al final de la marca
SDK NoobyProtect para el lenguaje de cifrado
Marque el código ({235, 6, 78, 80, 66, 69, 71, 78 }) al principio
'Código clave
Insertar código ({ 235, 6, 78, 80, 69, 78, 68, 80 }) al final
Pangolin llama al DEMO del lenguaje de cifrado funcional SDK
Coloca la marca del código ({235, 3, 214, 215, 1 })' al principio
'Código clave
Marca del código de colocación ({ 235, 3, 214, 215, 0 }) al final de la marca
SDK del lenguaje de cifrado ASP
Insertar código ({ 235, 4, 235, 5, 25, 1, 233, 37, 0 }) al principio
'Código clave
Inserta el código ({ 235, 4, 235, 5, 41, 1, 1, 233, 0, })' al final de la marca
Shielden 2.0.1.0
Insertar código ({ 235, 7, 83, 69, 66, 69, 71, 78, 0 }) ' SE_PROTECT_START
' Código de tecla
Insertar código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Insertar código ({ 235, 7, 83, 69, 66, 69, 71, 78, 77 }) ' SE_PROTECT_START_MUTATION
Código de tecla
Insertar código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Insertar código ({ 235, 7, 83, 69, 66, 69, 71, 78, 85 }) ' SE_PROTECT_START_ULTRA
Código de tecla
Insertar código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Insertar código ({ 235, 7, 83, 69, 66, 69, 71, 78, 86 }) '
' Código de tecla
Insertar código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Método de conversión del SDK de lenguaje sencillo ↓
Con el soporte de compilación estática E5.0 para formatos PE estándar, se ha hecho realidad introducir SDKs de shell de cifrado en programas E para mejorar la calidad de la protección del software.
Los SDKs de shell de cifrado pueden dividirse aproximadamente en dos categorías: una es SDK funcional y la otra es SDK protector.
1. SDK funcional.
Se utiliza un SDK funcional para gestionarloNúmero de serieValidación, verificación en tiempo de autorización y otras operaciones funcionales. Este tipo de SDK tiene varias funciones aplicadas directamente en la shell, como WL; También hay DLLs externas que deben introducirse, como los pangolines.
Para DLLs sin tablas de salida, usando el SDK externo de importación, necesitamos cargar el DLL, dirigir la función en el SDK y llamar al comando subprograma () en E para completar fácilmente la operación de pasar parámetros y obtener el valor de retorno de la función SDK.
Para DLLs con tablas de salida, está bien llamarlas con el comando DLL de E.
Para quienes ya saben cómo llamar a DLLs, se puede decir que el funcionamiento de SDKs funcionales es fácil de controlar, solo hay que echar un vistazo al manual específico de la API del shell.
2. SDK cifrado
Una vez que el shell de cifrado detecta una etiqueta SDK específica en el software, utilizará un método dirigido para procesar este fragmento de código y así mejorar la seguridad del segmento de código específico. ¡Este tipo de marcado es naturalmente un código ensamblador definido por pares!
En el fácil, podemos llamar fácilmente al código ensamblador usando el comando insertar código (). Específicamente para la shell de cifrado que utiliza esta pieza, seguimos el siguiente método.
Abre el SDK que viene con el shell de cifrado y busca un archivo de cabecera del SDK de lenguaje que puedas leer. Por ejemplo, el archivo de cabecera del LCC que aparece a continuación.
El siguiente es el código del programa:
1 #elif definido(__LCC__)
2 /* Proporcionado por Rubem Pechansky, 26Feb2003 */
3 #define SECUREBEGIN _asm(".byte 0xEB,0x03,0xD6,0xD6,0x00");
4 #define SECUREEND _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF");
5 #define SECUREBEGIN_A _asm(".byte 0xEB,0x03,0xD6,0xD6,0x01»);
6 #define SECUREEND_A _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
7 #define SECUREBEGIN_B _asm(".byte 0xEB,0x03,0xD6,0xD6,0x02");
8 #define SECUREEND_B _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
9 #define SECUREBEGIN_C _asm(".byte 0xEB,0x03,0xD6,0xD6,0x03»);
10 #define SECUREEND_C _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
11 #define SECUREBEGIN_D _asm(".byte 0xEB,0x03,0xD6,0xD6,0x04");
12 #define SECUREEND_D _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
13 #define SECUREBEGIN_E _asm(".byte 0xEB,0x03,0xD6,0xD6,0x05");
14 #define SECUREEND_E _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
15 #define SECUREBEGIN_F _asm(".byte 0xEB,0x03,0xD6,0xD6,0x06»);
16 #define SECUREEND_F _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
17 #define SECUREBEGIN_G _asm(".byte 0xEB,0x03,0xD6,0xD6,0x07»);
18 #define SECUREEND_G _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
19 #define SECUREBEGIN_H _asm(".byte 0xEB,0x03,0xD6,0xD6,0x08");
20 #define SECUREEND_H _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
21 #define SECUREBEGIN_I _asm(".byte 0xEB,0x03,0xD6,0xD6,0x09»);
22 #define SECUREEND_I _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
23 #define SECUREBEGIN_J _asm(".byte 0xEB,0x03,0xD6,0xD6,0x0A»);
24 #define SECUREEND_J _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
25 #define SECUREBEGIN_K _asm(".byte 0xEB,0x03,0xD6,0xD6,0x0B»);
26 #define SECUREEND_K _asm(".byte 0xEB,0x03,0xD6,0xD6,0xFF»);
27 #define NANOBEGIN _asm(".byte 0xEB,0x03,0xD6,0xD7,0x01");
28 #define NANOEND _asm(".byte 0xEB,0x03,0xD6,0xD7,0x00");
Para explicar en las dos últimas frases, NANOBEGIN y NANOEND son marcados de fragmentos de código CC en lenguaje C, y los fragmentos de código envueltos en estos dos marcados estarán protegidos CC por la shell de cifrado. NANOBEGIN se representa mediante código ensamblador como 0xEB, 0x03, 0xD6, 0xD7, 0x01, su oración es la representación hexadecimal de C, y la sentencia ensambladora se representa en decimal decimal en E. Es decir, necesitamos traducir este código.
0xEB = 235
0x03 = 3
0xD6 = 214
0xD7 = 215
0x01 = 1
Entonces NANOBEGIN se expresa en E como un código de inserción ({235, 3, 214, 215, 1}).
|