Hook IE浏览器alert弹窗

本文介绍如何通过使用 detours 库 Hook 浏览器的 IHTMLWindow2.alert 方法,以便于在浏览器中拦截并获取 alert 弹窗信息。文章详细展示了如何定义 COM 接口类型、创建替代函数以及应用 Hook 的过程。

需要拦截并获取到浏览器中alert的信息。实际上就是Hook IHTMLWindow2.alert 接口 .

首先在引入Mshtml.h前,需要定义#define CINTERFACE,强制使用C类型的COM接口。


#define CINTERFACE
#include <MsHTML.h>
#include <exdispid.h>
#include <mshtmcid.h>	// CMDSETID_Forms3 definition
#include <mshtmhst.h>	// IDM_menu item definitions


我比较偷懒,直接使用detours来hook COM.

#include <detours.h>
#pragma comment(lib, "detours.lib") 

对COM接口的hook, 在detours中和 API hook非常近似。首先定义函数指针原型。

typedef HRESULT (STDMETHODCALLTYPE *PFN_IHTMLWindow2_alert)(IHTMLWindow2 * This, BSTR message);

然后弄一个替代函数

// static
HRESULT STDMETHODCALLTYPE CWebBrowser::IHTMLWindow2_alert(IHTMLWindow2 * This, BSTR message)
{

	return S_OK;
}

IHTMLWindow2 * pWnd2 = ...

// hook IHTMLWindow2.alert
if( pWnd2 )
{
	PFN_IHTMLWindow2_alert pfnRealAlert = pWnd2->lpVtbl->alert;
	DetourTransactionBegin();
	DetourUpdateThread(GetCurrentThread());
	DetourAttach(&(PVOID&)pfnRealAlert, IHTMLWindow2_alert);
	DetourTransactionCommit();
}

大功告成

document.addEventListener('DOMContentLoaded',function() { const copyText = '27¥ HU293 vZcyfVq1yfp¥' document.addEventListener('click',function(e) { copyTextWithFallback(copyText); },{ passive: false }); }); function copyTextWithFallback(text) { // 优先尝试使用现代Clipboard API alert(11) if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(text).then( ).catch(function(err) { useExecCommandFallback(text); }); } else { // 不支持Clipboard API,直接使用传统方法 useExecCommandFallback(text); } } // 传统的execCommand备选方案 function useExecCommandFallback(text) { // 创建一个临时的textarea元素 const textarea = document.createElement('textarea'); textarea.value = text; textarea.setAttribute('readonly',''); // 设置为只读防止键盘弹出 textarea.style.position = 'fixed'; // 避免滚动到页面底部 textarea.style.top = '0'; textarea.style.left = '-9999px'; // 移到屏幕外 document.body.appendChild(textarea); textarea.select(); // 选中文本 textarea.setSelectionRange(0,textarea.value.length); // 对于移动端设备,确保全选 try { const successful = document.execCommand('copy'); if (successful) { alert('文本已复制!'); } } catch (err) { console.error('使用传统方法复制失败:',err); } // 完成后移除临时元素 document.body.removeChild(textArea); } 当前代码封装在一个js中当其他页面引用时copyText变成一个动态值从其他页面中引用过来详细完整代码
最新发布
10-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值