Dyncvoke
Rust crate for indirect syscalls, dynamic API resolution, and call stack spoofing on Windows. Call NT functions without putting their names in your import table and without going through inline hooks on ntdll.
Features
- ✅ Indirect syscalls via Tartarus Gate (Hell's, Halo's, Tartarus prologues).
- ✅ Call stack spoofing in
SyntheticandDesyncmodes. - ✅ Uniform macros:
syscall!,do_syscall!,spoof!,spoof_syscall!. - ✅ Manual PE mapping, section overloading, module fluctuation, syscall parameter spoofing.
- ✅
#, MSVC and GNU toolchains, x86_64.
Layout
dyncvoke_core sys module, dynamic invocation, nt_* wrappers
dyncvoke_core::sys Tartarus Gate and the variadic do_syscall gateway
manualmap PE mapping with relocations and IAT rewriting
overload section overloading, module stomping, template stomping
dmanager module fluctuation manager
spoof call stack spoofing, synthetic and desync modes
data shared types and FFI signatures
Adding it
[]
= "0.1"
Windows x86_64 only (x86_64-pc-windows-msvc or x86_64-pc-windows-gnu). GNU spoof builds need NASM on PATH. Full API docs: docs.rs/dyncvoke.
= { = "0.1", = ["full"] }
Git:
[]
= { = "https://git.smukx.site/smukx/Dyncvoke.git" }
Feature flags:
syscall(default). Indirect syscall path.manualmap. PE manual mapping. Impliessyscall.overload. Section overloading and module stomping. Impliesmanualmap.dmanager. Module fluctuation manager. Impliesoverload.spoof. Call stack spoofing, synthetic mode.spoof-desync. Same asspoofbut flips desync mode on.full. Everything above.
Usage
All four call macros (syscall!, do_syscall!, spoof!, spoof_syscall!) take the same shape. Every argument is cast as usize and transmuted to *mut c_void inside the macro. Return type is Result<*mut c_void, _> (or *mut c_void for do_syscall!). Recover NTSTATUS with .unwrap() as i32.
Spoofed indirect syscall
use spoof_syscall;
use c_void;
use null_mut;
let mut addr: *mut c_void = null_mut;
let mut size: usize = 1 << 12;
let status = spoof_syscall!.unwrap as i32;
Spoofed function call
use ;
use spoof;
let kernel32 = get_module_base_address;
let win_exec = get_function_address;
let cmd = c"calc.exe";
let _ = unsafe ;
Indirect syscall without stack spoofing
use syscall;
use c_void;
use null_mut;
let mut p_tmp_address: *mut c_void = null_mut;
let mut s_chunk: usize = 0x1000;
let mut old_prot: u32 = 0;
let status = syscall!
.ok
.unwrap as i32;
Cached SSN dispatch
use ;
let = resolve_syscall.unwrap;
let status = do_syscall! as i32;
Manual mapping
use manualmap;
let = read_and_map_module.unwrap;
Section overloading
use overload;
let payload = your_download_function;
let result = overload_module.unwrap;
Module fluctuation
use ;
let mut manager = new;
let m = managed_read_and_overload.unwrap;
manager.new_module.unwrap;
manager.map_module.unwrap;
// ... call into the payload ...
manager.hide_module.unwrap;
Syscall parameter spoofing (hardware breakpoints + VEH)
use ;
use ;
unsafe