
Pure Rust製x86ハードウェアエミュレータおよびWindowsプロセスシミュレータ。マルウェア解析、シェルコードエミュレーション、ペイロードアンパックに対応。32/64ビットPE実行ファイル、Metasploit、Cobalt Strike、複雑なマルウェアファミリをサポートします。
純粋な Rust で実装されたハードウェアエミュレータ + OS プロセスシミュレータです。
このアプローチはマルウェア解析やその他の用途(PE、シェルコードなど)に非常に便利です。
OS は主に Windows で、Windows プロセスをエミュレートし、Linux へのごく基本的なサポートもあります。
ハードウェアは x86 32/64ビットで、高速かつ信頼性があります。

このプロジェクトは scemu から mwemu に改名されました。
r2con2025 では、mwemu から radare2 を使用して、エミュレーション中の瞬間に静的解析と可視化を行っています。
📦 Rust の安全性、マルウェアのエミュレーションに適しています。
⚡ 非常に高速なエミュレーション
iced-x86 Rust ディスアセンブラという素晴らしいライブラリを採用。
コマンドラインツール、Rust ライブラリ、Python ライブラリ。
イテレーション検出器。
メモリとレジスタの追跡。
カラー化。
特定の瞬間に停止して状態を調査したり変更したりできます。
339 個の CPU 命令を実装。
15 個の DLL から 260 個の winapi 32ビットを実装。
10 個の DLL から 204 個の winapi 64ビットを実装。
すべての Linux システムコール。
SEH チェーン。
ベクタード例外ハンドラ。
PEB、TEB 構造体。
動的リンク。
IAT バインディング。
遅延読み込み。
メモリアロケータ。
int3 への反応。
デバッグされていない cpuid。
32ビットおよび64ビットのシェルコードエミュレーション。
pe32 および pe64 実行ファイルのエミュレーション。
既知のペイロードによる完全なエミュレーション:
複雑なマルウェア機能による部分的なエミュレーション:
エミュレーション中に、エミュレートされた CPU 命令の数を確認できます。これはエミュレーションの瞬間を表す一意の ID です。
-c フラグを使用すると、特定の瞬間にエミュレーションを停止し、コンソールで何が起こっているかを調査できます。
MWEMU emulator for malware 0.7.11
@sha0coder
USAGE:
mwemu [FLAGS] [OPTIONS]
FLAGS:
-6, --64bits enable 64bits architecture emulation
--banzai skip unimplemented instructions, and keep up emulating what can be emulated
--flags trace the flags hex value in every instruction.
-F, --fpu trace the fpu states.
-h, --handle handle Ctrl+C to spawn console
--help Prints help information
-l, --loops show loop interations, it is slow.
-m, --memory trace all the memory accesses read and write.
-n, --nocolors print without colors for redirectin to a file >out
-r, --regs print the register values in every step.
-p, --stack_trace trace stack on push/pop
-t, --test test mode
--version Prints version information
-v, --verbose -vv for view the assembly, -v only messages, without verbose only see the api calls and goes
faster
OPTIONS:
-A, --args <ARGS> provide arguments to the EXE like: --args '"aa" "bb"'
--cmd <COMMAND> launch a console command
-b, --base <ADDRESS> set base address for code
-c, --console <NUMBER> select in which moment will spawn the console to inspect.
-C, --console_addr <ADDRESS> spawn console on first eip = address
-d, --dump <FILE> load from dump.
-a, --entry <ADDRESS> entry point of the shellcode, by default starts from the beginning.
-e, --exit <POSITION> exit position of the shellcode
-f, --filename <FILE> set the shellcode binary file.
-i, --inspect <DIRECTION> monitor memory like: -i 'dword ptr [ebp + 0x24]
--iso <ISO> extract genuine system32 DLLs from a Windows ISO and use them as the maps folder, e.g. --iso ~/Downloads/win11.iso
-L, --log <LOG_FILENAME> log output to file
-M, --maps <PATH> select the memory maps folder
--mxcsr <MXCSR> set mxcsr register
--r10 <R10> set r10 register
--r11 <R11> set r11 register
--r12 <R12> set r12 register
--r13 <R13> set r13 register
--r14 <R14> set r14 register
--r15 <R15> set r15 register
--r8 <R8> set r8 register
--r9 <R9> set r9 register
--rax <RAX> set rax register
--rbp <RBP> set rbp register
--rbx <RBX> set rbx register
--rcx <RCX> set rcx register
--rdi <RDI> set rdi register
--rdx <RDX> set rdx register
-R, --reg <REGISTER1,REGISTER2> trace a specific register in every step, value and content
--rflags <RFLAGS> set rflags register
--rsi <RSI> set rsi register
--rsp <RSP> set rsp register
-x, --script <SCRIPT> launch an emulation script, see scripts_examples folder
--stack_address <ADDRESS> set stack address
-s, --string <ADDRESS> monitor string on a specific address
-T, --trace <TRACE_FILENAME> output trace to specified file
-S, --trace_start <TRACE_START> start trace at specified position
-V, --verbose_at <NUMBER> start displaying assembly at specific position (is like -vv enabled in specific
moment)
64ビットには -6 フラグ、ASM を表示するには -vv、特定の瞬間にコンソールを起動するには -c が必要です:
cargo run --release -- -f /tmp/shellcode.bin -6 -vv -c 19291
cargo run --release -- -f /bin/ls -6 -A '"-l"' -v
cargo run --release -- -f calc.exe -6 --winver win11
cargo run --release -- -f calc.exe -6 --winver win11 --syscall-mode
make tests
mwemu は execve() 割り込みを検出する単純なシェルコードをエミュレートします。
このツールを scemu から mwemu に改名したことに注意してください(イタリア語で scemu は悪い言葉です)

停止してメモリを検査する行を選択します。

Linux 上で GuLoader win32 の約200万命令をエミュレートした後、途中で cpuid などを偽装し、デバッガを混乱させるための sigtrap に到達します。
