Qiling is an advanced binary emulation framework, with the following features:
Qiling vs Other Emulators
There are many open source emulators, but two projects closest to Qiling are Unicorn & Qemu usermode. This section explains the main differences of Qiling against them.
Qiling vs Unicorn engine
Built on top of Unicorn, but Qiling & Unicorn are two different animals.
Also Read – Obfuscapk : Black-Box Obfuscation Tool For Android Apps
Qiling vs Qemu usermode
Qemu usermode does similar thing to our emulator, that is to emulate whole executable binaries in cross-architecture way. However, Qiling offers some important differences against Qemu usermode.
Install
Run below command line to install Qiling (Python3 is required).
python3 setup.py install
Examples
from qiling import *
#sandbox to emulate the EXE
def my_sandbox(path, rootfs):
# setup Qiling engine
ql = Qiling(path, rootfs)
# now emulate the EXE
ql.run()
if name == “main“:
# execute Windows EXE under our rootfs
my_sandbox([“examples/rootfs/x86_windows/bin/x86-windows-hello.exe”], “examples/rootfs/x86_windows”)
from qiling import *
def force_call_dialog_func(ql):
# get DialogFunc address
lpDialogFunc = ql.unpack32(ql.mem_read(ql.sp – 0x8, 4))
# setup stack memory for DialogFunc
ql.stack_push(0)
ql.stack_push(1001)
ql.stack_push(273)
ql.stack_push(0)
ql.stack_push(0x0401018)
# force EIP to DialogFunc
ql.pc = lpDialogFunc
def my_sandbox(path, rootfs):
ql = Qiling(path, rootfs)
# 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(0x00401016, force_call_dialog_func)
ql.run()
if name == “main“:
my_sandbox([“rootfs/x86_windows/bin/Easy_CrackMe.exe”], “rootfs/x86_windows”)
The below Youtube video shows how the above example works.
Wannacry demo
Qltool
Qiling also provides a friendly tool named qltool
to quickly emulate shellcode & executable binaries.
To emulate a binary, run:
$ ./qltool run -f examples/rootfs/arm_linux/bin/arm32-hello –rootfs examples/rootfs/arm_linux/
To run shellcode, run:
$ ./qltool shellcode –os linux –arch x86 –asm -f examples/shellcodes/lin32_execve.asm
SpyAI is a sophisticated form of malware that leverages advanced technologies to capture and analyze…
The Proxmark3 is a versatile, open-source tool designed for radio-frequency identification (RFID) security analysis, research,…
The "Awesome Solana Security" collection is a comprehensive resource designed to help developers build more…
The "IngressNightmare" vulnerabilities, disclosed in March 2025, represent a critical set of security issues affecting…
AdaptixC2 is an advanced post-exploitation and adversarial emulation framework designed specifically for penetration testers. It…
Bincrypter is a powerful Linux binary runtime crypter written in BASH. It is designed to…