«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как мы можем эффективно запутывать строки, встроенные в исполняемые двоичные файлы?

Как мы можем эффективно запутывать строки, встроенные в исполняемые двоичные файлы?

Опубликовано 22 декабря 2024 г.
Просматривать:688

How Can We Effectively Obfuscate Strings Embedded in Executable Binaries?

Запутывание строк в двоичном коде

Постановка задачи

Запутывание строк, встроенных в исполняемые двоичные файлы, полезно для защиты конфиденциальной информации, такой как ключи шифрования, от несанкционированного доступа. Однако простые методы, такие как сохранение строки в массиве символов, могут легко раскрыть ее содержимое во время анализа.

Решение

Чтобы эффективно скрыть строки в скомпилированных двоичных файлах, можно использовать более сложный подход. Рассмотрим следующий пример:

#include "HideString.h"

DEFINE_HIDDEN_STRING(EncryptionKey, 0x7f, ('M')('y')(' ')('s')('t')('r')('o')('n')('g')(' ')('e')('n')('c')('r')('y')('p')('t')('i')('o')('n')(' ')('k')('e')('y'))
DEFINE_HIDDEN_STRING(EncryptionKey2, 0x27, ('T')('e')('s')('t'))

int main()
{
    std::cout 

Этот код включает специальный макрос «DEFINE_HIDDEN_STRING» для шифрования заданной строки. Макрос кодирует каждый символ с использованием уникального ключа, полученного на основе предоставленного начального значения (например, «Мой надежный ключ шифрования» -> 0x7f). К последовательности символов применяется алгоритм шифрования на основе начального числа, в результате чего полученные данные выглядят случайными и их трудно идентифицировать в скомпилированном двоичном файле.

#define CRYPT_MACRO(r, d, i, elem) (elem ^ (d - i))
#define DEFINE_HIDDEN_STRING(NAME, SEED, SEQ) \
static const char* BOOST_PP_CAT(Get, NAME)() \
{ \
    static char data[] = { \
        BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_FOR_EACH_I(CRYPT_MACRO, SEED, SEQ)), \
        '\0' \
    }; \
    static bool isEncrypted = true; \
    if (isEncrypted) \
    { \
        for (unsigned i = 0; i 

Этот подход эффективно запутывает встроенные строки в двоичный код, что затрудняет их извлечение без знания ключа и алгоритма шифрования. Он обеспечивает баланс между безопасностью и простотой использования, предлагая удобный метод защиты конфиденциальной информации.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3