После изучения основ реверс-инжиниринга NET-приложений, настало время более подробно рассмотреть язык MSIL. В этой статье не ставится цель научиться вас программировать на этом языке.
Введение
После изучения основ реверс-инжиниринга NET-приложений, настало время более подробно рассмотреть язык MSIL. В этой статье не ставится цель научиться вас программировать на этом языке. Я постараюсь разъяснить новые нюансы по использованию и управлению IL-кодом посредством новых инструментов. Также я представлю вам технику «циклической разработки» (которая применяется не только при разработке NET-приложений) и расскажу о преимуществах, которые может дать эта техника реверс-инженеру.
В этой статье мы ознакомимся более подробно с IL-кодом и двумя взаимосвязанными инструментами, которые помогут нам удалить первую защиту у Crack Me, специально сделанного для этой цели. Как только вы научитесь работать с этими инструментами и узнаете основы циклической разработки, в следующей статье я расскажу о продвинутых методах циклической разработки для удаления второй защиты Crack Me. Так что сделайте глубокий вдох, и мы начинаем!
Понятие «Циклической разработки»
Первоначально IL-ассемблер и дизассемблер были созданы как внутренние инструменты, используемые при разработке среды CLR. Когда обе утилиты стали в достаточной мере синхронизированными, на базе ILAsm начали появляться (наряду с библиотекой классов NET Frameworks) сторонние компиляторы, ориентированные на платформу NET.
По существу, циклическая разработка представляет собой возможность синхронизации нескольких (двух и более) средств разработки программного обеспечения. В случае с платформой NET имеется в виду возможность создания управляемой сборки как в высокоуровневой среде разработки (Microsoft Visual C# или Microsoft Visual Basic .NET), так и на низкоуровневом языке с последующей компиляцией (например, при помощи ILAsm). Все это означает, что мы можем дизассемблировать сборку, внести изменения в IL-код, а затем выполнить обратное реассемблирование и получить измененную рабочую сборку (или модуль).
Замечание: Управляемые NET-приложения называются «сборками», а управляемые исполняемые файлы NET называются «модулями».
Основы
В этой статье мы будем работать только с двумя инструментами, официально представленными компанией Microsoft в рамках Windows SDK: IL-ассемблер (ILASM) и IL-дизассемблер (ILDASM, который мы использовали в прошлой статье). В принципе, мы можем исследовать любую NET-сборку / модуль при помощи этих двух утилит.
ILDASM можно найти в папке C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin. ILASM находится в папке C:\WINDOWS\Microsoft.NET\Framework\vx.x (в зависимости от версии платформы, которая используется для создания сборки, которую мы хотим изменить).
Прежде чем приступить к анализу Crack ME (о нем я еще не рассказывал), я подробнее остановлюсь на некоторых аспектах платформы NET и начну со среды Common Language Runtime.
Среда CLR является промежуточным звеном между NET-сборками и операционной системой, в которой запускаются сборки; на данный момент (я надеюсь) вы знаете, что каждая NET-сборка «транслируется» в низкоуровневый промежуточный язык (Common Intermediate Language – CIL или Microsoft Intermediate Language – MSIL). Несмотря на разработку на высокоуровневом языке, сборка независима от целевой платформы. Такой вид «абстракции» позволяет вести разработку на разных языках.
Common Intermediate Language опирается на набор спецификаций, гарантирующих совместное сосуществование разных языков; этот набор спецификаций известен как Common Language Specifications – CLS, как это определено в спецификации общеязыковой структуры (Common Language Infrastructure), стандарте Ecma International, и международной организации по стандартизации (International Organization for Standardization – ISO; ссылку для загрузки Раздела I можно найти в разделе «Ссылки»).
NET-сборки и модули, спроектированные для запуска в среде Common Language Runtime (CLR), состоят в основном из метаданных и управляемого кода.
Управляемый код состоит из набора инструкций, которые являются «сердцем» сборки / модуля и представляет собой набор функций и методов закодированный в абстрактной и стандартизированной форме известной как MSIL (или CIL), что позволяет опознать управляемый исходный код, который запускается исключительно в среде CLR.
С другой стороны, термин «метаданные» является довольно неоднозначным (метаданные можно еще назвать как «данные, описывающие данные»). В нашем случае метаданные – это система дескрипторов, касающихся «содержимого» сборки. Метаданные относятся к структуре данных, находящихся внутри низкоуровневого CIL-кода, и описывают структуру высокоуровневого кода: отношения между классами, их членами, возвращаемыми типами, глобальными элементами и параметрами методов. Если обобщить все вышесказанное (всегда учитывайте контекст среды CLR), метаданные описывают все элементы, которые задекларированы (или на которые есть ссылка) внутри модуля.
Таким образом, можно сказать, что модуль состоит из двух компонентов: метаданных и IL-кода; среда CLR подразделяется на две подсистемы: «загрузчик» и JIT-компилятор.
Загрузчик разбирает метаданные и создает в памяти нечто вроде схемы / паттерна представления внутренней структуры модуля, а затем в зависимости от результата предыдущей операции, JIT-компилятор (также называемый jitter) компилирует IL-код в машинный код конкретной платформы.
Рисунок ниже описывает механизм создания и запуска управляемого модуля:
Наш третий объект исследования – управляемый модуль «CrackMe3-InfoSecInstitute-dotNET-Reversing.exe» (ссылка для загрузки представлена в разделе «Ссылки) выглядит так:
Наша задача – удалить всплывающее окно и подобрать серийный номер. Далее мы рассмотрим методы циклической разработки для обхода обеих защит этого Crack Me.
Шаг 1: Дизассемблирование
Первым делом дизассемблируем наш Crack Me, используя ILDASM и посмотрим встроенный IL-код управляемого модуля. Сосредоточим внимание на двух узлах:
Управляемый модуль содержит одну форму Form1 и один класс GetSerial. Рассмотрим первый узел (с формой):
Дважды щелкните по методу Form_Load, чтобы увидеть IL-код:
Для повышения читабельности кода все служебные слова ILAsm (читай инструкции) выделены жирным шрифтом. Рассмотрим детально механизм работы этого участка кода и наши дальнейшие действия.
Понимание механизма работы метода Form_Load():
.method private instance void Form1_Load(…) cil managed элемент метаданных Method Definition.
Служебные слова private и instance определяют флаги элемента Method Definition. Ключевое слово public означает, что метод Frm1_Load() доступен всем членам, для которых видим «материнский» класс (тот, который содержит этот метод). Служебное слово instance говорит нам о том, что метод связан с объектом, а не классом.
Служебное слово void в явной форме определяет тип возвращаемого значения (по умолчанию) текущего метода. Void означает, что метод ничего не возвращает.
Служебные слова cil и managed означают, что тело метода представлено IL-кодом и определяют флаги реализации Method Definition.
.maxstack 8 – директива, определяющая максимальное число элементов, которое может находиться в стеке вычислений во время выполнения метода.
IL_0000 – метка, не занимающая места в памяти. ILDASM помечает каждую строку (инструкцию) подобными метками. Метки не компилируются и используются исключительно для идентификации некоторых смещений внутри IL-кода во время компиляции программы.
Как вы знаете, IL является строго стековым языком. Все должно проходить через стек вычислений. Каждая инструкция помещает или извлекает что-то (или ничего) из вершины стека вычислений. Когда мы говорим о помещении / извлечении элементов в / из стека, мы говорим об элементах, не обращая внимание на их размеры.
Ldstr «I’m a nag screen, remove me». Создает объект типа строка из передаваемой строковой константы и помещает ссылку на этот объект в стек вычислений. Подобные константы хранятся в метаданных. Эта строковая константа общеязыковой среды выполнения или строковая константа метаданных всегда хранится в формате Unicode (UTF-16).
Ldc.i4.s 16 короткая форма (так как оканчивается на «.s») инструкции, которая загружает целое число 16 типа int32 в стек вычисления (в данном случае происходит загрузка стиля окна сообщения с иконкой о критической ошибке).
call valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.MsgBoxResult [Microsoft.VisualBasic]Microsoft.VisualBasic.Interaction::MsgBox(object, valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.MsgBoxStyle, object); valuetype используется перед объектом, который мы хотим создать. Указывается полное имя класса, включая имя библиотеки, так происходит вызов (не виртуального?) метода. Ключевое слово valuetype обязательно для экземпляров общего типа, поскольку они представлены в метаданных как TypeSpecs.
Инструкция pop удаляет из стека строку «Nagging you!».
После выполнения инструкции ret происходит возврат из текущего метода, и в стек вычислений помещается значение определенного типа. В нашем случае метод возвращает значение типа void, что означает отсутствие какого-либо значения в стеке вычисления во время возврата из метода.
Теперь мы знаем, что метод Form1_Load делает одну единственную вещь: инициализирует и выводит всплывающее окно, от которого нам нужно избавиться.
Технически нам нужно на основе нашей сборки сгенерировать файл .il (выгрузив его из ILDasm), произвести необходимые манипуляции и собрать его заново. Однако перед этим нам нужно выяснить версию сборки, чтобы не было проблем с повторной компиляцией (используя ILASM).
Информацию о версии можно узнать, если посмотреть содержимое манифеста сборки:
Директива .ver указывает номер версии:
Теперь выгрузим сборку. Выполните команду File->Dump->Ok (или Ctrl+D) и выберите директорию, куда сохранять файлы. В результате получится нечто подобное:
Файл с расширением .il содержит все IL-инструкции управляемого модуля. Откройте его в текстовом редакторе и найдите метод Form1_Load:
Теперь мы можем пойти несколькими путями. Например, удалить все инструкции внутри метода или удалить весь метод, поставив в начало инструкцию ret. Я предпочитаю удалить содержимое так, чтобы метод Form1_Load() не выполнял вообще никаких операций.
Удалите строки с 1192 до 1201 и сохраните изменения:
После всех манипуляций нам нужно реассемблировать измененный .il файл. Мы будем использовать утилиту ILAsm, которая поставляется вместе с Visual Studio и Windows SDK. С помощью ILAsm мы сможем собрать исполняемый файл из файла инструкций на языке Microsoft Intermediate Language.
Шаг 2: Реассемблирование
Мы помним, что версия нашей сборки – 4.0.30319 (см. рисунок 1). Соответствующая версия ILASM находится в папке C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319.
Переходим в командную строку Microsoft Windows Command (CMD) или Visual Studio Command Prompt (в любом случае результат будет один и тот же).
Выполните команду Start->Run->CMD.
CD C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
ilasm filename.il –res=filename.res
Filename = полный путь к .il файлу
Параметр –res необязательный и используется для сохранения ресурсов из первоначальной сборки (например, иконок)
Если процесс компиляции прошел успешно, вы увидите следующее сообщение:
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved
Writing PE file
Operation completed successfully
И в новой версии уже не будет всплывающего окна:
Замечание: вы также можете изменить текст, появляющийся во всплывающем окне посредством изменения строки, которая загружается в стек вычисления, или поменять стиль всплывающего окна:
Имя члена
Значение
Описание
OKOnly
Выводится только кнопка OK.
OKCancel
1
Выводятся кнопки OK и Отмена.
AbortRetryIgnore
2
Выводятся кнопки Прервать, Повтор и Пропустить.
YesNoCancel
3
Выводятся кнопки Да, Нет и Отмена.
YesNo
4
Выводятся кнопки Да и Нет.
RetryCancel
5
Выводятся кнопки Повтор и Отмена.
Critical
16
Выводится иконка критического сообщения.
Question
32
Выводится иконка предупреждающего запроса.
Exclamation
48
Выводится иконка сообщения предупреждения.
Information
64
Выводится иконка информационного сообщения.
DefaultButton1
Первая кнопка является кнопкой по умолчанию.
DefaultButton2
256
Вторая кнопка является кнопкой по умолчанию.
DefaultButton3
512
Третья кнопка является кнопкой по умолчанию.
ApplicationModal
Модальное окно сообщения в приложении. Пользователь должен нажать кнопку в окне сообщения прежде, чем продолжить работу.
SystemModal
4096
Системное модальное окно сообщения. Работа всех приложений приостанавливается до тех пор, пока пользователь не нажмет кнопку в окне сообщения.
MsgBoxSetForeground
65536
Окно сообщения переднего плана.
MsgBoxRight
524288
Текст, выровненный по правому краю.
MsgBoxRtlReading
1048576
Текст для чтения справа налево (иврит и арабские системы).
Вторая задача, которую нам нужно решить, более сложная. Если вы хотите обойти проверку серийного номера или вычислить правильный серийный номер – это относительно легко. Однако я покажу вам, как можно воспользоваться преимуществами некоторых методов циклической разработки и добавить в Crack Me новые функции (например, выдать нам правильный серийный номер).
Ссылки
В статье мы расскажем о наиболее интересных стартапах в области кибербезопасности, на которые следует обратить внимание.
Хотите узнать, что происходит нового в сфере кибербезопасности, – обращайте внимание на стартапы, относящиеся к данной области. Стартапы начинаются с инновационной идеи и не ограничиваются стандартными решениями и основным подходом. Зачастую стартапы справляются с проблемами, которые больше никто не может решить.
Обратной стороной стартапов, конечно же, нехватка ресурсов и зрелости. Выбор продукта или платформы стартапа – это риск, требующий особых отношений между заказчиком и поставщиком . Однако, в случае успеха компания может получить конкурентное преимущество или снизить нагрузку на ресурсы безопасности.
Ниже приведены наиболее интересные стартапы (компании, основанные или вышедшие из «скрытого режима» за последние два года).
Компания Abnormal Security, основанная в 2019 году, предлагает облачную платформу безопасности электронной почты, которая использует анализ поведенческих данных для выявления и предотвращения атак на электронную почту. Платформа на базе искусственного интеллекта анализирует поведение пользовательских данных, организационную структуру, отношения и бизнес-процессы, чтобы выявить аномальную активность, которая может указывать на кибератаку. Платформа защиты электронной почты Abnormal может предотвратить компрометацию корпоративной электронной почты, атаки на цепочку поставок , мошенничество со счетами, фишинг учетных данных и компрометацию учетной записи электронной почты. Компания также предоставляет инструменты для автоматизации реагирования на инциденты, а платформа дает облачный API для интеграции с корпоративными платформами, такими как Microsoft Office 365, G Suite и Slack.
Копания Apiiro вышла из «скрытого режима» в 2020 году. Ее платформа devsecops переводит жизненный цикл безопасной разработки «от ручного и периодического подхода «разработчики в последнюю очередь» к автоматическому подходу, основанному на оценке риска, «разработчики в первую очередь», написал в блоге соучредитель и генеральный директор Идан Плотник . Платформа Apiiro работает, соединяя все локальные и облачные системы управления версиями и билетами через API. Платформа также предоставляет настраиваемые предопределенные правила управления кодом. Со временем платформа создает инвентарь, «изучая» все продукты, проекты и репозитории. Эти данные позволяют лучше идентифицировать рискованные изменения кода.
Axis Security Application Access Cloud – облачное решение для доступа к приложениям , построенное на принципе нулевого доверия. Он не полагается на наличие агентов, установленных на пользовательских устройствах. Поэтому организации могут подключать пользователей – локальных и удаленных – на любом устройстве к частным приложениям, не затрагивая сеть или сами приложения. Axis вышла из «скрытого режима» в 2020 году.
BreachQuest, вышедшая из «скрытого режима» 25 августа 2021 года, предлагает платформу реагирования на инциденты под названием Priori. Платформа обеспечивает большую наглядность за счет постоянного отслеживания вредоносной активности. Компания утверждает, что Priori может предоставить мгновенную информацию об атаке и о том, какие конечные точки скомпрометированы после обнаружения угрозы.
Cloudrise предоставляет услуги управляемой защиты данных и автоматизации безопасности в формате SaaS. Несмотря на свое название, Cloudrise защищает как облачные, так и локальные данные. Компания утверждает, что может интегрировать защиту данных в проекты цифровой трансформации. Cloudrise автоматизирует рабочие процессы с помощью решений для защиты данных и конфиденциальности. Компания Cloudrise была запущена в октябре 2019 года.
Cylentium утверждает, что ее технология кибер-невидимости может «скрыть» корпоративную или домашнюю сеть и любое подключенное к ней устройство от обнаружения злоумышленниками. Компания называет эту концепцию «нулевой идентичностью». Компания продает свою продукцию предприятиям, потребителям и государственному сектору. Cylentium была запущена в 2020 году.
Компания Deduce , основанная в 2019 году, предлагает два продукта для так называемого «интеллектуального анализа личности». Служба оповещений клиентов отправляет клиентам уведомления о потенциальной компрометации учетной записи, а оценка риска идентификации использует агрегированные данные для оценки риска компрометации учетной записи. Компания использует когнитивные алгоритмы для анализа конфиденциальных данных с более чем 150 000 сайтов и приложений для выявления возможного мошенничества. Deduce заявляет, что использование ее продуктов снижает ущерб от захвата аккаунта более чем на 90%.
Автоматизированная платформа безопасности и соответствия Drata ориентирована на готовность к аудиту по таким стандартам, как SOC 2 или ISO 27001. Drata отслеживает и собирает данные о мерах безопасности, чтобы предоставить доказательства их наличия и работы. Платформа также помогает оптимизировать рабочие процессы. Drata была основана в 2020 году.
FYEO – это платформа для мониторинга угроз и управления доступом для потребителей, предприятий и малого и среднего бизнеса. Компания утверждает, что ее решения для управления учетными данными снимают бремя управления цифровой идентификацией. FYEO Domain Intelligence («FYEO DI») предоставляет услуги мониторинга домена, учетных данных и угроз. FYEO Identity будет предоставлять услуги управления паролями и идентификацией, начиная с четвертого квартала 2021 года. FYEO вышла из «скрытого режима» в 2021 году.
Kronos – платформа прогнозирующей аналитики уязвимостей (PVA) от компании Hive Pro , основанная на четырех основных принципах: предотвращение, обнаружение, реагирование и прогнозирование. Hive Pro автоматизирует и координирует устранение уязвимостей с помощью единого представления. Продукт компании Artemis представляет собой платформу и услугу для тестирования на проникновение на основе данных. Компания Hive Pro была основана в 2019 году.
Израильская компания Infinipoint была основана в 2019 году. Свой основной облачный продукт она называет «идентификация устройства как услуга» или DIaaS , который представляет собой решение для идентификации и определения положения устройства. Продукт интегрируется с аутентификацией SSO и действует как единая точка принуждения для всех корпоративных сервисов. DIaaS использует анализ рисков для обеспечения соблюдения политик, предоставляет статус безопасности устройства как утверждается, устраняет уязвимости «одним щелчком».
Компания Kameleon , занимающаяся производством полупроводников, не имеет собственных фабрик и занимает особое место среди поставщиков средств кибербезопасности. Компания разработала «Блок обработки проактивной безопасности» (ProSPU). Он предназначен для защиты систем при загрузке и для использования в центрах обработки данных, управляемых компьютерах, серверах и системах облачных вычислений. Компания Kameleon была основана в 2019 году.
Облачная платформа безопасности данных Open Raven предназначена для обеспечения большей прозрачности облачных ресурсов. Платформа отображает все облачные хранилища данных, включая теневые облачные учетные записи, и идентифицирует данные, которые они хранят. Затем Open Raven в режиме реального времени отслеживает утечки данных и нарушения политик и предупреждает команды о необходимости исправлений. Open Raven также может отслеживать файлы журналов на предмет конфиденциальной информации, которую следует удалить. Компания вышла из «скрытого режима» в 2020 году.
Компания Satori, основанная в 2019 году, называет свой сервис доступа к данным “DataSecOps”. Целью сервиса является отделение элементов управления безопасностью и конфиденциальностью от архитектуры. Сервис отслеживает, классифицирует и контролирует доступ к конфиденциальным данным. Имеется возможность настроить политики на основе таких критериев, как группы, пользователи, типы данных или схема, чтобы предотвратить несанкционированный доступ, замаскировать конфиденциальные данные или запустить рабочий процесс. Сервис предлагает предварительно настроенные политики для общих правил, таких как GDPR , CCPA и HIPAA .
Компания Scope Security недавно вышла из «скрытого режима», будучи основана в 2019 году. Ее продукт Scope OmniSight нацелен на отрасль здравоохранения и обнаруживает атаки на ИТ-инфраструктуру, клинические системы и системы электронных медицинских записей . Компонент анализа угроз может собирать индикаторы угроз из множества внутренних и сторонних источников, представляя данные через единый портал.
Основным продуктом Strata является платформа Maverics Identity Orchestration Platform . Это распределенная мультиоблачная платформа управления идентификацией. Заявленная цель Strata – обеспечить согласованность в распределенных облачных средах для идентификации пользователей для приложений, развернутых в нескольких облаках и локально. Функции включают в себя решение безопасного гибридного доступа для расширения доступа с нулевым доверием к локальным приложениям для облачных пользователей, уровень абстракции идентификации для лучшего управления идентификацией в мультиоблачной среде и каталог коннекторов для интеграции систем идентификации из популярных облачных систем и систем управления идентификацией. Strata была основана в 2019 году.
SynSaber , запущенная 22 июля 2021 года, предлагает решение для мониторинга промышленных активов и сети. Компания обещает обеспечить «постоянное понимание и осведомленность о состоянии, уязвимостях и угрозах во всех точках промышленной экосистемы, включая IIoT, облако и локальную среду». SynSaber была основана бывшими лидерами Dragos и Crowdstrike.
Traceable называет свой основной продукт на основе искусственного интеллекта чем-то средним между брандмауэром веб-приложений и самозащитой приложений во время выполнения. Компания утверждает, что предлагает точное обнаружение и блокирование угроз путем мониторинга активности приложений и непрерывного обучения, чтобы отличать обычную активность от вредоносной. Продукт интегрируется со шлюзами API. Traceable была основана в июле 2020 года.
Компания Wiz, основанная командой облачной безопасности Microsoft, предлагает решение для обеспечения безопасности в нескольких облаках, рассчитанное на масштабную работу. Компания утверждает, что ее продукт может анализировать все уровни облачного стека для выявления векторов атак с высоким риском и обеспечивать понимание, позволяющее лучше расставлять приоритеты. Wiz использует безагентный подход и может сканировать все виртуальные машины и контейнеры. Wiz вышла из «скрытого режима» в 2020 году.
Работает на CMS “1С-Битрикс: Управление сайтом”
bit2checkcom cvvshoplv