Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Nim_DInvoke — D/Invoke implementation in Nim | Kitploit
Tools/GitHubGitHub/s3cur3th1ssh1t/nim_dinvoke
Post-ExploitationRed TeamingPayload DevelopmentAdversarial Attack
GitHubs3cur3th1ssh1t/nim_dinvoke

Nim_DInvoke

D/Invoke implementation in Nim

Repository anzeigen
1016vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Nim DInvoke

D/Invoke-Implementierung in Nim

Alle Nim-Binaries legen typischerweise dieselben 58–60 Windows-API-Funktionen offen:

alt text

Alle anderen Windows-API-Funktionen werden zur Laufzeit typischerweise über GetProcAddress und LoadLibraryA aufgelöst, wie in OffensiveNim oder diesem Blogbeitrag erwähnt.

Daher ist es nicht möglich, API-Importe (vollständig) über DInvoke in Nim zu verstecken, es sei denn, jemand nutzt beispielsweise diese DInvoke-Implementierung, um den Nim-Compiler für die DInvoke-Nutzung anstelle von Dynlib zu modifizieren.

Das manuelle Parsen der Funktionen aus dem PEB anstelle von GetProcAddress und LoadLibraryA ist immer noch unauffälliger als das Standardverhalten von Nim. Um Inline-Hooking zu vermeiden, wäre beispielsweise das manuelle Mapping einer frischen DLL-Kopie erforderlich, wie in TheWovers DInvoke-Blogbeitrag erwähnt:

alt text

Dies ist hier allerdings yet nicht implementiert. Ich verwende derzeit nur LdrLoadDll, um neue DLLs in den Speicher zu laden.

Dieses Projekt wurde stark vom NanoDump-D/Invoke-Code inspiriert.

Die Funktion kann dann wie folgt verwendet werden:

root@kitploit:~
const
  KERNEL32_DLL* = "kernel32.dll"
const
  OpenProcess_FuncName * = "OpenProcess"
type
  OpenProcess_t* = proc (dwDesiredAccess: DWORD, bInheritHandle: WINBOOL, dwProcessId: DWORD): HANDLE {.stdcall.}

MyOpenProcess = cast[OpenProcess_t](cast[LPVOID](get_function_address(cast[HMODULE](get_library_address(KERNEL32_DLL, FALSE)), OpenProcess_FuncName, 0)))

echo "[*] Calling OpenProcess via D/Invoke"
let pHandle = MyOpenProcess(
    PROCESS_ALL_ACCESS, 
    false, 
    cast[DWORD](https://github.com/s3cur3th1ssh1t/nim_dinvoke/blob/HEAD/processID)
)

In meinen Tests bin ich bei einigen API-Funktionen auf seltsames Verhalten gestoßen, die Sonderfälle benötigen, um die korrekte relative Adresse zu finden. Meine Verwirrung findet sich in den Kommentaren. Vielleicht ist das auch nur mein schlechter Codierstil – wer weiß.

Bei erfolgreicher Ausführung sieht das Beispiel wie folgt aus:

alt text

Tool herunterladen