
محمّل انعكاسي بلغة C# للملفات الثنائية غير المُدارة.
محمّل انعكاسي (Reflective Loader) بلغة 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>
عدّل رموز الترجمة (Compilation Symbols) لضبط تدفق البرنامج بسرعة: (انقر بزر الماوس الأيمن على المشروع في Visual Studio -> Properties -> Build -> Conditional Compilation Symbols)
يجب أن تكون الملفات التنفيذية التي يتم تشغيلها عبر RunPE مرتبطة ارتباطًا ثابتًا (statically linked) لكي يعمل إعادة توجيه StdOut وStdErr بشكل صحيح. لتغيير هذا الإعداد في Visual Studio:
Configuration Properties -> C/C++ -> Code GenerationRuntime Library إلى إما Multi-threaded (/MT)
أو Multi-threaded Debug (/MTd)الملفات التنفيذية التي لا تستخدم واجهة برمجة تطبيقات Windows CommandLineToArgvW لتحليل الوسائط لن يتم تمريرها بشكل صحيح عبر RunPE. عند تشغيل ملفات PE التي يمتلك المشغّل (operator) السيطرة على تجميعها، يُقترح إضافة دعم لتحليل الوسائط باستخدام هذه الواجهة.
على سبيل المثال، سيعمل الكود التالي عند تشغيل البرنامج بشكل مستقل، لكنه سيفشل عند تمريره إلى 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;
}