Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
mwemu — Emulador de hardware x86 en Rust puro y simulador de procesos de Windows para análisis de malware, emulación de shellcode y desempaquetado de payloads. Soporta ejecutables PE de 32/64 bits, Metasploit, Cobalt Strike y familias de malware complejas. | Kitploit
Herramientas/GitHubGitHub/mwemuorg/mwemu
Frameworks de ExploitsIngeniería InversaShellcodeAnálisis de MalwareAnálisis de Binarios
GitHubmwemuorg/mwemu

mwemu

Emulador de hardware x86 en Rust puro y simulador de procesos de Windows para análisis de malware, emulación de shellcode y desempaquetado de payloads. Soporta ejecutables PE de 32/64 bits, Metasploit, Cobalt Strike y familias de malware complejas.

Ver Repositorio
31344hace 6 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

MWEmu

CI mwemu crates.io libmwemu crates.io Docs.rs PyPI License: GPL v3 MSRV

Documentación oficial

mwemu.github.io

¿Qué es esto?

Es un emulador de hardware + simulador de procesos de SO implementado en rust puro.

Este enfoque es muy conveniente para el análisis de malware y otras cosas (PE, shellcode, etc.)

El SO es principalmente Windows, emula un proceso de Windows, con soporte muy básico para Linux.

El hardware es x86 de 32/64 bits, es rápido y confiable.

MWEMU Logo

Tres formas de usar el software

  • mwemu línea de comandos https://github.com/mwemuorg/mwemu
  • libmwemu crate https://crates.io/crates/libmwemu
  • pymwemu https://pypi.org/project/pymwemu/

Nota sobre scemu

El proyecto fue renombrado de scemu a mwemu.

Algunos videos

r2con2025 usando radare2 desde mwemu para realizar análisis estático y visualización dentro de un momento de emulación.

algunas demostraciones

Características

  • 📦 seguridad de Rust, bueno para emular malware.

    • Todas las dependencias están en Rust.
  • ⚡ emulación muy rápida

    • puntos de referencia
    • 25,767,432 instrucciones/segundo
    • 680,000 instrucciones/segundo imprimiendo cada instrucción -vv.
    • pruébalo tú mismo: time mwemu -f test/exe64win_enigma.bin -6 -v -c 20000000 --cmd q
  • impulsado por la increíble biblioteca de desensamblado iced-x86 en Rust.

  • herramienta de línea de comandos, biblioteca de Rust y biblioteca de Python.

  • detector de iteración.

  • seguimiento de memoria y registros.

  • coloreado.

  • detenerse en un momento específico y explorar el estado o modificarlo.

  • 339 instrucciones de CPU implementadas.

  • 260 winapi de 32 bits implementadas de 15 dlls.

  • 204 winapi de 64 bits implementadas de 10 dlls.

  • todas las syscalls de Linux.

  • cadenas SEH.

  • manejador de excepciones vectorizado.

  • estructuras PEB, TEB.

  • enlace dinámico.

  • enlace IAT.

  • carga diferida.

  • asignador de memoria.

  • reaccionar con int3.

  • cpuid no depurado.

  • emulación de shellcode de 32 y 64 bits.

  • emulación de ejecutables pe32 y pe64.

  • emulación completa con payloads conocidos:

    • shellcodes de metasploit.
    • encoders de metasploit.
    • cobalt strike.
    • shellgen.
    • guloader (no totalmente por ahora, pero llega más lejos que el depurador)
    • mars stealer pe32.
    • bumblebee.
  • emulación parcial con funciones complejas de malware:

    • guloader
    • xloader
    • danabot

pymwemu vs malware

  • raccoon, descifrado de cadenas
  • vidar, descifrado de cadenas
  • xloader, descifrado total, keygen, cifrado de URL de compilación.
  • lokibot, desofuscación de API
  • mars, desempaquetado y obtención de IOC
  • shikata, decodificación y obtención de IOC
  • danabot, descifrado de cadenas
  • zloader, descifrado de cadenas
  • bumblebee, desempaquetado después de emular 25,515,274,634 instrucciones.
  • enigma loader, desofuscación de API y descifrado de drop
  • bugsleep, desempaquetado
  • gozi, descifrado de bss y predictor de DGA.

Capturar un momento de emulación

Durante la emulación puedes ver el número de instrucciones de CPU emuladas, que es un ID único para un momento de emulación.

Con la bandera -c detienes la emulación en un momento específico e inspeccionas lo que está sucediendo en la consola.

Uso

root@kitploit:~
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)

Ejemplos de línea de comandos

64bits necesita la bandera -6, -vv para ver el ASM, y -c para abrir la consola en un momento específico:

root@kitploit:~
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

Pruebas

make tests

Algunos casos de uso

mwemu emula un shellcode simple detectando la interrupción execve(). Nota: renombré esta herramienta de scemu a mwemu (en italiano scemu es una mala palabra) explorando shellcode básico

Seleccionamos la línea para detenernos e inspeccionar la memoria. inspeccionando shellcode básico

Después de emular cerca de 2 millones de instrucciones de GuLoader win32 en Linux, falseando cpuid's y otros trucos en el camino, llega a un sigtrap para confundir a los depuradores. manejadores de excepción

Ejemplo de volcado de memoria en el cargador de API. volcado de memoria

Hay varios mapas por defecto, y se pueden crear más con APIs como LoadLibraryA o manualmente desde la consola.

mapas

Emulando shellcode básico de Windows basado en LdrLoadDLl() que imprime un mensaje: cuadro de mensaje

La consola permite ver y editar el estado actual de la CPU:

root@kitploit:~
--- console ---
=>h
--- help ---
q ...................... quit
cls .................... clear screen
h ...................... help
s ...................... stack
v ...................... vars
r ...................... register show all
r reg .................. show reg
rc ..................... register change
f ...................... show all flags
fc ..................... clear all flags
fz ..................... toggle flag zero
fs ..................... toggle flag sign
c ...................... continue
ba ..................... breakpoint on address
bi ..................... breakpoint on instruction number
bmr .................... breakpoint on read memory
bmw .................... breakpoint on write memory
bc ..................... clear breakpoint
n ...................... next instruction
eip .................... change eip
push ................... push dword to the stack
pop .................... pop dword from stack
fpu .................... fpu view
md5 .................... check the md5 of a memory map
seh .................... view SEH
veh .................... view vectored execption pointer
m ...................... memory maps
ma ..................... memory allocs
mc ..................... memory create map
mn ..................... memory name of an address
ml ..................... memory load file content to map
mr ..................... memory read, speficy ie: dword ptr [esi]
mw ..................... memory read, speficy ie: dword ptr [esi]  and then: 1af
md ..................... memory dump
mrd .................... memory read dwords
mds .................... memory dump string
mdw .................... memory dump wide string
mdd .................... memory dump to disk
mt ..................... memory test
ss ..................... search string
sb ..................... search bytes
sba .................... search bytes in all the maps
ssa .................... search string in all the maps
ll ..................... linked list walk
d ...................... dissasemble
dt ..................... dump structure
enter .................. step into

El cargador de API de cobalt strike es el mismo que el de metasploit, emulándolo: cargador de API

API de Cobalt Strike llamada: cobalt strike

API de Metasploit rshell llamada: rshell de metasploit

Codificador SGN de Metasploit usando pocas fpu para ocultar el polimorfismo: codificado msf

Codificador shikata-ga-nai de Metasploit que también comienza con fpu: shikata

Mostrando estructura PEB:

root@kitploit:~
=>dt
structure=>peb
address=>0x7ffdf000
PEB {
    reserved1: [
        0x0,
        0x0,
    ],
    being_debugged: 0x0,
    reserved2: 0x0,
    reserved3: [
        0xffffffff,
        0x400000,
    ],
    ldr: 0x77647880,
    process_parameters: 0x2c1118,
    reserved4: [
        0x0,
        0x2c0000,
        0x77647380,
    ],
    alt_thunk_list_ptr: 0x0,
    reserved5: 0x0,
    reserved6: 0x6,
    reserved7: 0x773cd568,
    reserved8: 0x0,
    alt_thunk_list_ptr_32: 0x0,
    reserved9: [
        0x0,
...

Mostrando estructura PEB_LDR_DATA:

root@kitploit:~
=>dt
structure=>PEB_LDR_DATA
address=>0x77647880
PebLdrData {
    length: 0x30,
    initializated: 0x1,
    sshandle: 0x0,
    in_load_order_module_list: ListEntry {
        flink: 0x2c18b8,
        blink: 0x2cff48,
    },
    in_memory_order_module_list: ListEntry {
        flink: 0x2c18c0,
        blink: 0x2cff50,
    },
    in_initialization_order_module_list: ListEntry {
        flink: 0x2c1958,
        blink: 0x2d00d0,
    },
    entry_in_progress: ListEntry {
        flink: 0x0,
        blink: 0x0,
    },
}
=>

Mostrando LDR_DATA_TABLE_ENTRY y el primer nombre de módulo:

root@kitploit:~
=>dt
structure=>LDR_DATA_TABLE_ENTRY
address=>0x2c18c0
LdrDataTableEntry {
    reserved1: [
        0x2c1950,
        0x77647894,
    ],
    in_memory_order_module_links: ListEntry {
        flink: 0x0,
        blink: 0x0,
    },
    reserved2: [
        0x0,
        0x400000,
    ],
    dll_base: 0x4014e0,
    entry_point: 0x1d000,
    reserved3: 0x40003e,
    full_dll_name: 0x2c1716,
    reserved4: [
        0x0,
        0x0,
        0x0,
        0x0,
        0x0,
        0x0,
        0x0,
        0x0,
    ],
    reserved5: [
        0x17440012,
        0x4000002c,
        0xffff0000,
    ],
    checksum: 0x1d6cffff,
    reserved6: 0xa640002c,
    time_date_stamp: 0xcdf27764,
}
=>

Un malware está ocultando algo en una excepción:

root@kitploit:~
3307726 0x4f9673: push  ebp
3307727 0x4f9674: push  edx
3307728 0x4f9675: push  eax
3307729 0x4f9676: push  ecx
3307730 0x4f9677: push  ecx
3307731 0x4f9678: push  4F96F4h
3307732 0x4f967d: push  dword ptr fs:[0]
Reading SEH 0x0
-------
3307733 0x4f9684: mov   eax,[51068Ch]
--- console ---
=>

Inspeccionemos las estructuras de excepción:

root@kitploit:~
--- console ---
=>r esp
        esp: 0x22de98
=>dt
structure=>cppeh_record
address=>0x22de98
CppEhRecord {
    old_esp: 0x0,
    exc_ptr: 0x4f96f4,
    next: 0xfffffffe,
    exception_handler: 0xfffffffe,
    scope_table: PScopeTableEntry {
        enclosing_level: 0x278,
        filter_func: 0x51068c,
        handler_func: 0x288,
    },
    try_level: 0x288,
}
=>

Y aquí tenemos la rutina de error 0x4f96f4 y el filtro 0x51068c

Historial de estrellas

Gráfico de historial de estrellas

Descargar herramienta