Как скрыть строки в exe или dll?

В вашем адаптере поймайте ваш относительный макет в getView (), затем укажите параметры макета,

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)view.getLayoutParams();
params.setMargins(80, 0, 0, 0); //substitute parameters for left, top, right, bottom
YourRelativeLayoutInAdapter.setLayoutParams(params);
31
задан Spooky 19 June 2015 в 20:57
поделиться

8 ответов

Добро пожаловать в более широкий мир защитного программирования.

Есть несколько вариантов, но я считаю, что все они зависят от той или иной формы обфускации; что хоть и не идеально, но хоть что-то.

  1. Вместо простого строкового значения вы можете сохранить текст в какой-нибудь другой двоичной форме (шестнадцатеричной?).

  2. Вы можете зашифровать строки, которые хранятся в вашем приложении, затем расшифровать их во время выполнения.

  3. Вы можете разделить их по разным точкам вашего кода и воссоздать позже.

Или их комбинацию.

Имейте в виду, что некоторые атаки идут дальше, чем просто анализ двоичного кода. Иногда они исследуют адресное пространство памяти программы во время ее работы. MS придумала нечто, называемое SecureString в .Net 2.0 . Цель состоит в том, чтобы держать строки в зашифрованном виде во время работы приложения.

Четвертая идея состоит в том, чтобы не хранить строку в самом приложении, а полагаться на код проверки, который будет отправлен на сервер, который вы контролируете. На сервере вы можете проверить, действительно ли это «чит-код».

29
ответ дан 27 November 2019 в 21:52
поделиться

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

Просто имейте в виду: это все игра в кошки-мышки: невозможно до гарантировать , что никто не узнает ваш " секрет ».

Независимо от того, сколько шифрования или других уловок вы используете; независимо от того, сколько усилий или денег вы вложили в это. Неважно, сколько типов «НАСА / Массачусетский технологический институт / ЦРУ / АНБ» вовлечено в его сокрытие.

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

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

Лучшее, на что вы можете надеяться. ибо состоит в том, чтобы сделать настолько трудным раскрытие секрета, что любые выгоды, которые вы можете получить от знания секрета, не будут стоить хлопот.

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

Если у вас есть действительно критически секретная информация, которая так или иначе понадобится вашей программе, но НИКОГДА не должна стать общедоступной информацией (например, закрытый ключ), тогда вам нужно, чтобы ваша программа общалась с удаленным сервером под вашим управления, примените соответствующие элементы управления аутентификацией и авторизацией (, то есть убедитесь, что только одобренные люди или компьютеры могут сделать запрос к серверу ), и пусть этот сервер хранит секрет и использует его.

]
19
ответ дан 27 November 2019 в 21:52
поделиться

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

9
ответ дан 27 November 2019 в 21:52
поделиться

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

  • Создайте хэш (MD5, SHA и т. Д.) Строки / пароля / идентификатора, который вы хотите сравнить, возможно, добавьте к этому «соль». Сохраните это в своей программе
  • . Когда программа запускается, проделайте тот же алгоритм с входной строкой / паролем / идентификатором и сравните два хэша, чтобы увидеть, совпадают ли они.
6
ответ дан 27 November 2019 в 21:52
поделиться

Все ваши секретные коды будут идентификаторами GUID, или это был просто пример?

Возможно, вы сохраните свой секрет как двоичный идентификатор:

const GUID SecretGuid =
    { 0x4537774B, 0xCC80, 0x4eda, { 0x7A, 0x9E, 0xE7, 0x79, 0x91, 0xF5 } };

Затем преобразуйте предоставленный вами идентификатор из строки в двоичный формат и сравните два двоичных гида.

2
ответ дан 27 November 2019 в 21:52
поделиться

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

Если вы не хотите, чтобы люди видели ваш GUID, затем сконструируйте его из байтов, а не из строки:

const GUID SecretGuid = 
      { 0x4537774B, 0xCC80, 0x4eda, { 0x7A, 0x9E, 0xE7, 0x79, 0x91, 0xF5 } };
2
ответ дан 27 November 2019 в 21:52
поделиться

Лучшее, что вы можете сделать, это закодировать свой пароль или другую строку, которую вы хотите скрыть, как массив символов. Например:

std::string s1 = "Hello";   // This will show up in exe in hex editor
char* s2 = "World";   // this will show up in exe in hex editor
char s3[] = {'G', 'O', 'D'}; // this will not show up in exe in hex editor.
1
ответ дан 27 November 2019 в 21:52
поделиться

Есть URL для HTTP-запросов, которые я хотел бы также спрятаться.

Если ваше приложение делает запрос, нет смысла скрывать это. Запуск приложения, как Fiddler, HTTP Analyzer, или одна из десятков других бесплатных и легко доступных методов, покажет весь трафик вашего приложения.

5
ответ дан 27 November 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: