Скрыть значения массива символов в C из памяти отладки - PullRequest
0 голосов
/ 11 июля 2019

Фон:

У меня есть запутанный C-код.Запутывание может только защитить логику алгоритма, но не может скрыть значения переменных от динамического анализа.Я хочу дополнительно скрыть некоторые значения (например, массив символов) из отладки памяти.

Платформа: мобильная клиентская часть (не связана с удаленным сервером)

Предположим, у меня есть секретный массив символов:

char secret[15] = {"hide this value"};

Можно ли скрыть это значение следующим образом:

  • для каждого элемента i, secret [i] = x1 [i] XOR x2 [i]
  • Только определять и хранить в памяти только символы x1 [] и char x2 []
  • При необходимости каждый раз использовать secret [], вызывать x1 [] XOR x2 [].Таким образом, секрет [] не может быть найден с помощью отладки памяти (динамический анализ)

Или любым другим способом?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Если у злоумышленника есть возможность свободно исследовать рабочую память вашей программы, например, с помощью отладчика, то внутри программы нет никаких секретов от них.В частности, шифрование данных в памяти не является надежной гарантией, потому что вы должны де зашифровать их, чтобы использовать их, после чего их можно легко перехватить.Но также ключ дешифрования должен находиться где-то в памяти, где его может найти ваш противник, и таким образом получить возможность расшифровывать зашифрованные данные в памяти по желанию.

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

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

1 голос
/ 11 июля 2019

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

Теперь, учитывая это, есть много ресурсов по запутыванию строк в двоичных файлах и в C, которые вы можете исследовать.

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

Вот несколько замечательных ресурсов: - Stack Exchange: защита данных, хранящихся в двоичном формате - Двоичное / строковое запутывание в C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...