Files
zer0condition-GoodmansKernel/README.md
T
2026-08-19 01:43:39 +05:30

2.8 KiB

Goodmans

Demo

Signed WDM driver embedding wasm3. Loads unsigned .wasm modules, gives them nt/hal FFI. Write kernel logic in C/Rust, compile to wasm32, load, iterate. HVCI-compliant.

Features

  • wasm3 in the kernel, 64KB expanded stack, no JIT
  • Direct FFI to any nt/hal export by name
  • Per-module capability manifest
  • Per-slot KMUTEX, per-slot pool budget
  • SEH-guarded kernel VA read/write
  • InfinityHook trampoline
  • Process/image notify callbacks
  • Watchdog + trace/log rings
  • Qt6 GUI

Build

Needs VS 2022 + WDK 10.0.26100.0, Qt 6.9, clang wasm32.

build.cmd Release

Install

cd deploy
gen_cert.cmd
install.cmd

Needs bcdedit /set testsigning on if not signed.

IOCTLs

Code Purpose
LOAD_MODULE load .wasm, link imports
CALL_EXPORT invoke export, up to 8 args
UNLOAD_MODULE tear down runtime
LIST_MODULES / MODULE_INFO enumerate
UNLOAD_ALL / FORCE_UNLOAD bulk teardown
TAIL_LOG / TAIL_TRACE poll rings
TRACE_CTL toggle trace
READ_GUEST read guest linear memory
NOTIFY_STOP deregister callbacks

Host Imports

Import Sig
host_dbg_print v(ii)
host_alloc / host_free I(i) / v(I)
host_read_u8/32/64 i/I(I)
host_write_u64 v(II)
host_read_bytes / host_write_bytes i(Iii)
host_current_irql i()
host_process_id / host_thread_id i()
host_current_process I()
host_cpuid v(iii)
host_rdtsc I()
host_readmsr / host_writemsr I(i) / i(iI)
host_phys_read / host_phys_write i(Iii)
host_call I(iiiIIIIIIII)
host_ih_trampoline / host_ih_configure / host_ih_quiesce
host_notify_enable / host_notify_poll / host_dispatch_start / host_dispatch_stop
host_mem_base / host_mem_size I() / i()
host_make_unistr / host_free_unistr

Guest bindings in guest_sdk/gvm.h.

Capabilities

Bit Name Grants
0 ALLOC host_alloc, host_free
1 READ_KMEM host_read_*
2 WRITE_KMEM host_write_*
3 MSR_READ host_readmsr
4 MSR_WRITE host_writemsr
5 PHYSMEM host_phys_*
6 CPUID_TSC host_cpuid, host_rdtsc
7 CALLBACKS process/image notify
8 HOSTCALL host_call
9 INTROSPECT pid/tid/irql/current_process

Limits

  • no f32/f64 in guests
  • wasm memory bounds checks compiled out
  • one caller per module
  • 16MB ioctl payload
  • 32 module slots

Credits

License

MIT.