Применение Обратный Инженерная Защита / Закалка - PullRequest
3 голосов
/ 30 июня 2010

Я хочу защитить свои приложения от обратного инжиниринга.

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

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

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

Язык разработки - C ++но я бы с удовольствием взял примеры с любого языка.

Заранее благодарен за любую помощь.

Ответы [ 5 ]

4 голосов
/ 30 июня 2010

Боюсь, это не так просто.

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

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


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

1 голос
/ 09 апреля 2017

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

Упаковщики используются коммерческим программным обеспечением как наиболее эффективная обфускация и для уменьшения размера двоичного файла с помощьюего возможности сжатия.Они / также использовались (главным образом) примитивным вредоносным ПО.Осторожно, так как многие AV будут отмечать ваш двоичный файл как вредоносное ПО только для распознавания присутствия упаковщиков и самоизменяющегося / запутанного кода.

Ознакомьтесь с историей и состоянием техники в области анти-отладки вредоносных программ / вирусов и упаковщиков/ cryptors, есть несколько статей в журналах Phrack на эту тему, а также ресурсы на сайтах и ​​форумах по исследованию вирусов и вредоносных программ.Просто запомните , это только удары скорости.

Единственный правильный / непобедимый (не SpeedBump) способ сделать это - зашифровать код с помощью надежного алгоритма, такого какAES, а затем расшифровывает его с помощью ключа во время выполнения - но тогда пользователю нужен ключ для его запуска.Пре-общий ключ / пароль или коммерчески популярное решение для ключей являются наиболее распространенными, как упоминалось ранее)

EDIT : большинство упаковщиков и крипторов после компиляции по большей части не зависят от языка

1 голос
/ 30 июня 2010

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

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

Призывайте людей к честности, это проще для вас и, вероятно, столь же эффективно!

0 голосов
/ 02 июля 2010

Попробуйте запутать код так, чтобы он расстроил любого, кто пытался его реконструировать, или самоуничтожился, если кто-нибудь попытался вмешаться в него!

0 голосов
/ 30 июня 2010

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

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

Все программные схемы защиты могут быть более или менее легко обмануты.

...