Добавить уникальный отпечаток в файл

1

У меня есть набор файлов (скомпилированное программное обеспечение), которые я хочу дать уникальному отпечатку пальца перед дистрибутивом. Идея состоит в том, чтобы написать сценарий, который:

  1. Произвольно генерирует последовательность символов
  2. Добавляет последовательность символов в файл в проекте
  3. Хранит отпечаток пальца в базе данных с адресатом
  4. Распространяет программное обеспечение адресату

Требования к процессу отпечатков пальцев заключаются в следующем:

  • Отпечаток пальца трудно обнаружить (т.е. Не сохраняется в метаданных файла или в легкодоступных областях)
  • Отпечаток пальца не повреждает данные файла, в который добавлена последовательность
  • Отпечаток пальца можно добавить в исполняемый файл или файл dll
  • Легко прочитать отпечаток пальца, если вы знаете, где искать

Существуют ли какие-либо решения с открытым исходным кодом, которые создаются с целью отпечатки пальцев?

Теги:
powershell
jenkins

2 ответа

1

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

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

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

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

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

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

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

0

Поскольку вы говорите о скомпилированном программном обеспечении, возможно, альтернативным решением может быть использование execbinary encrypting tool. Когда вы запустите файл, он попросит пароль, если он будет прав, тогда он будет использовать пароль для генерации ключа. Затем он использует этот ключ для дешифрования программы непосредственно в памяти. Таким образом, они не смогут анализировать двоичный файл и даже с помощью ключа было бы намного сложнее сделать это, а тем более изменить его. Вы можете поместить в код столько отпечатков пальцев, сколько хотите, обычные текстовые строки, и они, скорее всего, останутся там.

  • 0
    Вы не можете реально защитить программу от анализа, если пользователь может выполнить ее. Программист, способный к обратному проектированию, может щелкнуть правой кнопкой мыши -> создать дамп в диспетчере задач и получить незашифрованный двоичный файл. Если вы хотите усложнить анализ - расшифруйте части двоичного файла, так как они необходимы для выполнения, и повторно зашифруйте после этого, используйте обфускацию и несколько (десятки) вложенных виртуальных машин. В этой игре вы хотите сделать RE настолько раздражающим, что хакер сдастся, и это явно не работает с решительными злоумышленниками.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню