
تطبيق Delphi أصلي لوظيفة PE-sieve مع مكتبة قابلة لإعادة الاستخدام، وواجهة سطر أوامر (CLI)، وDLL متوافقة مع PE-sieve لتكامل HollowsHunter.
NativeMirror هو تطبيق مستقل بلغة Object Pascal لوظائف PE-sieve، مقتبس من PE-sieve by hasherezade. يقوم بفحص ذاكرة العمليات، ويكتشف الشيفرة المعدّلة أو المحقونة، ويستخرج ملفات PE.
يستخدم التطبيق واجهات برمجة Delphi الأصلية وNativePe كمحرك PE خاص به. يمكن استخدامه مباشرةً كمكتبة Delphi، أو عبر واجهة سطر الأوامر CLI، أو عبر واجهة DLL المتوافقة مع PE-sieve. تشترك الثلاثة جميعاً في نفس نواة الفحص. هدف التوافق هو السلوك القابل للملاحظة خارجياً لـ PE-sieve 0.4.1.5؛ ولم يتم إثبات التكافؤ السلوكي الكامل.
../NativePe، أو عدّل مسارات البحث في Delphi.NativeMirrorScan.NativeAsm.dproj الخيار USE_NATIVEASM. وبدونه، يستخدم NativeMirror البديل Delphi/LDE. عدّل مسار البحث الخاص بـ NativeASM ليتوافق مع تثبيتك.py: مطلوب لخطوة ما بعد البناء الخاصة بـ DLL واختبارات Python. تستخدم السكربتات مكتبة Python القياسية.تحتوي بعض إعدادات المشروع على مسارات تبعيات محلية. تحقق من مسارات البحث قبل البناء على جهاز آخر.
افتح NativeMirror.groupproj في Delphi واختر المشروع والمنصة والإعداد المطلوب.
| المشروع | المخرجات |
|---|---|
tools/NativeMirrorScan/NativeMirrorScan.dproj | NativeMirrorScan.exe |
tools/NativeMirrorDll/pe-sieve.dproj | pe-sieve.dll |
tests/ScannerIntegration/NativeMirrorTestTarget.dproj | هدف اختبار Win64 |
tests/ScannerIntegration/NativeMirrorTestTarget32.dproj | هدف اختبار Win32 |
tests/ScannerIntegration/NativeMirrorScannerTests.dproj | مشغّل اختبارات الماسح Win64 |
tests/HollowsHunterIntegration/NativeMirrorHollowsHunterTests.dproj | مشغّل اختبارات HollowsHunter Win64 |
ابنِ CLI وDLL لـ Win32 وWin64 حسب الحاجة. ابنِ هدفي الاختبار قبل تشغيل اختبارات التكامل. ابنِ مشغّلات الاختبارات لـ Win64.
تذهب المخرجات إلى bin/<Platform>/<Config>. تستخدم الأمثلة أدناه إعداد Debug. تذهب وحدات المترجم إلى dcu/. أبقِ الملفات التنفيذية خارج tools/.
نفّذ هذه الأوامر من جذر المشروع. استبدل 1234 بمعرّف العملية المراد فحصها.
.\bin\Win64\Debug\NativeMirrorScan.exe /help
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234 /json /quiet /ofilter 2
.\bin\Win64\Debug\NativeMirrorScan.exe /pid 1234 /dir output
/ofilter 2 يعطّل إخراج التفريغ. يحدد /dir output دليل الإخراج للتقارير والتفريغات. استخدم الملف التنفيذي Win32 ضمن bin/Win32/Debug عند الحاجة. يعتمد الوصول إلى العملية الهدف على أذونات Windows لديك.
أضف src/ ومجلدات الوحدات الفرعية التابعة لها، إلى جانب NativePe، إلى مسار البحث الخاص بمشروعك. استدعِ ScanAndDump مع TNativeMirrorOptions. تُجمَّع المكتبة داخل تطبيقك؛ ولا يتطلب هذا الاستخدام وجود NativeMirrorScan.exe ولا pe-sieve.dll. لا تُستخدم Python إلا لبناء DLL المنفصل واختبارات Python.
يفحص هذا المثال الطرفي PID 1234 ويطبع تقريره بصيغة JSON:
program ScanExample;
{$APPTYPE CONSOLE}
uses
System.JSON,
NativeMirror.Core.Types,
NativeMirror.Core.Options,
NativeMirror.Core.Engine;
var
Options: TNativeMirrorOptions;
Report: TNativeMirrorReportEx;
Json: TJSONObject;
begin
Options := TNativeMirrorOptions.Default;
Options.Pid := 1234;
Options.Quiet := True;
Options.OutputFilter := nmOutNoDir;
Report := ScanAndDump(Options);
try
Json := Report.ToJson(Options.ResultsFilter, Options.JsonLevel);
try
Writeln(Json.ToJSON);
finally
Json.Free;
end;
finally
Report.Free;
end;
end.
استبدل PID بالهدف الخاص بك. يعطّل nmOutNoDir ملفات التقارير وعمليات التفريغ. افحص Report.ErrorReport بحثًا عن أخطاء الفحص وReport.ScanReport بحثًا عن نتائج الفحص. يملك المستدعي التقرير المُعاد ويجب عليه تحريره.
نزّل pe-sieve32.exe وpe-sieve64.exe من إصدارات PE-sieve. تستخدم سكربتات المقارنة الموجودة ملفات v0.4.1.1 التنفيذية. ضع كليهما في bin/Win64/Debug؛ تبحث سكربتات اختبار Win64 عن ماسحها المرجعي هناك. الملف التنفيذي 32 هو مرجع Win32 الأصلي، رغم أنه مخزّن إلى جانب أدوات اختبار Win64.
يبدو إعداد Debug هكذا:
bin/
Win64/Debug/
NativeMirrorScan.exe
pe-sieve.dll
pe-sieve.dll.exports.json
pe-sieve32.exe
pe-sieve64.exe
NativeMirrorTestTarget.exe
NativeMirrorScannerTests.exe
NativeMirrorHollowsHunterTests.exe
hollows_hunter.exe
Win32/Debug/
NativeMirrorScan.exe
pe-sieve.dll
pe-sieve.dll.exports.json
NativeMirrorTestTarget32.exe
ينتج NativeMirror ملف CLI وDLL وسجلات التصدير والأهداف ومشغّلات الاختبار. أما ملفات PE-sieve وHollowsHunter التنفيذية فهي تنزيلات منفصلة. ولا يُحتاج إلى HollowsHunter إلا لاختبار التكامل الخاص به أو للاستخدام اليدوي للـ DLL.
نزّل hollows_hunter64_dll.zip, v0.4.1.1 من إصدارات HollowsHunter. استخدم حزمة الـ DLL. مع تطابق معمارية المضيف وعقد الـ API، يحل ملف pe-sieve.dll النهائي الذي يبنيه NativeMirror محل ملف PE-sieve DLL الأصلي الذي يستخدمه HollowsHunter. ولا يمكن للملف التنفيذي الثابت المستقل استخدام DLL بديل. ويغطي اختبار التكامل المرفق مضيف Win64 DLL الخاص بالإصدار v0.4.1.1.
للتشغيل اليدوي، انسخ ملف hollows_hunter.exe الخاص بالحزمة إلى bin/Win64/Debug، بجوار ملف pe-sieve.dll الذي بناه NativeMirror. لا تنسخ ملف DLL الأصلي الخاص بالحزمة فوق ملف NativeMirror DLL. ويجب أن يكون كلٌّ من المضيف والـ DLL من نوع Win64.
.\bin\Win64\Debug\hollows_hunter.exe /pid 1234 /quiet /hooks /ofilter 2 /json /report 7
للمقارنة الآلية، استخرج ملف EXE وDLL الأصليين غير المعدّلين من الحزمة نفسها إلى:
tests/HollowsHunterIntegration/fixtures/Win64/pe-sieve-C/
hollows_hunter.exe
pe-sieve.dll
manifest.json
احتفظ بملف manifest.json الموجود. فهو يسجّل الإصدارات المتوقعة وقيم تجزئة SHA-256. يتحقق المشغّل من هذه الملفات، وينسخ المضيف نفسه إلى مجلدَي مرجع منفصلين وNativeMirror، ويختبر كل DLL مقابل عمليات اختبار خاضعة للتحكم. وهو لا ينزّل الملفات ولا يستبدل البناء في bin.
يُصدّر PE-sieve القيمة PESieve_version كقيمة بيانات 32-بت. وبالنسبة للإصدار 0.4.1.5، فإن تلك القيمة هي 0x00040105. ويتوقع المستدعي أن يشير عنوان التصدير إلى تلك البايتات الأربع، بدلًا من أن يشير إلى دالة تُرجع الرقم.
لا تُصدّر مترجم/رابط Delphi 12 المستخدم في هذا المشروع المتغير مباشرةً عبر جملة exports. لذلك تحتوي DLL على قيمة الإصدار المعلَّمة، وتُصدّر في البداية دالة مساعدة تحت الاسم المطلوب.
بعد الربط، يشغّل حدث ما بعد البناء الخاص بالمشروع:
py tools/NativeMirrorDll/finalize_exports.py bin/Win64/Debug/pe-sieve.dll
يقوم السكربت بتوجيه إدخال التصدير PESieve_version إلى الرقم المخزَّن ويحدّث مجموع التحقق PE checksum. ويترك شيفرة الماسح وأهداف التصدير الأخرى دون تغيير. تُنفَّذ هذه الخطوة تلقائيًا عند بناء pe-sieve.dproj؛ وأي فشل في السكربت يؤدي إلى فشل البناء.
كما ينشئ السكربت pe-sieve.dll.before-version-export كنسخة احتياطية وpe-sieve.dll.exports.json يحتوي على معلومات التصدير النهائية وتجزئة DLL. احتفظ بملف JSON لمشغّلات الاختبار. لا يحتاج عميل DLL العادي إلا إلى ملف DLL النهائي. يُشترط وجود Python على جهاز البناء/الاختبار، وليس عند استخدام ملف DLL النهائي.
نفّذ الأوامر من جذر المشروع بعد بناء المشاريع المطلوبة وتثبيت الملفات المرجعية أعلاه.
.\bin\Win64\Debug\NativeMirrorScannerTests.exe
.\bin\Win64\Debug\NativeMirrorHollowsHunterTests.exe
py tests/CLIOutput/test_source_contract.py
py tests/CLIOutput/test_cli_arguments.py
py tests/ParityAudit/run_module_cases.py