
Исследование защиты программы ASM Visual

Скриншот программы ASM Visual
ASM Visual - интегрированная среда разработки для низкоуровневых программистов языка Ассемблер. Представляет собой средства ведения проектов и редактор кода с подсветкой синтаксиса и автодополнением, включая ряд дополнительных модулей: взаимодействие с компиляторами, информирование об ошибках, работа с отладкой, инструменты рефакторинга, метрики кода и т.д. Несмотря на список титулованных спонсоров, программа платная. Придется организовать волонтерскую организацию в поддержку ПО, за которое платить не надо.
Забираем с офсайта дистрибутив последней версии, устанавливаем, смотрим. Основной исполняемый файл ничем не упакован, внешний осмотр и специализированные анализаторы однозначно говорят, что он написан на дотнете. Хоть не на Java или на Qt, и на том спасибо. Раз использован дотнет, то инструментом для анализа будет dnSpy. Отправляем файл на декомпиляцию.

Триальное окно "О программе"
Ну и параллельно поищем какие-нибудь зацепки для анализа триальных веток алгоритма работы программы. В окне "О программе" незарегистрированной версии рядом с номером имеется надпись "Trial", это будет отправной точкой для поиска.

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

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

Измененные методы
Оба метода можно изменить, они даже компилируются без ошибок. Но после сохранения модифицированной сборки получается нерабочий файл. Он вроде как запускается, но при попытке создания проекта падает с ошибкой.
Ну и ничего, на хитрую жопу есть хуй с винтом. Переключаем отображение кода в IL или даже IL with C#", это для удобства восприятия. По коду видно, что из каждой логической проверки могут быть несколько возвратов, результат возврата определяется командой ldc.i4.0 (false) или ldc.i4.1 (true) с последующей командой ret.

Функция проверки

Функция проверки
В первом случае нам надо поменять два возврата false на возвраты true, то есть заменить в отмеченных местах команды ldc.i4.0 на ldc.i4.1. Во втором случае надо заменить единственный возврат true на возврат false, то есть заменить команду ldc.i4.1 на ldc.i4.0. Это можно сделать средствами самого же dnSpy.

Заменяем IL-команды
Теперь даже при невыполнении условий проверок обе функции будут возвращать нужное значение. Сохраняем сборку, проверяем. Увы, на хуй с винтом нашлась жопа с закоулками. Исполняемый файл точно так же падает с ошибкой при создании проекта. Но и тут ничего страшного, на жопу с закоулками должен найтись хуй с путеводителем. И такой есть. Точнее у нас есть адреса команд в исполняемом файле, а также их опкоды. Как видно на скриншотах, команде ldc.i4.0 соответствует код 16h, а команде ldc.i4.1 код 17h. Нужные смещения, по которым располагаются команды, соответственно, будут 0x00003233 и 0x00003264 для функции IsPro, а для IsTrial будет единственное смещение 0x000032D8. Это абсолютные значения от начала файла. Открываем оригинальный исполняемый файл в любом HEX-редакторе и поочередно заменяем три байта по указанным смещениям. 17h меняется на 16h и наоборот. Как вы понимаете, в этом случае файл не пересобирался, изменения были внесены напрямую в код. Сохраняем изменения, проверяем.

Программа успешно "зарегистрирована"
В окне "О программе" и в заголовке главного окна красуется надпись "Pro", никаких ограничений больше нет, падений с ошибкой тоже нет. Цель достигнута. Ну а пользоваться этим чудо-комбайном или нет - это уже личное дело каждого конкретного программиста. Мне, например, вполне хватает Sublime Text с подсветкой синтаксиса и подключенным компилятором FASM.
Просмотров: 943 | Комментариев: 10

Комментарии
Отзывы посетителей сайта о статье
ManHunter
(02.05.2025 в 23:11):
Про хелпы я хотел написать, но не стал. Вообще поделие напоминает типичный "продукт Сколково": бабло освоено, нужный объем кода и формочек-рюшечек достигнут, выглядит в целом внушительно, вроде даже как-то работает, но корректно только в третье полнолуние каждого месяца.

Лестер Глючный
(02.05.2025 в 21:58):
Под Low Integrity Level улетает в CLR_EXCEPTION после своего долгого SplashScreen. Убрав же эту метку, и запустив with restricted privileges & __COMPAT_LAYER=RUNASINVOKER — О, теперь появилось ещё более ослепительнобелое окно "First launch", но и на нём выпало в то же исключение, в строке 138 у XpfXamlLoader
Окно первого запуска ещё рабочее — закрыв его, отругнулось про Pro на 24 часа, но таки достигло System.Windows.Threading.ExceptionWrapper.TryCatchWhen:
System.Windows.Markup.XamlParseException: The invocation of the constructor on type 'TASMVisual.MainWindow' that matches the specified binding constraints threw an exception. ---> System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
И намусорило ещё папками Yandex\Yamstorage\yamav и Gritsenko_Alexey_V…
Вместо fphelp.hlp из masm32 под fpuhelp.chm оказался сконвертированный fpulib.hlp… А intel-ir\index.html уж очень сильно напоминает другой известный сайт :)
Окно первого запуска ещё рабочее — закрыв его, отругнулось про Pro на 24 часа, но таки достигло System.Windows.Threading.ExceptionWrapper.TryCatchWhen:
System.Windows.Markup.XamlParseException: The invocation of the constructor on type 'TASMVisual.MainWindow' that matches the specified binding constraints threw an exception. ---> System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
И намусорило ещё папками Yandex\Yamstorage\yamav и Gritsenko_Alexey_V…
Вместо fphelp.hlp из masm32 под fpuhelp.chm оказался сконвертированный fpulib.hlp… А intel-ir\index.html уж очень сильно напоминает другой известный сайт :)

Petya
(21.04.2025 в 17:35):
Зато теперь в Вашем арсенале есть способ кому-нибудь отомстить - воспроизвести эту фразу.

ManHunter
(21.04.2025 в 17:16):
Сделайте мне развидеть это

Petya
(21.04.2025 в 17:14):
Глушилки GPS кишечного базирования? Анальные проходы технологии "Хогвартс" (или, в порядке импортозамещения, технологии "ЛЭТИ")?
Это не фольклор, если что, а мои личные фантазии.

ManHunter
(19.04.2025 в 15:16):
Аффтары у себя на сайте честно пишут, что их софтина "для НИЗКОУРОВНЕВЫХ программистов языка Ассемблер". Таким и дотнет сойдет. Специально оставил оригинальное написание, чтобы народ улыбнулся.

Илья
(18.04.2025 в 14:18):
Программировать на ассемблере используя среду разработки, написанную на дотнете - это себя не уважать.

morgot
(18.04.2025 в 03:06):
Удивительно, впервые слышу о таком софте. Хотя вроде он когда-то рекламировал это добро на васме, но могу ошибаться.
Мне тоже хватает нотепад++,в свое время смотрел радасмы/винасмы, не зашло.
Мне тоже хватает нотепад++,в свое время смотрел радасмы/винасмы, не зашло.

ManHunter
(17.04.2025 в 23:30):
Евгений, насколько я знаю, это последнее звено в цепочке. Но не удивлюсь, если это не так, народный фольклор неиссякаем :)

Евгений
(17.04.2025 в 23:27):
А что куй с путеводителем побивает?)

Добавить комментарий
Заполните форму для добавления комментария
