
Сценарии использования Qiling, блог и связанные работы
Qiling — это продвинутый фреймворк для эмуляции бинарных файлов, обладающий следующими возможностями:
- Эмуляция нескольких платформ: Windows, macOS, Linux, Android, BSD, UEFI, DOS, MBR.
- Эмуляция нескольких архитектур: 8086, X86, X86_64, ARM, ARM64, MIPS, RISC-V, PowerPC.
- Поддержка множества форматов файлов: PE, Mach-O, ELF, COM, MBR.
- Поддержка драйверов Windows (.sys), модулей ядра Linux (.ko) и macOS (.kext) через Demigod.
- Эмуляция и изоляция кода в изолированной среде.
- Полностью настраиваемая песочница.
- Детализированные API на уровне памяти, регистров, ОС и файловой системы.
- Тонкая инструментация: возможность установки хуков на различных уровнях (инструкция/базовый блок/доступ к памяти/исключение/системный вызов/ввод-вывод и т.д.).
- API уровня виртуальной машины, такие как сохранение и восстановление текущего состояния выполнения.
- Поддержка отладки с перекрёстной архитектурой и платформой.
- Встроенный отладчик с возможностью обратной отладки.
- Динамическое «горячее» патчирование выполняемого кода на лету, включая загруженные библиотеки.
- Полноценный фреймворк на Python, упрощающий создание собственных инструментов анализа безопасности.
Qiling также был представлен на различных международных конференциях.
2022:
2021:
2020:
2019:
Qiling работает на базе Unicorn Engine.
Посетите наш веб-сайт для получения дополнительной информации.
Лицензия
Эта программа является свободным программным обеспечением; вы можете распространять и/или изменять её в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения; либо версии 2 Лицензии, либо (по вашему выбору) любой более поздней версии.
Qiling против других эмуляторов
Существует множество эмуляторов с открытым исходным кодом, но два проекта, наиболее близкие к Qiling: Unicorn и QEMU user mode. В этом разделе объясняются основные различия между Qiling и ними.
Qiling против Unicorn engine
Построенный на основе Unicorn, но Qiling и Unicorn — это две разные сущности.
- Unicorn — это просто эмулятор ЦП, поэтому он фокусируется на эмуляции инструкций ЦП, которые могут понимать память эмулятора. Помимо этого, Unicorn не знает о концепциях более высокого уровня, таких как динамические библиотеки, системные вызовы, обработка ввода-вывода или исполняемые форматы, такие как PE, Mach-O или ELF. В результате Unicorn может эмулировать только сырые машинные инструкции без контекста операционной системы (ОС).
- Qiling спроектирован как фреймворк более высокого уровня, использующий Unicorn для эмуляции инструкций ЦП, но понимающий ОС: в нём есть загрузчики исполняемых форматов (для PE, Mach-O и ELF в настоящее время), динамические компоновщики (чтобы мы могли загружать и перемещать общие библиотеки), обработчики системных вызовов и ввода-вывода. По этой причине Qiling может запускать исполняемые двоичные файлы без необходимости в их родной ОС.
Qiling против QEMU user mode
Режим пользователя QEMU делает нечто подобное нашему эмулятору, а именно эмулирует целые исполняемые двоичные файлы кроссплатформенным способом. Однако Qiling предлагает несколько важных отличий от QEMU user mode:
- Qiling — это настоящий фреймворк для анализа, который позволяет создавать на его основе собственные инструменты динамического анализа (на Python). В то же время QEMU — это просто инструмент, а не фреймворк.
- Qiling может выполнять динамическую инструментацию и даже «горячее» патчирование кода во время выполнения. QEMU не умеет ни того, ни другого.
- Qiling не только работает с разными архитектурами, но и является кроссплатформенным. Например, вы можете запустить файл ELF для Linux в среде Windows. Напротив, режим пользователя QEMU запускает только двоичные файлы той же ОС, например, Linux ELF на Linux, из-за способа перенаправления системных вызовов из эмулируемого кода в родную ОС.
- Qiling поддерживает больше платформ, включая Windows, macOS, Linux и BSD. Режим пользователя QEMU может обрабатывать только Linux и BSD.
Установка
Пожалуйста, обратитесь к руководству по установке для получения информации о том, как установить Qiling Framework.
Примеры
Приведённый ниже пример демонстрирует наиболее простой способ использования Qiling framework для эмуляции исполняемого файла Windows.
from qiling import Qiling
if __name__ == "__main__":
# initialize Qiling instance, specifying the executable to emulate and the emulated system root.
# note that the current working directory is assumed to be Qiling home
ql = Qiling([r'examples/rootfs/x86_windows/bin/x86_hello.exe'], r'examples/rootfs/x86_windows')
# start emulation
ql.run()
- Следующий пример показывает, как crackme для Windows может быть динамически пропатчен, чтобы всегда отображать диалог «Congratulation».
from qiling import Qiling
def force_call_dialog_func(ql: Qiling):
# get DialogFunc address from current stack frame
lpDialogFunc = ql.stack_read(-8)
# setup stack memory for DialogFunc
ql.stack_push(0)
ql.stack_push(1001) # IDS_APPNAME
ql.stack_push(0x111) # WM_COMMAND
ql.stack_push(0)
# push return address
ql.stack_push(0x0401018)