
Cargador reflectivo en C# para binarios no administrados.
Cargador reflectivo de C# para binarios no administrados.
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>
Edite los símbolos de compilación para ajustar rápidamente el flujo del programa: (Clic derecho en el proyecto en Visual Studio -> Propiedades -> Compilar -> Símbolos de compilación condicional)
Los ejecutables lanzados por RunPE deben estar vinculados estáticamente para que la redirección de StdOut y StdErr funcione correctamente. Para cambiar esta configuración en Visual Studio:
Configuration Properties -> C/C++ -> Code GenerationRuntime Library a Multi-threaded (/MT) o Multi-threaded Debug (/MTd)Los ejecutables que no utilizan la API de Windows CommandLineToArgvW para analizar argumentos no se pasarán adecuadamente a través de RunPE. Cuando se ejecutan PE sobre los que el operador tiene control de la compilación, se sugiere agregar soporte para analizar argumentos mediante esta API.
Por ejemplo, el siguiente código funcionará cuando el programa se ejecute de forma independiente, pero fallará cuando se pase a RunPE, ya que "foo" se ha desplazado a argv[2]:
if (argv[1] == "foo") {
bar();
}
Ejemplo de refactorización de argv a 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;
}