
Loader riflessivo in C# per binari non gestiti.
Caricatore riflessivo in C# per binari non gestiti.
Usage: RunPE.exe <file-to-run> <args-to-file-to-run>
e.g. RunPE.exe C:\Windows\System32\net.exe localgroup administrators
Alternative usage: RunPE.exe ---f <file-to-pretend-to-be> ---b <base64 blob of file bytes> ---a <base64 blob of args>
e.g: RunPE.exe ---f C:\Windows\System32\svchost.exe ---b <net.exe, base64 encoded> ---a <localgroup administrators, base64 encoded>
Modificare i simboli di compilazione per regolare rapidamente il flusso del programma: (Fare clic con il tasto destro sul progetto in Visual Studio -> Proprietà -> Compilazione -> Simboli di compilazione condizionale)
Gli eseguibili avviati da RunPE devono essere collegati staticamente affinché il reindirizzamento di StdOut e StdErr funzioni correttamente. Per modificare questa impostazione in Visual Studio:
Configuration Properties -> C/C++ -> Code GenerationRuntime Library in Multi-threaded (/MT)
oppure Multi-threaded Debug (/MTd)Gli eseguibili che non utilizzano l'API di Windows CommandLineToArgvW per l'analisi degli argomenti non riceveranno gli argomenti in modo corretto tramite RunPE. Quando si eseguono PE di cui l'operatore ha il controllo della compilazione, si consiglia di aggiungere il supporto per l'analisi degli argomenti tramite questa API.
Ad esempio, il codice seguente funzionerà quando il programma viene eseguito in modo indipendente, ma fallirà quando viene passato a RunPE poiché "foo" è stato spostato su argv[2]:
if (argv[1] == "foo") {
bar();
}
Esempio di refactoring di argv in CommandLineArgvW:
#include <stdio.h>
#include <Windows.h>
int main(int argc, char* argv[]) {
int nArgs;
LPWSTR *szArglist;
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
for (int i = 0; i < nArgs; i++) {
printf("argv[%d]: %ws\n", i, szArglist[i]);
}
return 0;
}