ZProtect
Code_Confusion — це криптографічний тег коду поза порядком, який дозволяє вибрати частину коду, що не в порядку
Вставити код ({ 235, 8, 83, 84, 95, 83, 84, 65, 82, 84 }) ' Code_Confusion позначки для початку
Вставити код ({ 235, 8, 83, 84, 95, 83, 84, 69, 78, 68 }) ' Code_Confusion кінці позначки
Code_Elimination — це маркер очищення коду, який дозволяє вибрати частину коду для видалення з пам'яті після запуску; Мета використання цієї розмітки — запобігти тому, щоб хакери могли скидати повний програмний код з пам'яті.
Вставити код ({ 235, 8, 79, 67, 95, 83, 84, 65, 82, 84 }) ' починається Code_Elimination тег
Вставити код ({ 235, 8, 79, 67, 95, 79, 67, 69, 78, 68 }) ' Code_Elimination позначки в кінці
Decode_onExec — це динамічна розмітка для декодування, яка дозволяє вибрати частину коду, що розшифровується лише під час виконання; Ця частина коду декодується лише тоді, коли її потрібно виконати, і шифрується до та після виконання
Вставити код ({ 235, 8, 68, 89, 95, 83, 84, 65, 82, 84 }) // Decode_onExec починається тег
Вставити код ({ 235, 8, 68, 89, 95, 68, 89, 69, 78, 68 }) // Decode_onExec позначити кінець
Decode_onReg — це тег декодування реєстрації, який дозволяє вибрати частину коду, розшифровану за допомогою дійсного ключа; Якщо реєстраційний ключ неправильний, ця частина коду завжди буде зашифрована. Простими словами, ця частина коду виконується лише у зареєстрованій версії
У вихідному коді можна використовувати будь-яку кількість тегів Decode_onReg, але ці фрагменти коду розшифровуються одночасно з виконанням. Тег декодування реєстрації головним чином використовується для активації обмежених функцій у незареєстрованій версії з метою реєстрації як повної версії.
Вставити код ({ 235, 8, 82, 68, 95, 83, 84, 65, 82, 84 }) // Decode_onReg тег починається
Вставити код ({ 235, 8, 82, 68, 95, 82, 68, 69, 78, 68 }) // Decode_onReg позначити кінець
Zprotect_VM — це тег шифрування віртуальної машини, який дозволяє обрати частину коду для завантаження у віртуальну машину; Система інструкцій віртуальної машини повністю відрізняється від існуючих інструкцій x86, що може ефективно перешкоджати відновленню та аналізу коду
Вставити код ({ 235, 8, 86, 77, 95, 83, 84, 65, 82, 84 }) // Zprotect_VM позначки для початку
Вставити код ({ 235, 8, 86, 77, 95, 86, 77, 69, 78, 68 }) // Zprotect_VM позначити кінець
----------- для версії ZProtect V1.4.9.0---------
VMProtect
Вставити код ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' прапорець запуску захисту VMP
'Код клавіші
Вставте код ({ 235, 14, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 101, 110, 100, 0 }) ' кінцевий прапорець захисту VMP
SDK мови шифрування Enigma
Вставте код ({ 235, 10, 69, 67, 82, 79, 78, 69, 69, 69, 69, 69, 67, 66 })' на початку
'Код клавіші
Вставити код ({ 235, 10, 69, 67, 82, 79, 78, 69, 69, 88, 69, 69, 67, 69 })' в кінці знака
NoobyProtect SDK для мови шифрування
Вставити код ({ 235, 6, 78, 80, 66, 69, 71, 78 })' на початку
'Код клавіші
Вставте код ({ 235, 6, 78, 80, 69, 78, 68, 80 })' в кінці
Pangolin викликає DEMO функціональної мови шифрування SDK
Поставте позначку коду ({ 235, 3, 214, 215, 1 })' на початку
'Код клавіші
Позначка коду місця ({ 235, 3, 214, 215, 0 }) в кінці позначки
Мова шифрування ASP SDK
Вставити код ({ 235, 4, 235, 5, 25, 1, 233, 37, 0 })' на початку
'Код клавіші
Вставте код ({ 235, 4, 235, 5, 41, 1, 233, 133, 0, })' в кінці позначки
Шілден 2.0.1.0
Вставити код ({ 235, 7, 83, 69, 66, 69, 71, 78, 0 }) ' SE_PROTECT_START
' Код клавіші
Вставити код ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Вставити код ({ 235, 7, 83, 69, 66, 69, 71, 78, 77 }) ' SE_PROTECT_START_MUTATION
Код клавіші
Вставити код ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Вставити код ({ 235, 7, 83, 69, 66, 69, 71, 78, 85 }) ' SE_PROTECT_START_ULTRA
Код клавіші
Вставити код ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Вставити код ({ 235, 7, 83, 69, 66, 69, 71, 78, 86 }) '
' Код клавіші
Вставити код ({ 235, 7, 83, 69, 69, 78, 68, 80, 0 }) ' SE_PROTECT_END
Метод конвертації SDK простою мовою ↓
Завдяки підтримці статичної компіляції E5.0 для стандартних форматів PE, стало реальністю впровадження SDK shell шифрування в програмах E для підвищення якості захисту програмного забезпечення.
SDK shell шифрування можна приблизно поділити на дві категорії: одна — функціональна SDK, інша — захисна.
1. Функціональний SDK.
Для цього використовується функціональний SDKСерійний номерВалідація, перевірка часу авторизації та інші функціональні операції. Цей тип SDK має різні функції, які безпосередньо застосовуються в оболонці, наприклад, WL; Існують також зовнішні DLL, які потрібно вводити, наприклад, панголінів.
Для DLL без таблиць виходу, використовуючи зовнішній імпортний SDK, потрібно завантажити DLL, адресувати функцію в SDK і викликати команду підпрограми () у E, щоб легко завершити операцію передачі параметрів і отримати повернене значення функції SDK.
Для DLL з таблицями виводу можна викликати їх командою DLL E.
Для тих, хто вже знає, як викликати DLL, роботу функціональних SDK можна легко контролювати — просто подивіться на конкретний посібник API оболонки.
2. Зашифрований SDK
Після того, як оболонка шифрування виявляє певний тег SDK у програмному забезпеченні, вона використовує цільовий метод обробки цього фрагмента коду з метою підвищення безпеки конкретного сегмента коду. Такий тип розмітки природно є парним асемблерним кодом!
У легкому режимі ми можемо легко викликати асемблерний код за допомогою команди вставки коду () Специфічно для оболонки шифрування, що використовує цей елемент, ми дотримуємося наступного методу.
Відкрийте SDK, що йде в комплекті з shell шифрування, і знайдіть заголовок SDK мови, який можна прочитати. Наприклад, нижче наведено заголовок LCC.
Нижче наведено програмний код:
1 #elif визначено(__LCC__)
2 /* Надано Рубемом Печанським, 26 лютого 2003 */
3 #define SECURESTART _asm(".byte 0xEB,0x03,0xD6,0xD6,0x00");
4 #define SECUREEND _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
5 #define SECUREBEGIN_A _asm(".byte 0xEB,0x03,0xD6,0xD6,0x01");
6 #define SECUREEND_A _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
7 #define SECUREBEGIN_B _asm(".байт 0xEB,0x03,0xD6,0xD6,0x02");
8 #define SECUREEND_B _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
9 #define SECUREBEGIN_C _asm(".байт 0xEB,0x03,0xD6,0xD6,0x03");
10 #define SECUREEND_C _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
11 #define SECUREBEGIN_D _asm(".байт 0xEB,0x03,0xD6,0xD6,0x04");
12 #define SECUREEND_D _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
13 #define SECUREBEGIN_E _asm(".байт 0xEB,0x03,0xD6,0xD6,0x05");
14 #define SECUREEND_E _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
15 #define SECUREBEGIN_F _asm(".байт 0xEB,0x03,0xD6,0xD6,0x06");
16 #define SECUREEND_F _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
17 #define SECUREBEGIN_G _asm(".байт 0xEB,0x03,0xD6,0xD6,0x07");
18 #define SECUREEND_G _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
19 #define SECUREBEGIN_H _asm(".байт 0xEB,0x03,0xD6,0xD6,0x08");
20 #define SECUREEND_H _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
21 #define SECUREBEGIN_I _asm(".байт 0xEB,0x03,0xD6,0xD6,0x09");
22 #define SECUREEND_I _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
23 #define SECUREBEGIN_J _asm(".байт 0xEB,0x03,0xD6,0xD6,0x0A");
24 #define SECUREEND_J _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
25 #define SECUREBEGIN_K _asm(".байт 0xEB,0x03,0xD6,0xD6,0x0B");
26 #define SECUREEND_K _asm(".байт 0xEB,0x03,0xD6,0xD6,0xFF");
27 #define NANOBEGIN _asm(".байт 0xEB,0x03,0xD6,0xD7,0x01");
28 #define NANOEND _asm(".байт 0xEB,0x03,0xD6,0xD7,0x00");
Пояснюючи в останніх двох реченнях, NANOBEGIN і NANOEND — це розмітки CC-кодових фрагментів мовою C, і фрагменти коду, обгорнуті цими двома розмітками, будуть захищені CC shell шифрування. NANOBEGIN представлений кодом асемблера у вигляді 0xEB, 0x03, 0xD6, 0xD7, 0x01, його речення є шістнадцятковим представленням C, а оператор асемблера представлений у десятковій десятковій знаці в E. Тобто нам потрібно перекласти цей код.
0xEB = 235
0x03 = 3
0xD6 = 214
0xD7 = 215
0x01 = 1
Тоді NANOBEGIN виражається в E як код вставки ({235, 3, 214, 215, 1}).
|