ZProtect
Code_Confusion è un tag crittografico fuori ordine del codice che permette di selezionare una parte del codice fuori ordine
Inserisci codice ({ 235, 8, 83, 84, 95, 83, 84, 65, 82, 84 }) ' Code_Confusion segna per iniziare
Inserisci codice ({ 235, 8, 83, 84, 95, 83, 84, 69, 78, 68 }) ' Code_Confusion fine del marchio
Code_Elimination è un marcatore di purga del codice che permette di selezionare una porzione di codice da rimuovere dalla memoria dopo l'esecuzione; Lo scopo di questo markup è impedire ai cracker di scaricare l'intero codice del programma dalla memoria.
Inserisci codice ({ 235, 8, 79, 67, 95, 83, 84, 65, 82, 84 }) ' Code_Elimination inizio del tag
Inserisci codice ({ 235, 8, 79, 67, 95, 79, 67, 69, 78, 68 }) ' Code_Elimination segna alla fine
Decode_onExec è un markup di decodifica dinamica che permette di selezionare una porzione di codice che viene decrittata solo quando viene eseguita; Questa parte del codice viene decodificata solo quando deve essere eseguita, ed è criptata prima e dopo l'esecuzione
Inserisci codice ({ 235, 8, 68, 89, 95, 83, 84, 65, 82, 84 }) // Decode_onExec tag inizia
Inserire codice ({ 235, 8, 68, 89, 95, 68, 89, 69, 78, 68 }) // Decode_onExec segnare la fine
Decode_onReg è un tag di decodifica di registrazione che permette di selezionare una parte del codice decrittata con una chiave valida; Se la chiave di registrazione è errata, allora questa parte del codice sarà sempre criptata. In termini semplici, questa parte del codice viene eseguita solo nella versione registrata
Un numero qualsiasi di tag di Decode_onReg può essere utilizzato nel codice sorgente, ma questi frammenti di codice vengono decriptati contemporaneamente all'esecuzione. Il tag di decodifica della registrazione viene utilizzato principalmente per attivare le funzionalità limitate nella versione non registrata per registrarla come versione completa.
Inserisci codice ({ 235, 8, 82, 68, 95, 83, 84, 65, 82, 84 }) // Decode_onReg inizio del tag
Inserisci codice ({ 235, 8, 82, 68, 95, 82, 68, 69, 78, 68 }) // Decode_onReg segnare la fine
Zprotect_VM è un tag di crittografia per la macchina virtuale che permette di selezionare una porzione di codice da inserire nella macchina virtuale da eseguire; Il sistema di istruzioni della macchina virtuale è completamente diverso dalle istruzioni x86 esistenti, il che può efficacemente impedire il ripristino e l'analisi del codice
Inserisci codice ({ 235, 8, 86, 77, 95, 83, 84, 65, 82, 84 }) // Zprotect_VM segna per iniziare
Inserisci codice ({ 235, 8, 86, 77, 95, 86, 77, 69, 78, 68 }) // Zprotect_VM segna fine
----------- per ZProtect versione V1.4.9.0---------
VMProtect
Inserisci il codice ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' Bandiera di avvio della protezione VMP
'Codice chiave
Inserire il codice ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' Flag di protezione VMP
L'SDK del linguaggio di crittografia Enigma
Inserisci il codice ({ 235, 10, 69, 67, 82, 79, 78, 69, 88, 69, 69, 69, 67, 66 }) all'inizio
'Codice chiave
Inserisci il segno del codice ({ 235, 10, 69, 67, 82, 79, 78, 69, 69, 88, 69, 67, 69 }) alla fine del segno
SDK NoobyProtect per il linguaggio di crittografia
Inserisci il codice ({ 235, 6, 78, 80, 66, 69, 71, 78 }) all'inizio
'Codice chiave
Inserisci il codice ({ 235, 6, 78, 80, 69, 78, 68, 80 })' alla fine
Pangolin chiama il DEMO del linguaggio di crittografia funzionale SDK
Metti il segno del codice ({ 235, 3, 214, 215, 1 })' all'inizio
'Codice chiave
Segna il codice di posizionamento ({ 235, 3, 214, 215, 0 })' alla fine del segno
SDK del linguaggio di crittografia ASP
Inserisci il codice ({ 235, 4, 235, 5, 25, 1, 233, 37, 0 }) all'inizio
'Codice chiave
Inserisci codice ({ 235, 4, 235, 5, 41, 1, 233, 133, 0, })' alla fine del segno
Shielden 2.0.1.0
Inserisci codice ({ 235, 7, 83, 69, 66, 69, 71, 78, 0 }) ' SE_PROTECT_START
' Codice di tasti
Inserisci codice ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Inserisci codice ({ 235, 7, 83, 69, 66, 69, 71, 78, 77 }) ' SE_PROTECT_START_MUTATION
Codice di tasti
Inserisci codice ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Inserisci codice ({ 235, 7, 83, 69, 66, 69, 71, 78, 85 }) ' SE_PROTECT_START_ULTRA
Codice di tasti
Inserisci codice ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Inserisci codice ({ 235, 7, 83, 69, 66, 69, 71, 78, 86 }) '
' Codice di tasti
Inserisci codice ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Metodo di conversione SDK di linguaggio semplice ↓
Con il supporto della compilazione statica E5.0 per i formati PE standard, è diventato reale introdurre gli SDK di crittografia shell nei programmi E per migliorare la qualità della protezione software.
Gli SDK della shell di crittografia possono essere grossomodo suddivisi in due categorie: una è SDK funzionale e l'altra è SDK protettivo.
1. SDK funzionale.
Funzionalmente si utilizza un SDK funzionale per gestirloNumero di serieValidazione, verifica del tempo di autorizzazione e altre operazioni funzionali. Questo tipo di SDK ha varie funzioni applicate direttamente nello shell, come WL; Ci sono anche DLL esterni che devono essere introdotti, come i pangolini.
Per le DLL senza tabelle di output, utilizzando l'importazione esterna SDK, dobbiamo caricare la DLL, indirizzare la funzione nell'SDK e chiamare il comando sottoprogramma () in E per completare facilmente l'operazione di passaggio dei parametri e ottenere il valore di ritorno della funzione SDK.
Per le DLL con tabelle di output, va bene chiamarle con il comando DLL di E.
Per chi già sa come chiamare le DLL, il funzionamento degli SDK funzionali può essere considerato facile da controllare, basta dare un'occhiata al manuale specifico dell'API della shell.
2. SDK criptato
Dopo che la shell di crittografia scopre un tag SDK specifico nel software, utilizzerà un metodo mirato per elaborare questo pezzo di codice al fine di migliorare la sicurezza del segmento di codice specifico. Questo tipo di markup è naturalmente un codice assembly definito da coppie!
Nel modo facile, possiamo facilmente chiamare il codice assembly usando il comando inserisci codice (). Specificamente per la shell di crittografia che utilizza questo pezzo, seguiamo il seguente metodo.
Apri l'SDK che viene fornito con la shell di crittografia e trova un file di header del linguaggio SDK che puoi leggere. Ad esempio, il file di intestazione del LCC qui sotto.
Di seguito è riportato il codice programma:
1 #elif definito(__LCC__)
2 /* Fornito da 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");
Per spiegare nelle ultime due frasi, NANOBEGIN e NANOEND sono markup di snippet di codice CC in linguaggio C, e gli snippet di codice avvolti da questi due markup saranno protetti da CC dalla shell di crittografia. NANOBEGIN è rappresentato dal codice assembly come 0xEB, 0x03, 0xD6, 0xD7, 0x01, la sua frase è la rappresentazione esadecimale di C, e l'istruzione assembly è rappresentata in decimale decimale in E. Cioè, dobbiamo tradurre questo codice.
0xEB = 235
0x03 = 3
0xD6 = 214
0xD7 = 215
0x01 = 1
Poi NANOSTART è espresso in E come codice di inserimento ({235, 3, 214, 215, 1}).
|