Подтвердить что ты не робот

Обфускация C-основанных двоичных файлов во избежание декомпиляции

Есть ли способ обфускации исполняемых файлов или библиотек на основе C, чтобы предотвратить декомпиляцию?

4b9b3361

Ответ 1

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

Тогда люди будут готовы заплатить за это.

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

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

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

Ознакомьтесь с серией статей, которые работают над techdirt относительно CwF + RtB (подключайтесь к поклонникам плюс причина для покупки). Я обнаружил, что многие из поднятых вопросов могут быть применимы к индустрии программного обеспечения.

Ответ 2

Простой способ: купите продукт упаковщика/криптоватора/обфускатора. Некоторые из них дороги и используются в играх, некоторые - нет. Google для них по ключевым словам, например, "защита от копирования" и т.д.

Быстрый способ: пакет с UPX, а затем запустите заголовок где-нибудь, чтобы он все еще загружался в памяти и работать нормально, но утилита upx завершится с ошибкой (попробуйте поле версии). 95% откажется, если утилита upx завершится с ошибкой.

Трудный путь: напишите свой собственный упаковщик.

О, я забыл:

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

Ответ 3

с полной оптимизацией.

Ответ 4

"obfuscated executables" не имеет смысла. Аппаратное обеспечение должно быть в состоянии "понять" код, способный его выполнить, и это может понять аппаратное обеспечение, это может понять обратный инженерный человек. Самое большее, что вы можете сделать, это сделать более утомительным, чтобы понять, но, вероятно, не очень, и ценой.

Ответ 5

Сделать это сложнее? Конечно. Пожалуйста, не делайте этого.

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

Ответ 6

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

Если вы говорите о написании нового кода, попробуйте Self Modyfing C Code, который, вероятно, будет самым сложным способом для разработки вашего приложения.

Ответ 7

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

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

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

Ответ 8

Зачем запутывать код, если есть коммерческая прибыль? Честно говоря, предположим, что коммерческий код достаточно оптимизирован и запутан, и работает, то мать все неловкое произошло - сбой... вы застряли imho, так как производственный двоичный код запутан, что усложняет отлаживать, где происходит сбой и трудно реплицироваться, он будет застрял в списке BUGS навсегда...

Например, пытаясь найти трассировку стека, вы в конечном итоге потеряете больше волос, а затем попытаетесь выяснить, не собранный код для разработки WTF происходит там, бесконечные петли спагетти-петель. Короче говоря, не надо!

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

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

Ответ 9

Декомпиляция (No More Gotos) и обе практики обфускации (Flowtables) и теории (Obfuscation Obluscation) являются активными областями исследований, и поэтому нет решений - только инструменты, методы и опыт. Если вы действительно хотите, чтобы ваш код был непроницаемым для декомпликации, создайте веб-приложение и поставьте сторону чувствительного кода сервера. Но если вы придерживаетесь модели предоставления кому-то двоичного кода, тогда вы должны мудро судить о компромиссе, который вы хотите сделать между безопасностью и производительностью. Обфускация идет ценой и все еще никогда не бывает совершенной. Некоторые параметры

  • Используйте упаковщик, отличный от UPX (UPX поставляется во многих дистрибутивах Linux). Производительность низкая, и у большинства людей нет навыков ручной распаковки двоичного файла для статического анализа. Но для опытных реверсоров стоимость распаковки несущественна.
  • Отъезд Tigress, диверсифицирующий виртуализатор/обфускатор с богатыми возможностями для обфускации исходного источника. Для лучшей производительности полагайтесь на поддерживающие преобразования, выравнивание потока управления, слияние/разделение функций, буквенное кодирование.
  • Если вы хотите еще большую защиту, проверьте основные трансформации Tigress: виртуализация, JITing и т.д., но я уверен, что они более дороги, и ваши пользователи могут замечать замедление, если вы используете эти преобразования.

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

Ответ 10

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

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

Ответ 11

Tiny C компилятор, модифицированный для создания обфускационного кода: http://blogs.conus.info/node/58

Ответ 12

Чтобы дать некоторую теоретическую поддержку для ответов здесь: в 2001 году Barak et. al. доказал, что обфускация программы невозможна вообще.

Ответ 13

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