
Eine Nim-Implementierung von reflektivem PE-Loading aus dem Speicher
Eine Nim-Implementierung des reflektiven PE-Ladens aus dem Speicher. Die Basis für diesen Code wurde von RunPE-In-Memory übernommen – den ich nach Nim portiert habe.
Sie müssen die folgenden Abhängigkeiten installieren:
nimble install ptr_math winim
Ich habe dies nur mit Nim Version 1.6.2 getestet, also verwenden Sie diese Version zum Testen, da ich keine Fehlerfreiheit bei Verwendung einer anderen Version garantieren kann.
Wenn Sie Argumente zur Laufzeit übergeben möchten oder gar keine Argumente übergeben möchten, kompilieren Sie mit:
nim c NimRunPE.nim
Wenn Sie benutzerdefinierte Argumente fest codieren möchten, ändern Sie const exeArgs nach Ihren Bedürfnissen und kompilieren Sie mit:
nim c -d:args NimRunPE.nim – dies wurde von @glynx beigesteuert, danke! 😎
Wenn Sie volle Thread Local Storage (TLS)-Callback-Unterstützung wünschen, was die Ausführung von Rust-PEs ermöglicht usw., kompilieren Sie mit:
nim c -d:full_tls NimRunPE.nim
Dank an BlackBone & landers Blog/solstice-loader für die Implementierung der full_tls-Option.
Die Technik selbst ist ziemlich alt, aber ich habe noch keine Nim-Implementierung gefunden. Das hat sich jetzt geändert. :)
Wenn Sie planen, z.B. Mimikatz mit dieser Technik zu laden – stellen Sie sicher, dass Sie eine Version selbst aus dem Quellcode kompilieren, da die Release-Binärdateien keine Argumente akzeptieren, nachdem sie reflektiv von diesem Loader geladen wurden. Warum? Ich weiß es wirklich nicht, es ist seltsam, aber eine Tatsache. Wenn Sie selbst kompilieren, funktioniert es trotzdem:
Mein privater Packer ist ebenfalls mit dieser Technik bewaffnet – aber dort sind alle Win32-Funktionen durch Syscalls ersetzt. Das macht die Technik unauffälliger.