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
Docker is a powerful open-source containerization platform that allows developers to build, test, and deploy…
Docker is one of the most widely used containerization platforms. But there may come a…
Introduction Google Dorking is a technique where advanced search operators are used to uncover information…
Introduction In cybersecurity and IT operations, logging fundamentals form the backbone of monitoring, forensics, and…
What is Networking? Networking brings together devices like computers, servers, routers, and switches so they…
Introduction In the world of Open Source Intelligence (OSINT), anonymity and operational security (OPSEC) are…