
وحدة تسجيل ضغطات المفاتيح لنظام ويندوز مخصصة لإطار عمل Sliver C2 للبرمجيات المزروعة (Implant)، تستخدم الإدخال الخام (Raw Input) لالتقاط ضغطات المفاتيح وتوفّر أوامر البدء والإيقاف والاسترجاع للمشغّلين.
تمت كتابة هذا الامتداد لـ sliver في الغالب كتمرين تعليمي
لفهم كيفية تعامل sliver مع الامتدادات.
أود أن أشكر فريق Sliver بأكمله على عملهم في إطار عمل الـ implant مفتوح المصدر هذا. كما أود أن أشكر بشكل خاص @rkervell على إجابته على الكثير من أسئلتي المتعلقة بكيفية تعامل sliver مع امتداداته
بشكل أساسي، يستخدم raw input. ولذلك مزايا وعيوب مقارنةً بطرق تسجيل المفاتيح الشائعة الأخرى.
أنا أحبه لأنه لا يتطلب الحقن في ملفات ثنائية أخرى، كما أنه لا يتطلب استطلاع استدعاء معين بشكل متكرر واحتمال فقدان النتائج.
هذا الكود هو جزء من عملي الخاص وجزء من خليط من أمثلة وجدتها في أنحاء الإنترنت
افتح ملف الحل باستخدام Visual Studio 2019، وقم ببناء إصدارَي x86 وx64
إلى أن يتم تضمين هذا بشكل محتمل في armory، يمكن بناؤه على نظام ويندوز. بعد ذلك، يمكن وضع مجلد $(solutiondir)\bin الناتج على عميل sliver
وتشغيل extensions install <path to folder> لتثبيت الامتداد. قد تحتاج إلى إعادة التشغيل أو أيضًا تشغيل extensions load <path to folder>
raw_keylogger <cmdid>
معرّفات cmdid التالية صالحة:
0 = stop
1 = start
2 = get keystrokes
إذا سارت الأمور على ما يرام، فسيبدو بهذا الشكل:

تتكون واجهة برمجة تطبيقات Sliver من الجزأين الرئيسيين التاليين:
typedef int (*goCallback)(const char*, int);
extern "C" {
__declspec(dllexport) int __cdecl entrypoint(char* argsBuffer, uint32_t bufferSize, goCallback callback);
}
سيستدعي الـ implant نقطة الدخول "entrypoint" كما هي معرّفة في ملف .json. إنها تشير إلى دالة نقطة الدخول الخاصة بك (لا يلزم أن تحمل هذا الاسم، فقط اتبع التوقيع)
goCallback هي دالة لإرجاع المخرجات إلى Go. يتم استدعاؤها مثل callback(string, string_length)
عند برمجة الامتداد، في الوقت الحالي يجب أن يتطابق "name" و"command_name"، وإلا سيقوم الـ implant بإعادة تحميل امتدادك في كل استدعاء.
حتى وقت كتابة هذا، لا تدعم الامتدادات غير BOF الوسائط المكتوبة بصرامة (strongly typed)، لذلك سيتم إرسال كل ما يُمرَّر على سطر الأوامر بعد اسم الأمر كسلسلة نصية. سيتعين عليك التعامل مع ذلك من الجانب الأصلي (native) للامتداد.