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
Starship is a powerful, minimal, and highly customizable cross-shell prompt designed to enhance the terminal…
Lemmy is an innovative, open-source platform designed for link aggregation and discussion, providing a decentralized…
The latest release of ImHex v1.37.0 introduces a host of exciting features and improvements, enhancing…
Ghauri is a cutting-edge, cross-platform tool designed to automate the detection and exploitation of SQL…
Writing tools have become indispensable for individuals looking to enhance their writing efficiency, accuracy, and…
PatchWerk is a proof-of-concept (PoC) tool designed to clean NTDLL syscall stubs by patching syscall…