
أداة اكتشاف وتحليل واجهات RPC في ويندوز مع تعداد مرئي للنقاط النهائية، وتحليل PE، وحل الرموز، واعتراض حزم ETW في الوقت الفعلي، وتوليد رمز العميل أثناء التشغيل لتدقيق الأمان.
يرجى قراءة إعلان منشور المدونة.
محقق RPC (RPCI) هو تطبيق واجهة مستخدم .NET/C# Windows Forms يوفر واجهة اكتشاف وتحليل متقدمة لنقاط نهاية RPC في Windows. يوفر الأداة واجهة بصرية حول قدرات RPC الأساسية الحالية لمنصة NtApiDotNet، بما في ذلك:
بالإضافة إلى هذه الميزات الأساسية، يوفر RPCI قدرات إضافية:
هناك العديد من سير العمل التي يدعمها محقق RPC:
في هذا المثال، سنقوم بتفقد خدمة RPC لجدولة المهام في Windows، والتي تُستخدم لإدارة وتنفيذ المهام المجدولة. سنجد الخدمة، وننشئ كود العميل، ثم نخصص العميل للتفاعل مع أحد الإجراءات المعروضة.
أولاً، قم بتحميل قائمة خدمات Windows بالنقر على File -> Load From Service. يفتح هذا نافذة قائمة خدمات جديدة:

ابحث عن خدمة Schedule، وهي خدمة جدولة المهام في Windows، حدد الخدمة وانقر على Go.

سيُطلب منك قبل تحميل RPCI لجميع ملفات DLL المرتبطة بـ RPC. انقر على Yes للمتابعة. بمجرد التحميل، سترى قائمة بجميع خوادم RPC المكتشفة عبر جميع الوحدات المحملة في عملية الخدمة. يحتوي خادم RPC لجدولة المهام في Windows على معرف واجهة 86D35949-83C9-4044-B424-DB363231FD0C. ابحث عن الصف في القائمة الذي يحتوي على معرف الواجهة هذا، والذي يجب أن يكون له خدمة قيد التشغيل باسم Task Scheduler، انقر بزر الماوس الأيمن على الصف وحدد New Client.

يظهر الجزء الأيسر من نافذة العميل بيانات خادم RPC الوصفية ومخرجات سطر الأوامر من كود العميل. يظهر الجانب الأيمن علامتي تبويب:
في هذا المثال، سنقوم باستدعاء الإجراء SchRpcHighestVersion. يقبل هذا الأسلوب معاملاً واحداً، out int version، والذي، بعد استدعاء الإجراء، سيحتوي على أعلى إصدار بروتوكول لجدولة المهام يدعمه واجهة RPC. الـ 16 بت العليا هي الإصدار الرئيسي والـ 16 بت السفلى هي الإصدار الثانوي.
لاستدعاء هذا الإجراء:
في نافذة Client Code، ابحث عن الأسلوب Run، وهو نقطة الدخول الرئيسية لعميل RPC.
قم بتحرير نص الأسلوب Run لاستدعاء الإجراء:
public async Task<bool> Run()
{
int version;
int status = SchRpcHighestVersion(out version);
if (status == 0) {
long major = (version & 0xffff0000) >> 16;
long minor = version & 0x0000ffff;
Console.WriteLine("highest supported RPC version: {0}.{1}", major, minor);
} else {
Console.WriteLine("call to SchRpcHighestVersion failed with error: {0:X}", status);
}
return true;
}
بعد إضافة هذا الكود، قم بتشغيل العميل بالنقر على زر Run. سيؤدي هذا إلى ترجمة كود C# ثم تنفيذ الأسلوب Run.
إذا نجحت الترجمة، سترى شيئاً مشابهاً لما يلي في مربع Output:
> Run() output:
highest supported RPC version: 1.6

لدى محقق RPC عدة إعدادات تكوين.
| الإعداد | الوصف | الافتراضي |
|---|---|---|
| dbghelp.dll | موقع ملف وحدة dbghelp.dll | ابحث عن أحدث إصدار ضمن Windows Kits المثبتة. |
| Symbol Path | المسار إلى رموز Windows، والذي يمكن أن يكون خادم رموز أو دليلاً محلياً | خادم Windows العام الافتراضي: srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Trace Level | مستوى تتبع التسجيل | info |
يمكن تعديل إعدادات التكوين داخل التطبيق من خلال قائمة Edit -> Settings.
بعد إصداره الأولي، تم تحويل محقق RPC من تطبيق .NET Framework إلى تطبيق .NET 7. إذا واجهت مشاكل في البناء، تأكد من أن Visual Studio محدث. يُنصح بمسح جميع مجلدات مخرجات البناء قبل البناء من إصدار .NET Framework.
أيضاً، بسبب الانتقال من فئة BinaryFormatter غير الآمنة إلى protobuf-net، فإن مكتبات RPC المُنشأة مع إصدار .NET Framework غير متوافقة مع إصدار .NET.
إذا كنت تعاني من تعطل عشوائي في محقق RPC، فقد تجد حلاً في طلب من مسؤول النظام تعديل إعدادات EDR الخاص بك. لقد وجدنا أن بعض EDRs لا تتصرف بشكل معقول مع اللغات المترجمة في الوقت الفعلي (JIT).
في بعض الحالات، يتم اكتشاف محقق RPC كبرنامج ضار بواسطة EDRs، بما في ذلك بعض النتائج الإيجابية الخاطئة على Virus Total. هذه مشكلة معروفة. وذلك لأن محقق RPC يحتوي على NtObjectManager - وهي حزمة أنشأها James Forshaw ومن المعروف أنه يتم اكتشافها (إيجابي خاطئ) بواسطة العديد من EDRs، بما في ذلك Windows Defender.
نظرًا لأن RPC في Windows كان موضوعًا بحثيًا شائعًا لأكثر من عقد، فهناك العديد من الموارد والجهود البحثية ذات الصلة التي لا يمكن ذكرها هنا. لقد أدرجنا القليل أدناه التي صادفناها أثناء بناء هذه الأداة: