Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Дневники и блоги —› Поиск уязвимости в приложении Mobilize.Net Visual Basic Upgrade Companion
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 ноября 2018 17:54 · Поправил: aave
· Личное сообщение · #1

Привет всем!
Хочу поделиться опытом и результатом своего исследования безопасности программы Mobilize.Net Visual Basic Upgrade Companion. Эта программа помогает перевести проект, написанный на VB6 в современный VB.NET. Программа специфическая, и вряд ли у неё есть много фанатов. Но мало ли, может кому будет интересно и полезно.
О своих результатах я направил письмо в компанию, выпускающую данный софт, они меня поблагодарили, но в следующей вышедшей версии ничего не изменилось. Что ж, зря они так.
Итак, по порядку. Программу можно запросить, а затем бесплатно скачать с сайта разработчиков. Присылают демо-версию, естественно. В ней стоит ограничение на число строк кода, которое можно преобразовать. Но нам-то хочется всего и сразу, правда?
Значит, при превышении заданного объёма, программа упирается рогом и выводит сообщение об отсутствии лицензии. Ага, значит, лицензия. Запускаю API monitor от rohitab и пытаюсь найти хоть какие-то вызовы, которые содержат хоть что-то, что связано с поиском файла лицензии. Безуспешно. Всё запутано и не отслеживается.
Ок, не отчаиваюсь, ради прикола ищу в директории программы все файлы, содержащие слово LICENSE. Опа, тут начинается интересное! Выскакивают сразу несколько dll-ок. Просматриваю их содержимое, и больше всего меня цепляет файл VBUpgrade.Engine.dll.
Пытаюсь открыть его с помощью IDA - безуспешно. Прогоняю его через разные программы для исследования EXE файлов.. Оказывается, наша DLL-ка написана на .NET!
Идём в Reflector. Хм, ничего не обфусцировано, библиотечка превосходно декомпилируется, и весь код оказывается как на ладони. Изучаю его... Названия функций и классов говорят сами за себя. Что ж, чутьё не подвело, это именно то, что мы ищем!
В классе LicenseValidator обрабатываются все зашифрованные (!!!) с помощью RSA файлы лицензий и выдаётся вердикт: лицензия годная (LicenseErrors.LicenseOk) или нет (все остальные варианты).
Дальше действуем таким образом. Декомпилированный код переносим в новый проект Visual Studio. Все методы, которые возвращают булевы значения, заставляем возвращать True, а везде, где проверяется состояние лицензии и возвращается тип LicenseErrors, возвращаем LicenseErrors.LicenseOk. Компилируем DLL-ку, заменяем в папке программы, запускаем её... И вуаля, она радостно позволяет нам открывать проекты любого размера!
Если кому-то нужны подробности, пишите.

56d1_11.11.2018_EXELAB.rU.tgz - inf.png




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 11 ноября 2018 18:06
· Личное сообщение · #2

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

-----
2 оттенка серого


| Сообщение посчитали полезным: TryAga1n

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 ноября 2018 19:27
· Личное сообщение · #3

f13nd пишет:
Пункт с перекомпилированием дллки по-моему излишество, есть способы попроще.

А не уточните, какие именно?




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 24 ноября 2018 08:09 · Поправил: difexacaw
· Личное сообщение · #4

Именно виртуализация делает апп уязвимым. Если обычный, нэйтивный" код довольно просто изучается, то код с обфускацией, виртуализацией и тп. напрямую даже не читаем. А есчо там тонны мусора, поэтому поиск ошибок по этим причинам в нём затруднён. Такое проще тестить в динамике, брутфорсить", отдавать аргументы на вход чёрного ящика и смотреть результат. Это не аналитический способ, а очень плохой.

А есчо могут быть косяки в самом трансляторе. Даже если исходный код не уязвим, уязвимость создаст транслятор/интерпретатор, так как сам кривой.

-----
vx





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 07 декабря 2018 05:22 · Поправил: f13nd
· Личное сообщение · #5

aave пишет:
А не уточните, какие именно?

Байткод дотнетовый пропатчить. Условный переход на pop-nop заменить или что-то в этом роде. В иде удобно очень через patch program>change bytes, patch program>apply changes, не воюя с днспай и тем более компилером.

Добавлено спустя 16 минут
difexacaw пишет:
Именно виртуализация делает апп уязвимым. Если обычный, нэйтивный" код довольно просто изучается, то код с обфускацией, виртуализацией и тп. напрямую даже не читаем. А есчо там тонны мусора, поэтому поиск ошибок по этим причинам в нём затруднён.

О чём это вообще было?) Виртуализация делает апп уязвимым, потому что обфусцированный код напрямую не читаем и поиск ошибок в нем затруднен? А кто эти ошибки в обфусцированном коде станет искать? Разработчик? Там иногда такие калеки попадаются, что примитивную виртуальную машинку из десятка команд на своем сишарпе переписать не могут, сбрасывают значения функции y=f(x) в файл, пакуют в зип под паролем и готово. Пока сворачивал это файло обратно до алгоритма всего ему нажелал.

-----
2 оттенка серого




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2018 19:11
· Личное сообщение · #6

f13nd пишет:
Байткод дотнетовый пропатчить.

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




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 09 декабря 2018 19:24
· Личное сообщение · #7

aave пишет:
Имхо, проще разобраться с высокоуровневым кодом

А это не мешает разбираться с декомпилированным кодом. Это касается только внесения в него исправлений исходя из принципа минимального вмешательства.

-----
2 оттенка серого



 eXeL@B —› Дневники и блоги —› Поиск уязвимости в приложении Mobilize.Net Visual Basic Upgrade Companion
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати