
真のインストゥルメンタブルバイナリエミュレーションフレームワーク
Qilingは高度なバイナリエミュレーションフレームワークであり、以下の機能を備えています:
Qilingはさまざまな国際会議にも登場しています。
2022:
2021:
2020:
2019:
QilingはUnicorn Engineを基盤としています。
詳細はウェブサイトをご覧ください。
このプログラムはフリーソフトウェアです。あなたはこれを、Free Software Foundationによって公開されたGNU General Public License(バージョン2、または(あなたの選択により)それ以降のバージョン)の条件の下で再配布または変更することができます。
多くのオープンソースエミュレータがありますが、Qilingに最も近いプロジェクトはUnicornとQEMUユーザーモードです。このセクションでは、Qilingとそれらの主な違いを説明します。
Unicornの上に構築されていますが、QilingとUnicornはまったく異なるものです。
QEMUユーザーモードは、クロスアーキテクチャで実行可能バイナリ全体をエミュレートするという点で、当エミュレータと似たことを行います。しかし、QilingはQEMUユーザーモードに対していくつかの重要な違いを提供します。
Qiling Frameworkのインストール方法については、セットアップガイドファイルをご覧ください。
以下の例は、Qilingフレームワークを最も簡単な方法で使用してWindows実行可能ファイルをエミュレートする方法を示しています。
from qiling import Qiling
if __name__ == "__main__":
# Qilingインスタンスを初期化し、エミュレートする実行可能ファイルとエミュレートするシステムルートを指定します。
# 現在の作業ディレクトリはQilingホームと見なされることに注意してください
ql = Qiling([r'examples/rootfs/x86_windows/bin/x86_hello.exe'], r'examples/rootfs/x86_windows')
# エミュレーションを開始
ql.run()
from qiling import Qiling
def force_call_dialog_func(ql: Qiling):
# 現在のスタックフレームからDialogFuncのアドレスを取得
lpDialogFunc = ql.stack_read(-8)
# DialogFunc用にスタックメモリをセットアップ
ql.stack_push(0)
ql.stack_push(1001) # IDS_APPNAME
ql.stack_push(0x111) # WM_COMMAND
ql.stack_push(0)
# リターンアドレスをプッシュ
ql.stack_push(0x0401018)
# DialogFuncのアドレスからエミュレーションを再開
ql.arch.regs.eip = lpDialogFunc
if __name__ == "__main__":
# Qilingインスタンスを初期化
ql = Qiling([r'rootfs/x86_windows/bin/Easy_CrackMe.exe'], r'rootfs/x86_windows')
# いくつかのコードをNOPで埋める
ql.patch(0x004010B5, b'\x90\x90')
ql.patch(0x004010CD, b'\x90\x90')
ql.patch(0x0040110B, b'\x90\x90')
ql.patch(0x00401112, b'\x90\x90')
# アドレスにコールバックをフック
ql.hook_address(force_call_dialog_func, 0x00401016)
ql.run()
以下のYouTubeビデオは、上記の例がどのように動作するかを示しています。
Qiling Frameworkは、x86_64 Ubuntuホスト上でARMルーターの/usr/bin/httpdをホットパッチしてエミュレートします。
このビデオは、QilingのIDA ProプラグインがIDA ProをQilingインストルメンテーションエンジンで実行させる方法を示しています。
QilingのIDA Proプラグイン:Miraiの秘密をインストルメントして解読
Qiling FrameworkとIDA Proを使用してシンプルなCTFチャレンジを解く
Qiling FrameworkとIDA Proを使用したシンプルなCTFチャレンジの解法
Qiling FrameworkはMBRをエミュレートします
Qilingは、シェルコードや実行可能バイナリを迅速にエミュレートするためのqltoolという便利なツールも提供しています。
qltoolを使用すると、簡単に実行できます:
シェルコードの場合:
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
バイナリファイルの場合:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
バイナリとGDBデバッガを有効にして:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
コードカバレッジ収集あり(現在はUEFIのみ):
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
JSON出力あり(主にWindows):
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
最新情報はウェブサイト https://www.qiling.io をご覧ください。
メール [email protected]、Twitter @qiling_io でお問い合わせください。
CREDITS.mdを参照してください。