ZProtect
Code_Confusion je kodna neurejena kriptografska oznaka, ki vam omogoča, da izberete del kode, ki je v napačnem vrstnem redu
Vstavi kodo ({ 235, 8, 83, 84, 95, 83, 84, 65, 82, 84 }) ' Code_Confusion oznako za začetek
Vstavi kodo ({ 235, 8, 83, 84, 95, 83, 84, 69, 78, 68 }) ' Code_Confusion konec oznake
Code_Elimination je označevalec za čiščenje kode, ki vam omogoča, da izberete del kode, ki jo želite odstraniti iz pomnilnika po zagonu; Namen uporabe tega označevanja je preprečiti, da bi crackerji izločali celotno programsko kodo iz pomnilnika.
Vstavi kodo ({ 235, 8, 79, 67, 95, 83, 84, 65, 82, 84 }) ' Code_Elimination se začne oznaka
Vstavi kodo ({ 235, 8, 79, 67, 95, 79, 67, 69, 78, 68 }) ' Code_Elimination oznako na koncu
Decode_onExec je dinamična dekodirna oznaka, ki vam omogoča izbiro dela kode, ki je dešifrirana šele ob izvedbi; Ta del kode se dešifrira le, ko je treba izvajati, in je šifriran pred in po izvajanju
Vstavi kodo ({ 235, 8, 68, 89, 95, 83, 84, 65, 82, 84 }) // Decode_onExec se začne oznaka
Vstavi kodo ({ 235, 8, 68, 89, 95, 68, 89, 69, 78, 68 }) // Decode_onExec označi konec
Decode_onReg je registracijska oznaka za dekodiranje, ki vam omogoča izbiro dela kode, ki je dešifriran z veljavnim ključem; Če je registracijski ključ napačen, bo ta del kode vedno šifriran. Preprosto povedano, ta del kode se izvaja le v registrirani različici
V izvorni kodi je mogoče uporabiti poljubno število Decode_onReg oznak, vendar se ti odlomki kode dešifrirajo hkrati z izvajanjem. Oznaka za registracijsko dekodiranje se večinoma uporablja za aktivacijo omejenih funkcij v neregistrirani različici, da se ta registrira kot polna različica.
Vstavi kodo ({ 235, 8, 82, 68, 95, 83, 84, 65, 82, 84 }) // Decode_onReg se začne oznaka
Vstavi kodo ({ 235, 8, 82, 68, 95, 82, 68, 69, 78, 68 }) // Decode_onReg označi konec
Zprotect_VM je oznaka za šifriranje navideznega stroja, ki vam omogoča, da izberete del kode, ki jo vnesete v virtualni stroj za zagon; Sistem ukazov virtualnega stroja je popolnoma drugačen od obstoječih x86 ukazov, kar lahko učinkovito prepreči obnovo in analizo kode
Vstavi kodo ({ 235, 8, 86, 77, 95, 83, 84, 65, 82, 84 }) // Zprotect_VM označi za začetek
Vstavi kodo ({ 235, 8, 86, 77, 95, 86, 77, 69, 78, 68 }) // Zprotect_VM označi konec
----------- za različico ZProtect V1.4.9.0---------
VMProtect
Vstavite kodo ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP zaščita začetna zastavica
'Ključna koda
Vstavite kodo ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' VMP zaščita končna zastavica
SDK šifrirnega jezika Enigma
Vstavi kodo ({ 235, 10, 69, 67, 82, 79, 78, 69, 88, 69, 69, 67, 66 })' označi na začetku
'Ključna koda
Vstavi kodo ({ 235, 10, 69, 67, 82, 79, 78, 69, 88, 69, 67, 69 })' na koncu oznake
NoobyProtect SDK za šifrirni jezik
Vstavi kodo ({ 235, 6, 78, 80, 66, 69, 71, 78 })' na začetku
'Ključna koda
Vstavi kodo ({ 235, 6, 78, 80, 69, 78, 80 })' na koncu
Pangolin imenuje DEMO funkcionalnega šifrirnega jezika SDK
Na začetek postavite oznako kode ({ 235, 3, 214, 215, 1 })'
'Ključna koda
Označi kodo mesta ({ 235, 3, 214, 215, 0 })' na koncu oznake
ASP šifrirni jezik SDK
Vstavi kodo ({ 235, 4, 235, 5, 25, 1, 233, 37, 0 })' na začetku
'Ključna koda
Vstavi kodo ({ 235, 4, 235, 5, 41, 1, 233, 133, 0, })' na konec oznake
Shielden 2.0.1.0
Vstavi kodo ({ 235, 7, 83, 69, 66, 69, 71, 78, 0 }) ' SE_PROTECT_START
' Ključna koda
Vstavi kodo ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Vstavi kodo ({ 235, 7, 83, 69, 66, 69, 71, 78, 77 }) ' SE_PROTECT_START_MUTATION
Koda ključa
Vstavi kodo ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Vstavi kodo ({ 235, 7, 83, 69, 66, 69, 71, 78, 85 }) ' SE_PROTECT_START_ULTRA
Koda ključa
Vstavi kodo ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Vstavi kodo ({ 235, 7, 83, 69, 66, 69, 71, 78, 86 }) '
' Ključna koda
Vstavi kodo ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Enostavna metoda pretvorbe SDK v jeziku ↓
S podporo statične kompilacije E5.0 za standardne PE formate je postalo realnost uvedba šifrirnih shell-jev SDK-jev v E programih za izboljšanje kakovosti zaščite programske opreme.
SDK-je šifrirne lupine lahko približno razdelimo v dve kategoriji: ena je funkcionalni SDK in druga zaščitni SDK.
1. Funkcionalni SDK.
Za njegovo obdelavo se uporablja funkcionalni SDKSerijska številkaValidacija, preverjanje časa avtorizacije in druge funkcionalne operacije. Ta tip SDK ima različne funkcije, ki se neposredno uporabljajo v lupini, kot je WL; Obstajajo tudi zunanji DLL-ji, ki jih je treba uvesti, kot so pangolini.
Za DLL-je brez izhodnih tabel moramo z uporabo uvoznega zunanjega SDK naložiti DLL, nasloviti funkcijo v SDK in poklicati podprogram () v E, da enostavno zaključimo operacijo posredovanja parametrov za pridobitev vrnjene vrednosti funkcije SDK.
Za DLL-je z izhodnimi tabelami je v redu, da jih pokličete z DLL ukazom E.
Za tiste, ki že znajo klicati DLL-je, lahko rečemo, da je delovanje funkcionalnih SDK-jev enostavno za nadzor, samo poglejte specifičen API priročnik za lupino.
2. Šifrirani SDK
Ko šifrirna lupina odkrije specifično SDK oznako v programski opremi, bo uporabila ciljno usmerjeno metodo za obdelavo tega dela kode, da izboljša varnost določenega segmenta kode. Ta vrsta označevanja je naravno parno definirana asemblerska koda!
V enostavni različici lahko enostavno pokličemo asemblersko kodo z ukazom vstavi kodo (). Specifično za šifrirno lupino, ki uporablja ta del, sledimo naslednji metodi.
Odpri SDK, ki je priložen šifrirni lupini, in poišči datoteko z glavo jezika SDK, ki jo lahko prebereš. Na primer, datoteka z glavo LCC spodaj.
Sledi programska koda:
1 #elif definiran(__LCC__)
2 /* Prispeval Rubem Pechansky, 26. februar 2003 */
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(".bajt 0xEB,0x03,0xD6,0xD6,0x01");
6 #define SECUREEND_A _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
7 #define SECUREBEGIN_B _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x02");
8 #define SECUREEND_B _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
9 #define SECUREBEGIN_C _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x03");
10 #define SECUREEND_C _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
11 #define SECUREBEGIN_D _asm(".byte 0xEB,0x03,0xD6,0xD6,0x04");
12 #define SECUREEND_D _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
13 #define SECUREBEGIN_E _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x05");
14 #define SECUREEND_E _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
15 #define SECUREBEGIN_F _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x06");
16 #define SECUREEND_F _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
17 #define SECUREBEGIN_G _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x07");
18 #define SECUREEND_G _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
19 #define SECUREBEGIN_H _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x08");
20 #define SECUREEND_H _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
21 #define SECUREBEGIN_I _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x09");
22 #define SECUREEND_I _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
23 #define SECUREBEGIN_J _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x0A");
24 #define SECUREEND_J _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
25 #define SECUREBEGIN_K _asm(".bajt 0xEB,0x03,0xD6,0xD6,0x0B");
26 #define SECUREEND_K _asm(".bajt 0xEB,0x03,0xD6,0xD6,0xFF");
27 #define NANOBEGIN _asm(".bajt 0xEB,0x03,0xD6,0xD7,0x01");
28 #define NANOEND _asm(".bajt 0xEB,0x03,0xD6,0xD7,0x00");
Za pojasnilo v zadnjih dveh stavkih: NANOBEGIN in NANOEND sta CC kodna označevalca v jeziku C, in kodni izseki, ki jih ta dva označujeta, bodo CC zaščiteni s šifrirno lupino. NANOBEGIN je predstavljen z asemblersko kodo kot 0xEB, 0x03, 0xD6, 0xD7, 0x01, njegov stavek je heksadecimalna predstavitev C, sestavna izjava pa je predstavljena v decimalnem decimalnem sistemu v E. To pomeni, da moramo to kodo prevesti.
0xEB = 235
0x03 = 3
0xD6 = 214
0xD7 = 215
0x01 = 1
Nato je NANOBEGIN izražen v E kot vstavna koda ({235, 3, 214, 215, 1}).
|