Метка «обфускатор»

Неявные предикатыРечь здесь пойдёт о некоторых аспектах компьютерной безопасности, связанных с запутыванием кода программы. Именно это мне было интересно в связи с разработкой обфускатора .NET приложений – программы для защиты .NET кода от взлома. Есть и другая – тёмная сторона: запутыванием кода очень интересуются разработчики вирусов и других нехороших штук, но нам они неинтересны.

Эмуляторы

Итак, Вы придумали супер алгоритм для запутывания кода программы. При декомпиляции код выглядит просто вырвиглазно и никто точно такое анализировать не будет. Казалось: победа! Но нет. Естественно обфусцированный код никто анализировать не будет… руками. Хакер поймёт как вы код запутывали и напишет «распутывалку». Если Ваш алгоритм был достаточно силён, то хакеру придётся писать собственный эмулятор, но и это не такая проблема как может показаться на первый взгляд – в сети есть доступные эмуляторы и даже специально написанные именно для целей взлома.

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

if ((x*x & 1) == 0)
  good_code
else
  мусор

«Но это же как раз одна из тех запутывалок, которые хакер и собирается обходить с помощью эмулятора» — скажете Вы и будете правы. А что если придумать тысячу подобных фокусов? О, это решение, если у Вас есть легион программистов, каждый из которых придумывает трюки не похожие на трюки других. В реальности это не так. В реальности Вы думаете неделю и придумываете тридцать трюков, а хакер смотрит на код один день и находит все тридцать трюков, потому что тридцать – это не так уж много.

Читать полностью »

Привет! Мы плодотворно трудились над нашим продуктом, и сегодня я хочу поделиться новостями. Для тех, кто не читал предыдущих топиков (1 и 2), напомню, что мы разрабатываем онлайн сервис для защиты .NET приложений. Процесс обфускации происходит непосредственно в облаке по модели SaaS.

Расскажу немного о нововведениях.

Программа-клиент

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

obfuscation program C#

Программа распространяется как OpenSource (лицензия MIT), все желающие могут ознакомиться с исходниками. В дальнейшем, мы планируем вынести API в отдельный модуль, для легкой интеграции с другими программами.

Программа пока бета, заранее приносим извинения за возможные баги.

Control flow obfuscation

В AppFuscator добавлен новый алгоритм защиты Control flow obfuscation — запутывание потока управления. Суть этого метода заключается в разделении алгоритма программы на отдельные компоненты и построение из них сложно-связанного графа переходов. В итоге логику работы кода понять становиться весьма не просто.
Читать полностью »

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

В новой версии

Новое ядро WPF обфускации

  • Теперь классы, задействованные в WPF, не исключаются, а обфусцируются наравне со всеми остальными. WPF ресурсы при этом пересобираются
  • Поддерживается линкинг сборок содержащих WPF (что невозможно сделать в ILMerge)
  • Умные автоматические исключения классов и полей недопустимых к переименованию, в том числе для сложных выражений типа PropertyPath
  • BAML ресурсы переименовываются

image
(нажмите для увеличения)

Поддержка Unity 3D

  • Переименовываются все внутренние методы, поля и классы
  • Поддерживаются все режимы, включая String Encryption, External Method Call Hiding, Decomposition

Для того, чтобы защитить Unity 3D приложение, достаточно отправить на обфускацию сборки с пользовательским кодом из папки Managed, и затем заменить их на защищенные версии.

Полная совместимость с .NET Framework 4.5

  • Теперь обфускатор одинаково хорошо работает с .NET 2.0, 3.0, 3.5, 4.0, 4.5.
  • Корректно обфусцируется код с async/await
  • Осуществлен переход на последнюю версию Mono Cecil

Читать полностью »

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

Да, C++ был почти идеальным языком в этом плане. Но времена меняются, старые технологии уходят и на их место приходят новые более продуктивные и удобные. Так наша команда перешла на .NET. Но в обмен на простоту разработки и удобство отладки, мы в придачу получили в довесок и простоту декомпиляции нашего ПО. Теперь хакер мог не просто обойти лицензионные ограничения, но и получить почти полный исходник нашей программы просто скормив ее рефлектору.
Разумеется, в качестве решения этой проблемы на рынке было представлено множество различных обфускаторов. Но, как ни странно, большинство из них разочаровывали меня сразу с двух сторон: и ценовой политикой (даже минимальная лицензия некоторых превосходила стоимость нашего ПО в несколько раз), и «интеллектуальностью» алгоритма. Так, после некоторых обфускаторов, умудрялись падать даже простые WinForms приложения. Что же касалось WPF, то без долгого-долгого черного шаманства над эксклудами, запустить среднего размера программу не представлялось возможным в принципе.

Так сформировалось понимание проблемы и четкое желание создать свой продукт, сводящий озвученные выше проблемы к минимуму. И появился SaaS обфускатор и протектор .NET кода AppFuscator.com

Обфускатор и протектор .NET кода appfuscator

Читать полностью »

[recovery mode] Против лома нет приёма: OpenJDK hack vs. Class EncryptionЦель этой статьи предостеречь разработчиков от использования обфускаторов с функцией шифрования class-файлов для защиты своих приложений и от бессмысленной траты денег на них.
Вопросы защиты байт-кода от реверс-инжиниринга и обхода этой защиты подробно рассмотрены в фундаментальной работе Дмитрия Лескова — Protect Your Java Code — Through Obfuscators And Beyond.
Механизм шифрования class-файлов предполагает, что содержимое классов хранится в зашифрованном виде, а при старте приложения через специализированный СlassLoader или JVMTI-интерфейс, расшифрованный байт-код грузится в виртуальную машину Java.
Читать полностью »

Stringer Java Obfuscation Toolkit - Android ProtectionУважаемое Хабр-сообщество, хотел бы рассказать об одном из продуктов, который мы разрабатываем — Stringer Java Obfuscation Toolkit (https://jfxstore.com/stringer). Думаю многим Android и Java-разработчикам будет интересно, особенно, в свете подобных публикаций: habrahabr.ru/post/141522/.

Сразу скажу, что решение коммерческое, чтобы сэкономить кому-то, из читающих этот пост, время.

За прошлый, почти полный, год, мы сделали довольно много интересных вещей:


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js