
Um Verdadeiro Framework de Emulação Binária Instrumentável
Casos de uso do Qiling, blog e trabalhos relacionados
Qiling é um framework avançado de emulação binária, com as seguintes funcionalidades:
Qiling também marcou presença em várias conferências internacionais.
2022:
2021:
2020:
2019:
Qiling é apoiado pelo Unicorn Engine.
Visite nosso site para mais informações.
Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da GNU General Public License conforme publicada pela Free Software Foundation; seja a versão 2 da Licença, ou (a seu critério) qualquer versão posterior.
Existem muitos emuladores de código aberto, mas dois projetos mais próximos do Qiling são Unicorn e QEMU user mode. Esta seção explica as principais diferenças do Qiling em relação a eles.
Construído sobre o Unicorn, mas Qiling e Unicorn são dois animais diferentes.
O modo de usuário do QEMU faz algo semelhante ao nosso emulador, ou seja, emular binários executáveis completos de forma cross-architecture. No entanto, o Qiling oferece algumas diferenças importantes em relação ao modo de usuário do QEMU:
Por favor, consulte o guia de instalação para saber como instalar o Qiling Framework.
O exemplo abaixo mostra como usar o framework Qiling da maneira mais direta para emular um executável 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()
O vídeo do YouTube abaixo mostra como o exemplo acima funciona.
O Qiling Framework faz hot-patch e emula o /usr/bin/httpd de um roteador ARM em um host Ubuntu x86_64.
Este vídeo demonstra como o plugin do Qiling para IDA Pro pode fazer o IDA Pro rodar com o motor de instrumentação do Qiling.
Plugin do Qiling para IDA Pro: Instrumentar e Decifrar o Segredo do Mirai
Resolvendo um desafio CTF simples com Qiling Framework e IDA Pro
Resolvendo um desafio CTF simples com Qiling Framework e IDA Pro
Qiling Framework emula MBR
Qiling também fornece uma ferramenta amigável chamada qltool para emular rapidamente shellcode e binários executáveis.
Com o qltool, a execução fácil pode ser realizada:
Com shellcode:
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
Com arquivo binário:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
Com binário e depurador GDB habilitado:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
Com coleta de cobertura de código (apenas UEFI por enquanto):
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
Com saída JSON (principalmente Windows):
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
Obtenha as informações mais recentes em nosso site https://www.qiling.io
Contate-nos pelo e-mail [email protected], via Twitter @qiling_io.
Por favor, consulte CREDITS.md.