Безопасно хранить конфиденциальные данные в скомпилированном двоичном файле C ++?

Хорошо известно, что DLL, созданный .NET, можно легко декомпилировать. Это означает, что конфиденциальная информация (например, ключи шифрования) не должна храниться в бинарных файлах .NET.

Было бы разумной альтернативой хранить конфиденциальные данные в (например) бинарниках C ++, которые могли бы быть использованы моим кодом .NET? Я еще ничего не знаю о материалах для общения, но мне любопытно, можно ли это сделать. Я думаю, чтобы уточнить, мои вопросы:

  1. Может ли двоичный файл, созданный на C ++ (или C), легко декомпилироваться для доступа к конфиденциальным строковым данным?
  2. Является ли это полностью замаскированной идеей, потому что это не сработало, было бы очень сложно выполнить или потому, что существует гораздо лучшая альтернатива, которой я еще не встречался?
8
obfuscated код может быть декомпилирован.
добавлено автор John Smith, источник
obfuscated код может быть декомпилирован.
добавлено автор John Smith, источник
@David Я думаю, что он ссылается на security.stackexchange.com
добавлено автор GameScripting, источник
@David Я думаю, что он ссылается на security.stackexchange.com
добавлено автор GameScripting, источник
@Guillied: подфорум безопасности ??? Где я могу найти это?
добавлено автор David, источник
@Guillied: подфорум безопасности ??? Где я могу найти это?
добавлено автор David, источник
Это, на мой взгляд, относится к подфоруму безопасности SO.
добавлено автор Jeff Noel, источник
Это, на мой взгляд, относится к подфоруму безопасности SO.
добавлено автор Jeff Noel, источник
кто бы ни делал dotfuscator, мог заработать удачу, продавая декомпилятор для dotfuscator (и, конечно, профессионал-дофускатор ... и декомпилятор, а затем префикс дофускатора, а затем ... вы поняли идею)
добавлено автор gbjbaanb, источник
Если вы хотите хранить конфиденциальные данные, рассмотрите CryptProtectData и компанию.
добавлено автор Jerry Coffin, источник
Если вы хотите хранить конфиденциальные данные, рассмотрите CryptProtectData и компанию.
добавлено автор Jerry Coffin, источник
что при чтении вашего вопроса SO показывает ссылку на декомпилятор dotPeek: реактивные мозги. com/decompiler/& hellip; :)))
добавлено автор Davide Piras, источник
Yeap, глупый вопрос, мой плохой.
добавлено автор Sisyphe, источник
Yeap, глупый вопрос, мой плохой.
добавлено автор Sisyphe, источник
Не могли бы вы просто использовать Dotfuscator?
добавлено автор Sisyphe, источник
Не могли бы вы просто использовать Dotfuscator?
добавлено автор Sisyphe, источник

7 ответы

Ответ - нет. Хотя его истинная библиотека DLL .NET может быть декомпозирована в первоначальной структуре, а C ++ C ++ можно декомпилировать только в случае монстра, который компилятор будет любить, данные, которые хранятся там, будут размещены в большой, un -mangled, ведро, так что любой, кто знал, на какую часть смотреть (и, ок, все эти данные забиты близко друг к другу, поэтому становится трудно узнать, какой бит это), но данные будут там, чтобы все могли видеть.

Google для сегмента данных , в котором размещаются статические данные в бинарном файле native.

быстрое редактирование: конечно, вы можете хранить зашифрованную информацию в своем двоичном файле C ++, предварительно зашифровать ее, но вам придется использовать что-то еще для хранения ключа дешифрования (например, пароль пользователя Windows или аналогичный). .NET позволяет хранить конфиденциальную информацию в файле конфигурации и легко шифровать ее при первом запуске или установке, это зашифровывает и расшифровывает его на основе данных учетной записи пользователя, на которые работает приложение (так что не меняйте его и сохраняйте копию незашифрованный файл конфигурации где-то :-))

12
добавлено
@ Давид: Да, вы можете это сделать. Но это просто означает, что кто-то, кто хочет конфиденциальную информацию, не может просто сбросить таблицу строк, поэтому они должны подключить отладчик. Имейте в виду, что существуют люди, которые хорошо знакомы с отладкой скомпилированного кода, и они найдут вашу функцию обфускации и реконструируют ее, возможно, даже быстрее, чем потребовалось вам для ее разработки и написания. Обфускация просто добавляет удар скорости.
добавлено автор indiv, источник
@aleguna любые источники, чтобы доказать это?
добавлено автор GameScripting, источник
Предположительно, вы могли бы добавить чувствительные строковые данные в двоичный файл каким-то перепутанным способом и добавить некоторый тривиальный код в ваш двоичный файл C ++, который знает, как его снова собрать. Я не имею в виду правильное шифрование, просто средство его произвольного переупорядочения. Поэтому любой, кто смотрит на сегмент данных, не видит конфиденциальных данных, как есть, и не сможет декомпилировать фактический исходный код, чтобы увидеть, как его нужно переупорядочить.
добавлено автор David, источник
@aleguna - конечно, но это работает как DRM, где ключ встроен в плеер .. не хватило времени, чтобы хакеры взломали эти системы DRM и извлекли ключи. Как бы то ни было, ключи skype rc4 должны были взломан много лет назад
добавлено автор gbjbaanb, источник
По правде говоря, вы можете хранить конфиденциальные данные в двоичном формате, если знаете, что делаете. Skype делает это (ключи RC4), и никто до сих пор не смог его найти.
добавлено автор user1773602, источник

Ответ - нет. Хотя его истинная библиотека DLL .NET может быть декомпозирована в первоначальной структуре, а C ++ C ++ можно декомпилировать только в случае монстра, который компилятор будет любить, данные, которые хранятся там, будут размещены в большой, un -mangled, ведро, так что любой, кто знал, на какую часть смотреть (и, ок, все эти данные забиты близко друг к другу, поэтому становится трудно узнать, какой бит это), но данные будут там, чтобы все могли видеть.

Google для сегмента данных , в котором размещаются статические данные в бинарном файле native.

быстрое редактирование: конечно, вы можете хранить зашифрованную информацию в своем двоичном файле C ++, предварительно зашифровать ее, но вам придется использовать что-то еще для хранения ключа дешифрования (например, пароль пользователя Windows или аналогичный). .NET позволяет хранить конфиденциальную информацию в файле конфигурации и легко шифровать ее при первом запуске или установке, это зашифровывает и расшифровывает его на основе данных учетной записи пользователя, на которые работает приложение (так что не меняйте его и сохраняйте копию незашифрованный файл конфигурации где-то :-))

12
добавлено
@ Давид: Да, вы можете это сделать. Но это просто означает, что кто-то, кто хочет конфиденциальную информацию, не может просто сбросить таблицу строк, поэтому они должны подключить отладчик. Имейте в виду, что существуют люди, которые хорошо знакомы с отладкой скомпилированного кода, и они найдут вашу функцию обфускации и реконструируют ее, возможно, даже быстрее, чем потребовалось вам для ее разработки и написания. Обфускация просто добавляет удар скорости.
добавлено автор indiv, источник
@aleguna любые источники, чтобы доказать это?
добавлено автор GameScripting, источник
Предположительно, вы могли бы добавить чувствительные строковые данные в двоичный файл каким-то перепутанным способом и добавить некоторый тривиальный код в ваш двоичный файл C ++, который знает, как его снова собрать. Я не имею в виду правильное шифрование, просто средство его произвольного переупорядочения. Поэтому любой, кто смотрит на сегмент данных, не видит конфиденциальных данных, как есть, и не сможет декомпилировать фактический исходный код, чтобы увидеть, как его нужно переупорядочить.
добавлено автор David, источник
@aleguna - конечно, но это работает как DRM, где ключ встроен в плеер .. не хватило времени, чтобы хакеры взломали эти системы DRM и извлекли ключи. Как бы то ни было, ключи skype rc4 должны были взломан много лет назад
добавлено автор gbjbaanb, источник
По правде говоря, вы можете хранить конфиденциальные данные в двоичном формате, если знаете, что делаете. Skype делает это (ключи RC4), и никто до сих пор не смог его найти.
добавлено автор user1773602, источник

Строковые литералы могут быть прочитаны из native exe или dll

3
добавлено

Строковые литералы могут быть прочитаны из native exe или dll

3
добавлено

Всегда есть способ вынюхивать конфиденциальную информацию в вашем двоичном файле. Различия между двоичными файлами .NET и исходными двоичными файлами - сложность их обратного анализа (основная причина - запуск NET-кода на виртуальной машине процесса (VM), поэтому механизмы защиты .NET едва ли делают некоторые трюки за пределами VM). Как вы уже упоминали, исполняемые файлы .NET можно легко декомпилировать, даже если вы обфускали свой двоичный файл каким-то обфускатором, такие деобфускаторы, как de4dot может легко деактивировать его. Но обратный анализ родных двоичных файлов сложнее первого. В этой области есть много более эффективных механизмов защиты, таких как анти-отладка, обфускация виртуальной машины и т. Д. Эти методы могут сделать ваш код более безопасным, конечно, это относительная вещь.

3
добавлено

Ответ: ДА. Чувствительные данные могут храниться в скомпилированных двоичных файлах C ++. Люди, которые ничего не знают о безопасности, делают это все время.

1
добавлено
Я не был уверен, должен ли я ответить на +1 или -1 (я не проголосовал), потому что согласно чистому названию ваш ответ правильный, но это совсем не полезно. Я переименовал название вопроса, поэтому мне жаль, что теперь ваш ответ стал неправильным.
добавлено автор leemes, источник
Вы никогда не должны никогда, никогда, никогда этого не делать. Я бы никогда не использовал продукт, который сделал это.
добавлено автор Linuxios, источник
@aleguna: Ох. Я не. Я использую Google Voice, который, я надеюсь, будет немного лучше в этом отношении.
добавлено автор Linuxios, источник
Если вы хотите быть ироничным, поставьте это как комментарий, но не как ответ!
добавлено автор πάντα ῥεῖ, источник
@Linuxios, вы случайно используете skype? Ну, ты за сюрприз ...
добавлено автор user1773602, источник

Существуют различные степени безопасности с различными затратами и неудобствами для пользователей. Хранение ключей в коде довольно распространено, но не очень безопасно. Поскольку вы используете .NET, что подразумевает Windows, и вам может понадобиться изучить API защиты данных (DPAPI). Он шифрует данные, используя пароль пользователя Windows в качестве ключа.

Многие ноутбуки и серверы включают в себя чип Trusted Platform Module (TPM), который будет выполнять шифрование для вас и защищать ключ для вас.

1
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

Кибербезопасность АСУ ТП: RUSCADASEC Community
Кибербезопасность АСУ ТП: RUSCADASEC Community
1 389 участник(ов)

Группа открытого независимого сообщества специалистов по кибербезопасности АСУ ТП / RUSCADASEC для интерактивного обмена информацией по теме Подробнее: www.ruscadasec.ru Наш канал для основных новостей и материалов @RUSCADASECnews

secinfosec
secinfosec
697 участник(ов)

Эта группа про информационную безопасность. Целевая аудитория: пентестеры, ресерчеры, ибшники всех мастей. Реклама, криминал, политика и прочая чушь карается родовыми проклятьями. Митапы: https://www.youtube.com/channel/UCagEjp1FmxY9gsVxi6_d4SQ

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Chat Security / ИБач чат
Chat Security / ИБач чат
601 участник(ов)

Чат канала @ibach Обсуждение всего, что касается информационной безопасности Правила: https://t.me/chat_security/65

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest