• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Гостевая статья MINDSHARE: использование LLDBINIT для улучшения отладчика LLDB

В последнее время я интенсивно использую для отладки всех вещей в macOS, таких как WebKit и системные демоны. Исходя из фона WinDBG, LLDB совсем другой. Я ожидал аналогичной обработки двоичных модулей в LLDB, но, к сожалению, это не так. Приятной особенностью LLDB является его настраиваемость. Его API можно использовать непосредственно из , что делает его очень гибким в добавлении функций, которые помогают ускорить отладку и делают его приятным - как визуально, так и практически. К счастью, кто-то уже сделал скрипт для этого. Они описывают это как «клон gdbinit для LLDB». Использовать этот скрипт очень просто. Просто скачайте lldbinit.py и импортируйте его в свой .lldbinit файл, например command script import ~/lldbinit.py.

Это будет выглядеть примерно так при запуске LLDB с двоичным файлом или при подключении к нему:

Picture1 (2).png


Если вы введете lldbinitcmdsего, он перечислит все новые команды, которые были введены в этот скрипт, что сделает отладку сносной и визуально приятной.

Одна функция, которую мне не хватает в LLDB, которая присутствует в WinDBG, - это возможность использовать имена модулей в точках останова со смещением, например, bp addresslib+1EE6где addresslib.dllнаходится загруженный модуль. Способ использования смещений в LLDB заключается в получении базового адреса модулей и последующем добавлении смещения. Это привело бы к следующему:

Picture2 (2).png


Это становится утомительным. Поэтому я подумал, почему бы не добавить поддержку lldbinit.py имен модулей? Идея довольно тривиальная:

1- Получить имя модуля из ввода.
2- Получить список загруженных модулей.
3- Фильтровать список с именем модуля и вернуть его базовый адрес.

Я начал с команды bpt, которая находится в функции cmd_bpt(). Ввод будет доступен в command параметре, который передается evaluate()для анализа. Первым действием, которое я сделал, было получение списка загруженных модулей:

Picture3 (2).png



Чтобы получить текущий контекст выполнения, его следует передать в cmd_bpt() соответствии с , добавив, таким образом, exe_ctxв качестве параметра. Эта функция возвращает словарь с загруженными модулями в текущем контексте.

Далее идет функция, которая фильтрует и возвращает базовый адрес модуля плюс его смещение:

Picture4 (2).png



Это должно быть само за себя. Он вернет окончательное выражение, которое состоит из базового адреса модуля плюс смещение (например 0x00007fff50c2a000+0x23351), возвращаемое из ввода, например audiotoolboxcore+0x23351.

Чтобы собрать вещи вместе, cmd_bpt() становится:

Picture5 (1).png


Также требуются декларации, такие как импорт shlexи определение по loaded_mods всему миру.

Picture6 (1).png

Ницца.

Вывод

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

Источник:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD