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
shadow-rs is a Windows kernel rootkit written in Rust, demonstrating advanced techniques for kernel manipulation…
Extract and execute a PE embedded within a PNG file using an LNK file. The…
Embark on the journey of becoming a certified Red Team professional with our definitive guide.…
This repository contains proof of concept exploits for CVE-2024-5836 and CVE-2024-6778, which are vulnerabilities within…
This took me like 4 days (+2 days for an update), but I got it…
MaLDAPtive is a framework for LDAP SearchFilter parsing, obfuscation, deobfuscation and detection. Its foundation is…