
अप्रबंधित बाइनरीज़ के लिए C# रिफ्लेक्टिव लोडर।
अप्रबंधित बाइनरीज़ के लिए C# रिफ्लेक्टिव लोडर।
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>
प्रोग्राम प्रवाह को शीघ्रता से समायोजित करने के लिए संकलन प्रतीकों को संपादित करें: (Visual Studio में प्रोजेक्ट पर राइट क्लिक करें -> Properties -> Build -> Conditional Compilation Symbols)
RunPE द्वारा लॉन्च किए गए एक्ज़ीक्यूटेबल को स्टैटिक रूप से लिंक किया जाना चाहिए ताकि StdOut और StdErr रीडायरेक्शन सही ढंग से कार्य कर सके। Visual Studio में यह सेटिंग बदलने के लिए:
Configuration Properties -> C/C++ -> Code Generation पर जाएँRuntime Library का मान Multi-threaded (/MT) या
Multi-threaded Debug (/MTd) में बदलेंजो एक्ज़ीक्यूटेबल तर्कों को पार्स करने के लिए Window's API CommandLineToArgvW का उपयोग नहीं करते हैं, उन्हें RunPE के माध्यम से उचित रूप से पारित नहीं किया जाएगा। जब ऐसे PE चलाए जा रहे हों जिनके संकलन पर ऑपरेटर का नियंत्रण है, तो इस API का उपयोग करके तर्क पार्सिंग हेतु समर्थन जोड़ने का सुझाव दिया जाता है।
उदाहरण के लिए, निम्नलिखित कोड तब कार्य करेगा जब प्रोग्राम स्वतंत्र रूप से चलाया जाता है, लेकिन RunPE में पारित करने पर विफल हो जाएगा, क्योंकि "foo" को argv[2] में स्थानांतरित कर दिया गया है:
if (argv[1] == "foo") {
bar();
}
argv को 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;
}