Автор: Сергей Чубченко. Дата публикации: 03.01.2018
Прошел ровно год, как мы выпустили существенно обновленную версию DotFix NiceProtect, версию 6.0. Общее количество изменений в линейке 6.x настолько велико, что для их описания потребуется целая статья. Несмотря на тщательное тестирование и отладку - мы решили не публиковать данный материал сразу, а еще более глубоко поработать над улучшениями и изменениями продукта. Также мы познакомили с новой версией защиты ключевых игроков антивирусной индустрии. В кооперации со многими из них поработали над ложными срабатываниями. Поделились технологиями анализа наших файлов на предмет чистоты защищаемого кода. Теперь, после тщательной отладки, тестирования и успешного использования защиты нами и нашими клиентами пришло время подробно рассказать о новшествах, примененных в DotFix NiceProtect 6.

Ни одно ключевое улучшение невозможно, если базироваться на изначальной архитектуре. Линейка версий 5.x получила свое начало на базе архитектуры, разработанной нами в далеком 2006 году. Она в свою очередь пришла на смену более ранней архитектуре другого нашего продукта - DotFix LiteProtect версий 3.x. Несмотря на свою глубокую проработку, ключевые элементы сохранялись, и это значительно тормозило внедрение новых технологий. Начиная с линейки 6.x вся архитектура защиты была разработана практически с нуля! Полностью изменился подход к работе с защищаемым файлом, использованию модулей защиты, что в свою очередь не только расширило возможности продукта, но и существенно увеличило скорость работы!

Еще один нюанс, замедляющий развитие проекта - был алгоритм сжатия бинарных данных. На момент его изначальной разработки планировалась исключительно поддержка 32х битных файлов. Защита самого загрузчика и распаковщика также накладывала ограничение на использование перемещаемых элементов (Relocation Tables), критичных для DLL и OCX файлов. В итоге, добавление поддержки DLL и OCX, а также поддержки 64х битных файлов в будущих версиях, потребовало бы кардинальных мер. Было принято решение разработать упаковщик полностью с нуля, используя современные техники и технологии в упаковке и защите данных.
Помимо новой архитектуры, упаковщик получил особенности, не имеющие аналогов в других продуктах. Многие аналоги от сторонних компаний базируются на коде из начала 2000х годов. C тех пор многое изменилось. И многие из них корректно работают только благодаря опциям совместимости в операционной системе. К счастью для них, эти опции до сих пор переносятся из версии в версию операционной системы. Но это в свою очередь накладывает ограничения на защищенность упакованного кода, применение новых техник защиты от исполнения данных. К примеру, упаковщики многих защит от других разработчиков не совместимы с ASLR (address space layout randomization - случайное размещение в адресном пространстве), часть из них до сих пор не совместимы с DEP (Data Execution Prevention - предотвращение выполнения данных).
DotFix NiceProtect лишен всех этих недостатков. В дополнение к этому, реализована раздельная упаковка ресурсов приложения, а также упаковка самого алгоритма распаковки (для невозможности его анализа и изменения). И естественно, сам код распаковщика, всегда генерируется разный (как и все остальные модули NiceProtect'а), а также разбавляется сложно анализируемым "мусорным" кодом для невозможности его идентификации скриптами, автоматическими анализаторами и распаковщиками.

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

Что же обычно хранится в этих данных? У каждого компилятора по-разному. Используемый Framework также добавляет метаданных. Для файлов, скомпилированных в Delphi (включая последнюю доступную версию на момент написания данной статьи - Delphi 10.2.2 Berlin), Free Pascal (Lazarus) и Visual Basic 5.0 и 6.0 компиляторы сохраняют имена всех классов, форм и объектов на формах. Также сохраняются имена публичных функций в классах Delphi и имена публичных процедур и функций в формах и класс-модулях Visual Basic. В VB6 они служат для формирования таблиц виртуальных методов, в Delphi - формируют таблицы информации о функциях (RTTI) для каждого класса (как встроенных классов VCL, так и пользовательских).

Помимо этого сохраняются разного рода ссылки на те или иные объекты, упрощающие анализ. Чтобы всю эту информацию защитить, необходимо: декомпилировать файл, составить список изменяемых значений, отфильтровав то, что изменять нежелательно и внести необходимые изменения. Для этого требуется встроить в защиту декомпилятор под каждую версию каждого поддерживаемого компилятора и фреймворка. Наверное, не следует объяснять, что это колоссальная работа и она возможна лишь в случае параллельной разработки продуктов в области декомпиляции. Именно поэтому только DotFix NiceProtect предоставляет возможности обфускации служебных данных компиляторов! И мы рады поделиться этим функционалом с нашими клиентами.

Разработка совершенно новой архитектуры позволила добавить поддержку защиты стандартных DLL библиотек, ActiveX DLL (библиотек с TypeLibrary информацией) и OCX (COM OLE ActiveX) файлов. Главной сложностью было сохранить уникальность кода загрузчика защиты при каждой защите одного и того же файла. Особенность DLL и OCX файлов в том, что они могут располагаться операционной системой каждый раз в разных местах памяти. И файл должен в себе содержать адреса всех адресно-зависимых данных. Это существенно облегчает анализ и взлом. И со стороны защиты требует совершенно иного подхода, чем для EXE файлов.
Тут есть два пути:
1) Давать операционной системе изменить только один адрес в загрузчике защиты, а уже загрузчику менять на основе этого все адресно-зависимые части программы. Так поступают большинство сторонних защит на рынке.
2) Сделать таблицы перемещаемых элементов не только на защищенный код, но и на гору мусорного кода. В этом случае количество перемещаемых элементов возрастает на пару порядков. И разобраться во всем этом взломщику будет весьма проблематично.

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

Технология TLS используется в программах не так часто. А если и используется, то обычно это исключительно стартовый коллбэк, создаваемый компилятором. Этим пользуются многие разработчики защит, добавляя лишь поддержку этого первоначального вызова и не поддерживая полноценные TLS таблицы. Начиная с версии 6.0, DotFix NiceProtect поддерживает любое количество TLS коллбэков, как служебных, так и пользовательских. Данный функционал работает идентично как для EXE, так и для DLL/OCX файлов. Это в свою очередь поможет расширить возможности для защиты со стороны пользователя.

DotFix NiceProtect всегда поддерживал защиту функций, выбранных в MAP файле, сгенерированным компилятором. Правда, с одним ограничением. Поддерживались только MS и Borland/Embarcadero компиляторы (Visual C++, Delphi, Visual Basic).

С недавнего времени большими темпами набирает популярность среда разработки QT, основанная на языке программирования C++ и наборе библиотек QT. Также динамично развивается Lazarus, основанный на компиляторе Free Pascal. Обе среды создают совершенно иные по своей структуре MAP файлы и абсолютно несовместимы со стандартами MS и Borland.

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

Нам кажется, что в каждом продукте должно быть удобно и эргономично все. Дизассемблер, используемый для отображения защищаемых функций во многих аналогичных продуктах других компаний, реализован исключительно для галочки. Нам же кажется, что при выборе функций для защиты крайне полезно видеть: та ли это функция? что она делает? и как компилятор реализовал тот или иной Ваш код. Да, можно использовать внешние инструменты, но для чего? Если задача стоит защитить код - защита должна уметь его показать. DotFix NiceProtect начиная с первых версий показывает не только дизассемблированный код той или иной функции, но и код, который увидит взломщик после защиты (виртуализации или мутации).
Нам показалось, что этого мало для удобства. И было принято решение добавить деманглер имен функций для Delphi, C++ и FreePascal. Также уже присутствовал деманглер для Visual Basic 6.0. Это существенно облегчает выбор функций для защиты. Но и это еще не все. Мы добавили подсветку синтаксиса в дизассемблер с дополнительным выделением вызовов и переходов (call и всех типов jump), а также отображение строк и вызываемых функций разными цветами. Это упростит и облегчит их идентификацию при просмотре.

DotFix NiceProtect уже давно поддерживает систему подписи защищаемых файлов специальным сертификатом Taggant. Каждый наш клиент получает его совершенно бесплатно. Данный сертификат используется как дополнение к Code Signing сертификату, но в отличии от него используется только антивирусными продуктами для идентификации файлов. Многие антивирусные продукты уже поддерживают IEEE Taggant сертификаты и существенно увеличивают доверие к подписанным файлам. По своей структуре данная подпись очень похожа на Code Singning и выдается на имя нашего клиента или его компании. В отличии от многих наших конкурентов, мы выдаем сертификаты на реальное имя или имя компании, а не на шаблонного "Customer121". Это дает дополнительное доверие со стороны антивирусов, особенно если Ваши Code Singing и IEEE Taggant сертификаты выданы на одно и тоже имя.
В 2016-2017 годах происходило множество изменений в системе Taggant. Менялись TimeStamp серверы, периодически некорректно работала проверка TimeStamp'а на сервере VirusTotal. Многие вещи исправлялись консорциумом IEEE крайне медленно. Все это послужило дополнительным стимулом для нас сделать в DotFix NiceProtect отдельные настройки, чтобы пользователь мог всегда поменять TimeStamp сервер самостоятельно, а также не использовать дополнительную подпись на серверах IEEE. Надеемся, это поможет исключить простои в работе и обеспечит стабильную работу продукта при любых изменениях в экосистеме Taggant.

В дополнение ко всему выше сказанному, мы исправили все найденные ранее ошибки и несовместимости. Существенно поработали над интерфейсом, доработали документацию и в целом сделали продукт значительно лучше! Если Вы уже являетесь нашим клиентом, то всегда можете получить последние обновления по льготной цене. Если же Вы только узнали о нас - будем рады видеть Вас в рядах наших клиентов!
DotFix NiceProtect - Современная и серьезная защита для Ваших Windows приложений
Прошел ровно год, как мы выпустили существенно обновленную версию DotFix NiceProtect, версию 6.0. Общее количество изменений в линейке 6.x настолько велико, что для их описания потребуется целая статья. Несмотря на тщательное тестирование и отладку - мы решили не публиковать данный материал сразу, а еще более глубоко поработать над улучшениями и изменениями продукта. Также мы познакомили с новой версией защиты ключевых игроков антивирусной индустрии. В кооперации со многими из них поработали над ложными срабатываниями. Поделились технологиями анализа наших файлов на предмет чистоты защищаемого кода. Теперь, после тщательной отладки, тестирования и успешного использования защиты нами и нашими клиентами пришло время подробно рассказать о новшествах, примененных в DotFix NiceProtect 6.

Новая архитектура
Ни одно ключевое улучшение невозможно, если базироваться на изначальной архитектуре. Линейка версий 5.x получила свое начало на базе архитектуры, разработанной нами в далеком 2006 году. Она в свою очередь пришла на смену более ранней архитектуре другого нашего продукта - DotFix LiteProtect версий 3.x. Несмотря на свою глубокую проработку, ключевые элементы сохранялись, и это значительно тормозило внедрение новых технологий. Начиная с линейки 6.x вся архитектура защиты была разработана практически с нуля! Полностью изменился подход к работе с защищаемым файлом, использованию модулей защиты, что в свою очередь не только расширило возможности продукта, но и существенно увеличило скорость работы!

Новый упаковщик
Еще один нюанс, замедляющий развитие проекта - был алгоритм сжатия бинарных данных. На момент его изначальной разработки планировалась исключительно поддержка 32х битных файлов. Защита самого загрузчика и распаковщика также накладывала ограничение на использование перемещаемых элементов (Relocation Tables), критичных для DLL и OCX файлов. В итоге, добавление поддержки DLL и OCX, а также поддержки 64х битных файлов в будущих версиях, потребовало бы кардинальных мер. Было принято решение разработать упаковщик полностью с нуля, используя современные техники и технологии в упаковке и защите данных.
Помимо новой архитектуры, упаковщик получил особенности, не имеющие аналогов в других продуктах. Многие аналоги от сторонних компаний базируются на коде из начала 2000х годов. C тех пор многое изменилось. И многие из них корректно работают только благодаря опциям совместимости в операционной системе. К счастью для них, эти опции до сих пор переносятся из версии в версию операционной системы. Но это в свою очередь накладывает ограничения на защищенность упакованного кода, применение новых техник защиты от исполнения данных. К примеру, упаковщики многих защит от других разработчиков не совместимы с ASLR (address space layout randomization - случайное размещение в адресном пространстве), часть из них до сих пор не совместимы с DEP (Data Execution Prevention - предотвращение выполнения данных).
DotFix NiceProtect лишен всех этих недостатков. В дополнение к этому, реализована раздельная упаковка ресурсов приложения, а также упаковка самого алгоритма распаковки (для невозможности его анализа и изменения). И естественно, сам код распаковщика, всегда генерируется разный (как и все остальные модули NiceProtect'а), а также разбавляется сложно анализируемым "мусорным" кодом для невозможности его идентификации скриптами, автоматическими анализаторами и распаковщиками.

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

Что же обычно хранится в этих данных? У каждого компилятора по-разному. Используемый Framework также добавляет метаданных. Для файлов, скомпилированных в Delphi (включая последнюю доступную версию на момент написания данной статьи - Delphi 10.2.2 Berlin), Free Pascal (Lazarus) и Visual Basic 5.0 и 6.0 компиляторы сохраняют имена всех классов, форм и объектов на формах. Также сохраняются имена публичных функций в классах Delphi и имена публичных процедур и функций в формах и класс-модулях Visual Basic. В VB6 они служат для формирования таблиц виртуальных методов, в Delphi - формируют таблицы информации о функциях (RTTI) для каждого класса (как встроенных классов VCL, так и пользовательских).

Помимо этого сохраняются разного рода ссылки на те или иные объекты, упрощающие анализ. Чтобы всю эту информацию защитить, необходимо: декомпилировать файл, составить список изменяемых значений, отфильтровав то, что изменять нежелательно и внести необходимые изменения. Для этого требуется встроить в защиту декомпилятор под каждую версию каждого поддерживаемого компилятора и фреймворка. Наверное, не следует объяснять, что это колоссальная работа и она возможна лишь в случае параллельной разработки продуктов в области декомпиляции. Именно поэтому только DotFix NiceProtect предоставляет возможности обфускации служебных данных компиляторов! И мы рады поделиться этим функционалом с нашими клиентами.

Поддержка DLL и OCX файлов
Разработка совершенно новой архитектуры позволила добавить поддержку защиты стандартных DLL библиотек, ActiveX DLL (библиотек с TypeLibrary информацией) и OCX (COM OLE ActiveX) файлов. Главной сложностью было сохранить уникальность кода загрузчика защиты при каждой защите одного и того же файла. Особенность DLL и OCX файлов в том, что они могут располагаться операционной системой каждый раз в разных местах памяти. И файл должен в себе содержать адреса всех адресно-зависимых данных. Это существенно облегчает анализ и взлом. И со стороны защиты требует совершенно иного подхода, чем для EXE файлов.
Тут есть два пути:
1) Давать операционной системе изменить только один адрес в загрузчике защиты, а уже загрузчику менять на основе этого все адресно-зависимые части программы. Так поступают большинство сторонних защит на рынке.
2) Сделать таблицы перемещаемых элементов не только на защищенный код, но и на гору мусорного кода. В этом случае количество перемещаемых элементов возрастает на пару порядков. И разобраться во всем этом взломщику будет весьма проблематично.

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

TLS Коллбэки
Технология TLS используется в программах не так часто. А если и используется, то обычно это исключительно стартовый коллбэк, создаваемый компилятором. Этим пользуются многие разработчики защит, добавляя лишь поддержку этого первоначального вызова и не поддерживая полноценные TLS таблицы. Начиная с версии 6.0, DotFix NiceProtect поддерживает любое количество TLS коллбэков, как служебных, так и пользовательских. Данный функционал работает идентично как для EXE, так и для DLL/OCX файлов. Это в свою очередь поможет расширить возможности для защиты со стороны пользователя.

MAP Файлы
DotFix NiceProtect всегда поддерживал защиту функций, выбранных в MAP файле, сгенерированным компилятором. Правда, с одним ограничением. Поддерживались только MS и Borland/Embarcadero компиляторы (Visual C++, Delphi, Visual Basic).

С недавнего времени большими темпами набирает популярность среда разработки QT, основанная на языке программирования C++ и наборе библиотек QT. Также динамично развивается Lazarus, основанный на компиляторе Free Pascal. Обе среды создают совершенно иные по своей структуре MAP файлы и абсолютно несовместимы со стандартами MS и Borland.

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

Удобство дизассемблера
Нам кажется, что в каждом продукте должно быть удобно и эргономично все. Дизассемблер, используемый для отображения защищаемых функций во многих аналогичных продуктах других компаний, реализован исключительно для галочки. Нам же кажется, что при выборе функций для защиты крайне полезно видеть: та ли это функция? что она делает? и как компилятор реализовал тот или иной Ваш код. Да, можно использовать внешние инструменты, но для чего? Если задача стоит защитить код - защита должна уметь его показать. DotFix NiceProtect начиная с первых версий показывает не только дизассемблированный код той или иной функции, но и код, который увидит взломщик после защиты (виртуализации или мутации).
Нам показалось, что этого мало для удобства. И было принято решение добавить деманглер имен функций для Delphi, C++ и FreePascal. Также уже присутствовал деманглер для Visual Basic 6.0. Это существенно облегчает выбор функций для защиты. Но и это еще не все. Мы добавили подсветку синтаксиса в дизассемблер с дополнительным выделением вызовов и переходов (call и всех типов jump), а также отображение строк и вызываемых функций разными цветами. Это упростит и облегчит их идентификацию при просмотре.

Сертификаты IEEE Taggant
DotFix NiceProtect уже давно поддерживает систему подписи защищаемых файлов специальным сертификатом Taggant. Каждый наш клиент получает его совершенно бесплатно. Данный сертификат используется как дополнение к Code Signing сертификату, но в отличии от него используется только антивирусными продуктами для идентификации файлов. Многие антивирусные продукты уже поддерживают IEEE Taggant сертификаты и существенно увеличивают доверие к подписанным файлам. По своей структуре данная подпись очень похожа на Code Singning и выдается на имя нашего клиента или его компании. В отличии от многих наших конкурентов, мы выдаем сертификаты на реальное имя или имя компании, а не на шаблонного "Customer121". Это дает дополнительное доверие со стороны антивирусов, особенно если Ваши Code Singing и IEEE Taggant сертификаты выданы на одно и тоже имя.
В 2016-2017 годах происходило множество изменений в системе Taggant. Менялись TimeStamp серверы, периодически некорректно работала проверка TimeStamp'а на сервере VirusTotal. Многие вещи исправлялись консорциумом IEEE крайне медленно. Все это послужило дополнительным стимулом для нас сделать в DotFix NiceProtect отдельные настройки, чтобы пользователь мог всегда поменять TimeStamp сервер самостоятельно, а также не использовать дополнительную подпись на серверах IEEE. Надеемся, это поможет исключить простои в работе и обеспечит стабильную работу продукта при любых изменениях в экосистеме Taggant.

В дополнение ко всему выше сказанному, мы исправили все найденные ранее ошибки и несовместимости. Существенно поработали над интерфейсом, доработали документацию и в целом сделали продукт значительно лучше! Если Вы уже являетесь нашим клиентом, то всегда можете получить последние обновления по льготной цене. Если же Вы только узнали о нас - будем рады видеть Вас в рядах наших клиентов!
(C) Сергей Чубченко, разработчик DotFix NiceProtect
Комментарии |
отсутствуют |
Добавление комментария |