
Полноценный инструментируемый фреймворк для эмуляции двоичного кода
Сценарии использования Qiling, блог и связанные работы
Qiling — это продвинутый фреймворк для эмуляции бинарных файлов, обладающий следующими возможностями:
Qiling также был представлен на различных международных конференциях.
2022:
2021:
2020:
2019:
Qiling работает на базе Unicorn Engine.
Посетите наш веб-сайт для получения дополнительной информации.
Эта программа является свободным программным обеспечением; вы можете распространять и/или изменять её в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения; либо версии 2 Лицензии, либо (по вашему выбору) любой более поздней версии.
Существует множество эмуляторов с открытым исходным кодом, но два проекта, наиболее близкие к Qiling: Unicorn и QEMU user mode. В этом разделе объясняются основные различия между Qiling и ними.
Построенный на основе Unicorn, но Qiling и Unicorn — это две разные сущности.
Режим пользователя QEMU делает нечто подобное нашему эмулятору, а именно эмулирует целые исполняемые двоичные файлы кроссплатформенным способом. Однако Qiling предлагает несколько важных отличий от QEMU user mode:
Пожалуйста, обратитесь к руководству по установке для получения информации о том, как установить 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()
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)
# resume emulation from DialogFunc address
ql.arch.regs.eip = lpDialogFunc
if __name__ == "__main__":
# initialize Qiling instance
ql = Qiling([r'rootfs/x86_windows/bin/Easy_CrackMe.exe'], r'rootfs/x86_windows')
# NOP out some code
ql.patch(0x004010B5, b'\x90\x90')
ql.patch(0x004010CD, b'\x90\x90')
ql.patch(0x0040110B, b'\x90\x90')
ql.patch(0x00401112, b'\x90\x90')
# hook at an address with a callback
ql.hook_address(force_call_dialog_func, 0x00401016)
ql.run()
На видео ниже показано, как работает приведённый выше пример.
Qiling Framework «горяче» патчит и эмулирует /usr/bin/httpd маршрутизатора ARM на хосте Ubuntu x86_64.
На этом видео показано, как плагин IDA Pro для Qiling позволяет запускать IDA Pro с движком инструментации Qiling.
Qiling's IDA Pro Plugin: Instrument and Decrypt Mirai's Secret
Решение простой задачи CTF с помощью Qiling Framework и IDA Pro.
Solving a simple CTF challenge with Qiling Framework and IDA Pro
Qiling Framework эмулирует MBR
Qiling также предоставляет удобный инструмент под названием qltool для быстрой эмуляции шеллкода и исполняемых двоичных файлов.
С помощью qltool можно легко выполнять:
С шеллкодом:
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
С двоичным файлом:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
С двоичным файлом и включённым отладчиком GDB:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
Со сбором покрытия кода (только для UEFI на данный момент):
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
С выводом в JSON (в основном для Windows):
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
Получайте последнюю информацию на нашем веб-сайте https://www.qiling.io
Свяжитесь с нами по электронной почте [email protected], через Twitter @qiling_io.
Пожалуйста, обратитесь к CREDITS.md.