
악성코드 분석, 셸코드 에뮬레이션 및 페이로드 언패킹을 위한 순수 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의 약 2백만 개 명령어를 에뮬레이션한 후, cpuid를 위조하고 다른 트릭을 사용하면서 디버거를 혼란스럽게 하기 위한 sigtrap에 도달합니다.
