ZProtect
Code_Confusion é uma tag criptográfica de código fora de ordem que permite selecionar uma parte do código que está fora de ordem
Insira código ({ 235, 8, 83, 84, 95, 83, 84, 65, 82, 84 }) ' Code_Confusion marca para começar
Insira código ({ 235, 8, 83, 84, 95, 83, 84, 69, 78, 68 }) ' Code_Confusion fim da marca
Code_Elimination é um marcador de purga de código que permite selecionar uma parte do código a ser removida da memória após a execução; O objetivo de usar essa marcação é evitar que os crackers despejem o código completo do programa da memória.
Inserir código ({ 235, 8, 79, 67, 95, 83, 84, 65, 82, 84 }) ' Code_Elimination marca começa
Insira código ({ 235, 8, 79, 67, 95, 79, 67, 69, 78, 68 }) ' Code_Elimination marca no final
Decode_onExec é uma marcação dinâmica de decodificação que permite selecionar uma parte do código que só é descriptografada quando executada; Essa parte do código é decodificada apenas quando precisa ser executada, e é criptografada antes e depois da execução
Inserir código ({ 235, 8, 68, 89, 95, 83, 84, 65, 82, 84 }) // Decode_onExec início da tag
Insira código ({ 235, 8, 68, 89, 95, 68, 89, 69, 78, 68 }) // Decode_onExec marcar o fim
Decode_onReg é uma tag de decodificação de registro que permite selecionar uma parte do código que é descriptografada com uma chave válida; Se a chave de registro estiver incorreta, essa parte do código estará sempre criptografada. Em termos simples, essa parte do código só é executada na versão registrada
Qualquer número de tags de Decode_onReg pode ser usado no código-fonte, mas esses trechos de código são descriptografados ao mesmo tempo em que são executados. A tag de decodificação de registro é usada principalmente para ativar recursos restritos na versão não registrada para registrá-la como versão completa.
Inserir código ({ 235, 8, 82, 68, 95, 83, 84, 65, 82, 84 }) // Decode_onReg marca começa
Inserir código ({ 235, 8, 82, 68, 95, 82, 68, 69, 78, 68 }) // Decode_onReg marcar o fim
Zprotect_VM é uma tag de criptografia de máquina virtual que permite selecionar uma parte do código para ser colocada na máquina virtual a ser executada; O sistema de instruções da máquina virtual é completamente diferente das instruções x86 existentes, o que pode efetivamente impedir a restauração e análise de código
Insira código ({ 235, 8, 86, 77, 95, 83, 84, 65, 82, 84 }) // Zprotect_VM marcar para começar
Inserir código ({ 235, 8, 86, 77, 95, 86, 77, 69, 78, 68 }) // Zprotect_VM marcar fim
----------- para a versão ZProtect V1.4.9.0---------
VMProtect
Insira o código ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' Bandeira de início de proteção VMP
'Código-chave
Insira o código ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 0 }) ' Bandeira final de proteção VMP
O SDK da linguagem de criptografia Enigma
Insira o código ({ 235, 10, 69, 67, 82, 79, 78, 69, 88, 69, 69, 69, 67, 66 }) no início
'Código-chave
Insira o código ({ 235, 10, 69, 67, 82, 79, 78, 69, 88, 89, 69, 67, 69 }) no final da marca
SDK NoobyProtect para a linguagem de criptografia
Insira o código ({ 235, 6, 78, 80, 66, 69, 71, 78 }) no início
'Código-chave
Insira o código ({ 235, 6, 78, 80, 69, 78, 68, 80 }) no final
Pangolin chama o DEMO da linguagem de criptografia funcional SDK
Coloque a marca do código ({ 235, 3, 214, 215, 1 })' no início
'Código-chave
Marca do código de colocação ({ 235, 3, 214, 215, 0 }) no final da marca
SDK da linguagem de criptografia ASP
Insira o código ({ 235, 4, 235, 5, 25, 1, 233, 37, 0 }) no início
'Código-chave
Insira o código ({ 235, 4, 235, 5, 41, 1, 1, 233, 133, 0, })' no final da marca
Shielden 2.0.1.0
Inserir código ({ 235, 7, 83, 69, 66, 69, 71, 78, 0 }) ' SE_PROTECT_START
' Código de Tecla
Inserir código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Inserir código ({ 235, 7, 83, 69, 66, 69, 71, 78, 77 }) ' SE_PROTECT_START_MUTATION
Código de teclas
Inserir código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Inserir código ({ 235, 7, 83, 69, 66, 69, 71, 78, 85 }) ' SE_PROTECT_START_ULTRA
Código de teclas
Inserir código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Inserir código ({ 235, 7, 83, 69, 66, 69, 71, 78, 86 }) '
' Código de Tecla
Inserir código ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Método de conversão fácil do SDK de linguagem ↓
Com o suporte da compilação estática E5.0 para formatos PE padrão, tornou-se realidade introduzir SDKs de shell de criptografia em programas E para melhorar a qualidade da proteção de software.
SDKs de shell de criptografia podem ser divididos aproximadamente em duas categorias: uma é SDK funcional e a outra é SDK protetor.
1. SDK funcional.
O SDK funcional é usado para lidar com issoNúmero de sérieValidação, verificação do tempo de autorização e outras operações funcionais. Esse tipo de SDK possui várias funções diretamente aplicadas no shell, como WL; Também existem DLLs externas que precisam ser introduzidas, como os pangolins.
Para DLLs sem tabelas de saída, usando o SDK externo de importação, precisamos carregar a DLL, endereçar a função no SDK e chamar o comando do subprograma () em E para completar facilmente a operação de passar parâmetros e obter o valor de retorno da função SDK.
Para DLLs com tabelas de saída, é aceitável chamá-las com o comando DLL E.
Para quem já sabe como chamar DLLs, a operação dos SDKs funcionais pode ser considerada fácil de controlar, basta dar uma olhada no manual específico da API do shell.
2. SDK criptografado
Após o shell de criptografia descobrir uma tag específica de SDK no software, ele usará um método direcionado para processar esse pedaço de código e melhorar a segurança do segmento de código específico. Esse tipo de marcação é, naturalmente, um código assembly definido por pares!
No modo fácil, podemos chamar facilmente o código assembly usando o comando insert code (). Especificamente para a casca de criptografia usando esta parte, seguimos o seguinte método.
Abra o SDK que vem com o shell de criptografia e encontre um arquivo de cabeçalho do SDK de linguagem que você possa ler. Por exemplo, o arquivo de cabeçalho do LCC abaixo.
A seguir está o código do programa:
1 #elif definido(__LCC__)
2 /* Fornecido por Rubem Pechansky, 26Fev2003 */
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 nas duas últimas frases, NANOSTART e NANOEND são marcações de trechos de código CC na linguagem C, e os trechos de código envolvidos por essas duas marcações serão protegidos CC pelo shell de criptografia. NANOSTART é representado por código assembly como 0xEB, 0x03, 0xD6, 0xD7, 0x01, sua frase é a representação hexadecimal de C, e a instrução assembly é representada em decimal decimal em E. Ou seja, precisamos traduzir esse código.
0xEB = 235
0x03 = 3
0xD6 = 214
0xD7 = 215
0x01 = 1
Então NANOSTART é expresso em E como um código de inserção ({235, 3, 214, 215, 1}).
|