Добавить уникальный отпечаток в файл - PullRequest
0 голосов
/ 29 июня 2018

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

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

Требования к процессу снятия отпечатков пальцев таковы:

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

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

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

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

0 голосов
/ 29 июня 2018

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

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

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

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

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

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

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

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