Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
voidsyscall — Implant & C2 multiplateforme basé sur les appels système — appels système directs (Win), appels système bruts (Linux), canaux HTTPS/DNS/ICMP. Aucune couche winapi. | Kitploit
Outils/GitHubGitHub/voidsecsoftwares/voidsyscall
Escalade de PrivilègesOutils de Chiffrement/DéchiffrementMécanismes de PersistanceÉvasion IDS/IPSMouvement LatéralPost-ExploitationAnalyse de MalwareTests d'IntrusionCommandement et ContrôleRed TeamingDéveloppement de Charges UtilesCheval de Troie d'Accès à Distance
1819il y a 1 jourPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
GitHubvoidsecsoftwares/voidsyscall

voidsyscall

Implant & C2 multiplateforme basé sur les appels système — appels système directs (Win), appels système bruts (Linux), canaux HTTPS/DNS/ICMP. Aucune couche winapi.

Voir le dépôt

voidsyscall

go license platform c2 syscalls

Zéro WinAPI. Chaque primitive NT est résolue à l'exécution depuis ntdll en mémoire — les instructions SYSCALL sont émises directement via des stubs en assembleur Plan9, aucune table d'import, aucun hook usermode de ntdll touché. C2 via HTTPS / DNS / ICMP, AES-256-GCM par message. Windows natif. Builds Linux. Builds macOS.

Ce n'est pas une bibliothèque d'enveloppe de syscalls. C'est un framework d'implant complet où chaque opération — de l'injection de code à la lecture de fichiers en passant par la persistance dans le registre — passe par des syscalls Nt* bruts résolus au démarrage depuis la table d'export ntdll courante. Aucun appel WinAPI n'existe dans le binaire. Rien pour qu'un EDR puisse hooker en usermode.


Contenu

Moteur de syscalls

  • Résolution des SSN à l'exécution : PEB → LDR → base ntdll → table d'export PE → correspondance de hash djb2 → scan du prologue pour B8 xx xx 00 00 0F 05 (direct) ou 4C 8B D1 B8 xx xx 00 00 0F 05 (Hells Gate). Chaque nom de fonction est hashé à la compilation — aucune chaîne en clair dans le binaire.
  • Syscall direct : asm Plan9 (asm_amd64.s) charge le SSN dans EAX, définit 7 arguments à la main, exécute SYSCALL. Retour via RAX/RDX.
  • Syscall indirect : localise un gadget 0F 05 C3 (syscall;ret) dans ntdll, appelle à travers lui. Le trap CPU atterrit à l'intérieur de ntdll — la pile d'appel montre des frames ntdll, pas des frames de l'implant. Aucun hook usermode ne survit.
  • Empreinte SSN : dump tous les SSN résolus depuis le build ntdll courant, génère un hash d'empreinte. Export en hex, import sur une autre machine. Détecte les incompatibilités de build avant qu'elles ne vous grillent.
  • Unhook : Verrouille .text en RWX, copie les octets originaux depuis le ntdll mappé sur disque, restaure la protection, vide l'icache, détruit le cache SSN. Chaque hook usermode placé par n'importe quel EDR disparaît.

Injection — 4 méthodes, rotation polymorphique

L'agent alterne automatiquement entre les techniques d'injection. Chaque appel utilise une méthode différente — deux injections ne se ressemblent jamais en forensique.

Anti-analyse — 13+ méthodes de détection

Exécute toutes les vérifications, retourne un rapport de menace scoré. Auto-destruction en cas de Critical.

Opérations sur les tokens

Tout via syscalls Nt*, aucun WinAPI.

  • EnablePrivilege(index) — active n'importe quel privilège par LUID
  • EnableAllTokenPrivileges() — 20 privilèges d'un coup (Debug, Impersonate, TCB, Backup, Restore, etc.)
  • GetProcessTokenIntegrityLevel() — interroge l'intégrité obligatoire
  • StealProcessToken(pid) — ouvre + duplique le token d'un autre processus
  • ImpersonateThread() / RevertToSelf()

Opérations VAD

  • EnumVirtualMemory() — parcourt toutes les régions virtuelles via NtQueryVirtualMemory
  • FindWritableExecRegions() — trouve les régions committées PAGE_EXECUTE_READWRITE
  • HideRegion() — définit PAGE_NOACCESS pour cacher la mémoire aux scanners
  • UnhideRegion() — restaure la protection d'origine

E/S fichiers — tous des syscalls Nt*

NtCreateFile → NtReadFile / NtWriteFile → NtClose. Zéro appel CreateFileA, ReadFile, WriteFile, ou DeleteFileW. ReadFileContents(), WriteFileContents(), DeleteFileNt(), FileExists().

Persistance registre — tous des syscalls Nt*

NtCreateKey → NtSetValueKey. AddRunKeyPersistence(), RemoveRunKeyPersistence(). Aucun RegCreateKeyEx, RegSetValueEx, ou appel Advapi32.

Opérations sur les handles

  • EnumerateSystemHandles() — tous les handles ouverts du système via NtQuerySystemInformation(SystemHandleInformation)
  • FindEDRHandles() — fait correspondre les PID propriétaires avec 30+ noms de processus EDR connus (MsSense, CrowdStrike, Sentinel, Cylance, Carbon Black, etc.)
  • CloseEDRHandles() — ferme les handles de surveillance que l'EDR a placés dans votre processus
  • IsProcessMonitored() — vérification booléenne : sommes-nous surveillés ?

Chiffrement mémoire

  • Vault : Chiffrement XOR en mémoire avec re-génération automatique de clé sur minuterie. Le texte en clair n'est jamais stocké brut. La re-génération déchiffre → génère une nouvelle clé → rechiffre. Les dumps forensiques du heap entre les intervalles de re-génération obtiennent des déchets.
  • SecureDelete : effacement en 3 passes (aléatoire → zéros → uns → zéros) avant NtFreeVirtualMemory.
  • StackEncrypt : chiffre les buffers alloués sur la pile avant le retour. La réutilisation des frames de pile rend la forensique peu fiable.

Patchs AMSI / ETW / évasion

  • PatchAMSI() — AmsiScanBuffer → MOV EAX, 0; RET
  • PatchETW() — EtwEventWrite → RET
  • PatchNtTraceEvent() — NtTraceEvent → RET
  • PatchDbgUiRemoteBreakin() — thread breakin → RET
  • PatchInstrumentationCallbacks() — ThreadHideFromDebugger

Canaux C2

Tous les canaux implémentent l'interface Channel. Ajouter NTP, DoH, ou TURN signifie implémenter l'interface — zéro modification de l'agent.

Crypto

AEAD AES-256-GCM par message. Nonce unique de 12 octets par message. Keyring par implant. Dérivation de clé basée sur passphrase disponible. 3 tests, tous réussis.


Arborescence

root@kitploit:~
voidsyscall/
  syscallwin/          Direct/indirect NT syscalls + evasion
    asm_amd64.s        Syscall/IndirectSyscall/ReadGSBase/SetGSBase/asm_cpuid/asm_rdtsc
    resolve.go         PEB→LDR→ntdll walk, PE export parse, SSN cache, prologue scan
    stubs.go           ~25 Nt* wrappers, DirectSyscall, IndirectSyscallByHash
    hash.go            djb2 hash (string + UTF-16 pointer)
    constants.go       MEM_*, PAGE_*, THREAD_*, TOKEN_*, OBJ_*, REG_*, FILE_*, STATUS_*
    unhook.go          UnhookNtdll, SelfDel
    peb.go             PEB patching (BeingDebugged, NtGlobalFlag, Heap, DebugPort)
    token.go           Privilege escalation, token theft, impersonation
    vad.go             VAD enumeration, hide/unhide regions
    files.go           File I/O via Nt* syscalls
    registry.go        Registry persistence via Nt* syscalls
    fingerprint.go     SSN dump, build fingerprint, hex export/import
    inject_advanced.go 4 injection methods: section mapping, hollow, APC, module stomp
    antianalysis.go    VM/sandbox/debug/timing detection, scored threat report
    handles.go         System handle enumeration, EDR handle killer
    memcrypt.go        Vault (re-keying XOR), SecureDelete, StackEncrypt, WipeMemory
  syscallnix/          Linux/darwin raw syscalls
  patches/             AMSI, ETW, NtTraceEvent, DbgUiRemoteBreakin, InstrumentationCallbacks
  loader/              CreateThread/APC/module-stomp injection
  channels/            HTTP, DNS (TXT), ICMP — Channel interface
  crypto/              AES-256-GCM, envelope, passphrase variant (3 tests)
  server/              SessionManager, Task Queue, interactive REPL
  agent/               Config, beacon loop, 10 task handlers
  cmd/server/main.go   CLI with REPL
  cmd/agent/main.go    Windows-only entrypoint

Build

root@kitploit:~
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o voidsyscall-agent.exe   ./cmd/agent
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o voidsyscall-server.exe  ./cmd/server
GOOS=linux   GOARCH=amd64 go build -ldflags="-s -w" -o server-linux            ./cmd/server
GOOS=darwin  GOARCH=arm64 go build -ldflags="-s -w" -o server-darwin           ./cmd/server

Obfuscation avec garble :

root@kitploit:~
GOOS=windows GOARCH=amd64 garble -literals -tiny build -ldflags="-s -w" \
    -o voidsyscall-agent.exe ./cmd/agent

Utilisation

Serveur

root@kitploit:~
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
./voidsyscall-server.exe --cert cert.pem --key key.pem --https-port 443

Agent

root@kitploit:~
./voidsyscall-agent.exe -c agent/example-config.json

Protocole de tâches


Internes de la résolution SSN

  1. ReadGSBase (asm) → GS:[0x60] → TEB
  2. TEB+0x60 → PEB. PEB+0x18 → Ldr
  3. Parcours de InMemoryOrderModuleList → correspondance ntdll.dll via hash djb2
  4. Base → IMAGE_DOS_HEADER → e_lfanew → IMAGE_NT_HEADERS → DataDirectory[0] = Table d'export
  5. Parcours de AddressOfNames[], djb2 sur chacun, correspondance avec la cible
  6. Résolution de l'ordinal → AddressOfFunctions[ordinal] → adresse de la fonction
  7. Scan du prologue pour B8 xx xx 00 00 0F 05 (direct), B8 xx xx 00 00 C3 (early-ret), ou 4C 8B D1 B8 xx xx 00 00 0F 05 (Hells Gate)

Aucun nom de fonction dans le binaire. Uniquement des hashs djb2. L'instruction syscall contourne chaque hook usermode.


Gestionnaires de tâches de l'agent

root@kitploit:~
TaskShell       // exec via cmd.exe
TaskInject      // polymorphic: section/hollow/APC/stomp
TaskPatch       // AMSI/ETW/both
TaskEvasion     // PEB patches + VM/sandbox/debug/timing detection
TaskHandles     // enumerate + kill EDR monitoring handles
TaskFingerprint // dump SSN build fingerprint
TaskToken       // privilege escalation + impersonation
TaskVault       // encrypted in-memory storage
TaskSleep       // jitter-aware sleep
TaskExit        // clean shutdown

État

Livré : Boucle de beacon, file de tâches, 3 canaux C2, 4 méthodes d'injection, 10+ vérifications d'évasion, énumération/fermeture de handles, manipulation de tokens, opérations VAD, E/S fichiers, persistance registre, empreinte SSN, chiffrement mémoire, patchs AMSI/ETW, crypto AES-GCM, gestion de session, REPL interactif. 3 tests crypto réussis. go build propre sur Windows.

Pas encore : Agent autonome Linux (les builds existent, pas de logique d'agent), rotation des clés de session, loader étagé, canaux NTP/DoH, planification de persistance.

Remerciements

  • carved4/go-native-syscall
  • Enelg52/OffensiveGo
  • am0nsec/HellsGate
  • f1zm0/acheron
  • Sliver C2

Licence

MIT — LICENSE

Télécharger l’outil
MéthodeFonctionnementPourquoi c'est furtif
Section mappingNtCreateSection → NtMapViewOfSection (distant) → NtCreateThreadExAucune allocation RWX dans le VAD. La section est adossée à un fichier. Les scanners mémoire voient PAGE_EXECUTE_READ, pas PAGE_EXECUTE_READWRITE.
Process hollowNtCreateUserProcess (suspendu) → NtSuspendProcess → zéro image base → alloc + écriture shellcode → NtSetContextThread (RIP = shellcode) → NtResumeProcessLe processus apparaît comme un svchost.exe légitime dans le gestionnaire de tâches. Seul le contenu mémoire diffère.
APC queuingÉnumère les threads via NtQuerySystemInformation → NtOpenThread → NtQueueApcThreadAucun nouveau thread créé. Aucun nouveau TEB. Aucune nouvelle allocation de pile. Se déclenche quand le thread entre en attente alertable.
Module stompingAlloc dans la cible → écrit un en-tête PE minimal + shellcode → NtCreateThreadEx au point d'entréeLa liste des modules affiche un nom de DLL plausible. L'en-tête PE est suffisamment valide pour tromper l'énumération des modules.
VérificationMéthode
Détection VMScan de signature hyperviseur CPUID leaf 0x40000000 (VMware, VirtualBox, Hyper-V, KVM, Xen, QEMU, Parallels) + fallback leaf 0x40000001
Détection sandboxNombre de CPU, artefacts de registre (VMware Tools, VBox Guest Additions, services VMware/VBox), scan de processus sandbox (30+ noms connus : wireshark, procmon, x64dbg, ida, etc.)
Détection debuggerPEB.BeingDebugged, PEB.NtGlobalFlag, flags de debug du heap, ProcessDebugPort, ProcessDebugObjectHandle, ProcessDebugFlags, breakpoints matériels DR0-7, vérification de timing single-step
Anomalie de timingBasé sur RDTSC : 50 échantillons de latence NtQuerySystemInformation, moyenne/écart-type, alerte si >10% des échantillons dépassent une variance de 3σ. Détecte la surcharge d'instrumentation.
Évasion PEBPatche BeingDebugged, NtGlobalFlag, flags ProcessHeap, DebugPort, ThreadHideFromDebugger — tout via lectures du segment GS + NtWriteVirtualMemory. Aucun appel API.
CanalFormat de transmissionPrérequis
HTTPSPOST binaire, framing personnalisé, UA/chemin randomisésCertificat TLS
DNSsous-domaine <idx>-<total>-<base32>, réponse TXTRésolution DNS
ICMPv4payload dans l'ID+seq de la requête/réponse echosocket brut (root/Admin)
TâcheOctetPayload
shell0x01commande UTF-8
inject0x02PID (4 octets LE) + shellcode
patch0x030x01=AMSI, 0x02=ETW, 0x03=les deux
sleep0x04secondes (4 octets LE)
evasion0x100x01=complet, 0x02=VM, 0x03=sandbox, 0x04=debug, 0x05=timing, 0x06=rapport
handles0x110x01=compte, 0x02=énum EDR, 0x03=fermer EDR, 0x04=surveillé ?
vault0x12opérations de stockage chiffré
fingerprint0x13dump de l'empreinte de build SSN
token0x140x01=activer tout, 0x02=intégrité, 0x03=priv debug, 0x04=usurper
exit0xFF—
  • Extraction du SSN de 2 octets → stockage dans le cache map[uint32]uint16