经过上面进程的学习,已经达到截取网络访问的条件了,需要声明如下:

#include <WinInet.h> #pragma comment( lib, "WinInet.lib") // IE typedef BOOL (WINAPI* PFN_HttpSendRequestA)(HINTERNET hRequest, LPCSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength ); typedef BOOL (WINAPI* PFN_HttpSendRequestW)(HINTERNET hRequest, LPCWSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength ); typedef BOOL (WINAPI* PFN_HttpSendRequestExA)( __in HINTERNET hRequest, __in_opt LPINTERNET_BUFFERSA lpBuffersIn, __out_opt LPINTERNET_BUFFERSA lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); typedef BOOL (WINAPI* PFN_HttpSendRequestExW)( __in HINTERNET hRequest, __in_opt LPINTERNET_BUFFERSW lpBuffersIn, __out_opt LPINTERNET_BUFFERSW lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); typedef BOOL (WINAPI* PFN_HttpEndRequestA)( __in HINTERNET hRequest, __out_opt LPINTERNET_BUFFERSA lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); typedef BOOL (WINAPI* PFN_HttpEndRequestW)( __in HINTERNET hRequest, __out_opt LPINTERNET_BUFFERSW lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); typedef HINTERNET (WINAPI* PFN_HttpOpenRequestA)(__in HINTERNET hConnect,__in_opt LPCSTR lpszVerb, __in_opt LPCSTR lpszObjectName, __in_opt LPCSTR lpszVersion, __in_opt LPCSTR lpszReferrer, __in_z_opt LPCSTR FAR * lplpszAcceptTypes, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); typedef HINTERNET (WINAPI* PFN_HttpOpenRequestW)(__in HINTERNET hConnect,__in_opt LPCWSTR lpszVerb,__in_opt LPCWSTR lpszObjectName,__in_opt LPCWSTR lpszVersion,__in_opt LPCWSTR lpszReferrer,__in_z_opt LPCWSTR FAR * lplpszAcceptTypes,__in DWORD dwFlags, __in_opt DWORD_PTR dwContext); typedef HINTERNET (WINAPI* PFN_InternetConnectA)(__in HINTERNET hInternet,__in LPCSTR lpszServerName,__in INTERNET_PORT nServerPort,__in_opt LPCSTR lpszUserName,__in_opt LPCSTR lpszPassword,__in DWORD dwService,__in DWORD dwFlags,__in_opt DWORD_PTR dwContext); typedef HINTERNET (WINAPI* PFN_InternetConnectW)(__in HINTERNET hInternet,__in LPCWSTR lpszServerName,__in INTERNET_PORT nServerPort,__in_opt LPCWSTR lpszUserName,__in_opt LPCWSTR lpszPassword,__in DWORD dwService,__in DWORD dwFlags,__in_opt DWORD_PTR dwContext); typedef BOOL (WINAPI* PFN_HttpAddRequestHeadersA)(__in HINTERNET hRequest,__in_ecount(dwHeadersLength) LPCSTR lpszHeaders,__in DWORD dwHeadersLength,__in DWORD dwModifiers); typedef BOOL (WINAPI* PFN_HttpAddRequestHeadersW)(__in HINTERNET hRequest,__in_ecount(dwHeadersLength) LPCWSTR lpszHeaders,__in DWORD dwHeadersLength,__in DWORD dwModifiers); // 替换的函数 static BOOL WINAPI _HttpSendRequestA(HINTERNET hRequest, LPCSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength ); static BOOL WINAPI _HttpSendRequestW(HINTERNET hRequest, LPCWSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength ); static BOOL WINAPI _HttpSendRequestExA( __in HINTERNET hRequest, __in_opt LPINTERNET_BUFFERSA lpBuffersIn, __out_opt LPINTERNET_BUFFERSA lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); static BOOL WINAPI _HttpSendRequestExW( __in HINTERNET hRequest, __in_opt LPINTERNET_BUFFERSW lpBuffersIn, __out_opt LPINTERNET_BUFFERSW lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); static BOOL WINAPI _HttpEndRequestA( __in HINTERNET hRequest, __out_opt LPINTERNET_BUFFERSA lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); static BOOL WINAPI _HttpEndRequestW( __in HINTERNET hRequest, __out_opt LPINTERNET_BUFFERSW lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); static HINTERNET WINAPI _HttpOpenRequestA(__in HINTERNET hConnect,__in_opt LPCSTR lpszVerb, __in_opt LPCSTR lpszObjectName, __in_opt LPCSTR lpszVersion, __in_opt LPCSTR lpszReferrer, __in_z_opt LPCSTR FAR * lplpszAcceptTypes, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext); static HINTERNET WINAPI _HttpOpenRequestW(__in HINTERNET hConnect,__in_opt LPCWSTR lpszVerb,__in_opt LPCWSTR lpszObjectName,__in_opt LPCWSTR lpszVersion,__in_opt LPCWSTR lpszReferrer,__in_z_opt LPCWSTR FAR * lplpszAcceptTypes,__in DWORD dwFlags, __in_opt DWORD_PTR dwContext); static HINTERNET WINAPI _InternetConnectA(__in HINTERNET hInternet,__in LPCSTR lpszServerName,__in INTERNET_PORT nServerPort,__in_opt LPCSTR lpszUserName,__in_opt LPCSTR lpszPassword,__in DWORD dwService,__in DWORD dwFlags,__in_opt DWORD_PTR dwContext); static HINTERNET WINAPI _InternetConnectW(__in HINTERNET hInternet,__in LPCWSTR lpszServerName,__in INTERNET_PORT nServerPort,__in_opt LPCWSTR lpszUserName,__in_opt LPCWSTR lpszPassword,__in DWORD dwService,__in DWORD dwFlags,__in_opt DWORD_PTR dwContext); static BOOL WINAPI _HttpAddRequestHeadersA(__in HINTERNET hRequest,__in_ecount(dwHeadersLength) LPCSTR lpszHeaders,__in DWORD dwHeadersLength,__in DWORD dwModifiers); static BOOL WINAPI _HttpAddRequestHeadersW(__in HINTERNET hRequest,__in_ecount(dwHeadersLength) LPCWSTR lpszHeaders,__in DWORD dwHeadersLength,__in DWORD dwModifiers); // 保存源地址 #define MAKE_HOOKSTRUCT(X) {#X, (PROC)_##X, (PROC)##X} MyHook::HOOKAPI IE_HOOKS[] = { MAKE_HOOKSTRUCT(HttpSendRequestA), MAKE_HOOKSTRUCT(HttpSendRequestW), MAKE_HOOKSTRUCT(HttpAddRequestHeadersA), MAKE_HOOKSTRUCT(HttpAddRequestHeadersW), MAKE_HOOKSTRUCT(HttpSendRequestExA), MAKE_HOOKSTRUCT(HttpSendRequestExW), MAKE_HOOKSTRUCT(HttpEndRequestA), MAKE_HOOKSTRUCT(HttpEndRequestW), MAKE_HOOKSTRUCT(HttpOpenRequestA), MAKE_HOOKSTRUCT(HttpOpenRequestW), MAKE_HOOKSTRUCT(InternetConnectA), MAKE_HOOKSTRUCT(InternetConnectW), }; PFN_HttpSendRequestA s_pfnHttpSendRequestA = HttpSendRequestA; PFN_HttpSendRequestW s_pfnHttpSendRequestW = HttpSendRequestW; PFN_HttpAddRequestHeadersA s_pfnHttpAddRequestHeadersA = HttpAddRequestHeadersA; PFN_HttpAddRequestHeadersW s_pfnHttpAddRequestHeadersW = HttpAddRequestHeadersW; PFN_HttpSendRequestExA s_pfnHttpSendRequestExA = HttpSendRequestExA; PFN_HttpSendRequestExW s_pfnHttpSendRequestExW = HttpSendRequestExW; PFN_HttpEndRequestA s_pfnHttpEndRequestA = HttpEndRequestA; PFN_HttpEndRequestW s_pfnHttpEndRequestW = HttpEndRequestW; PFN_HttpOpenRequestA s_pfnHttpOpenRequestA = HttpOpenRequestA; PFN_HttpOpenRequestW s_pfnHttpOpenRequestW = HttpOpenRequestW; PFN_InternetConnectA s_pfnInternetConnectA = InternetConnectA; PFN_InternetConnectW s_pfnInternetConnectW = InternetConnectW; // 下面都是转接函数 BOOL WINAPI _HttpSendRequestA(HINTERNET hRequest, LPCSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength ) { return s_pfnHttpSendRequestA( hRequest, lpszHeaders, dwHeadersLength, lpOptional, dwOptionalLength); } BOOL WINAPI _HttpSendRequestW(HINTERNET hRequest, LPCWSTR lpszHeaders, DWORD dwHeadersLength, LPVOID lpOptional, DWORD dwOptionalLength ) { return s_pfnHttpSendRequestW( hRequest, lpszHeaders, dwHeadersLength, lpOptional, dwOptionalLength); } BOOL WINAPI _HttpAddRequestHeadersA(__in HINTERNET hRequest,__in_ecount(dwHeadersLength) LPCSTR lpszHeaders,__in DWORD dwHeadersLength,__in DWORD dwModifiers) { return s_pfnHttpAddRequestHeadersA( hRequest, lpszHeaders, dwHeadersLength, dwModifiers); } BOOL WINAPI _HttpAddRequestHeadersW(__in HINTERNET hRequest,__in_ecount(dwHeadersLength) LPCWSTR lpszHeaders,__in DWORD dwHeadersLength,__in DWORD dwModifiers) { return s_pfnHttpAddRequestHeadersW( hRequest, lpszHeaders, dwHeadersLength, dwModifiers); } BOOL WINAPI _HttpSendRequestExA( __in HINTERNET hRequest, __in_opt LPINTERNET_BUFFERSA lpBuffersIn, __out_opt LPINTERNET_BUFFERSA lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext) { return s_pfnHttpSendRequestExA( hRequest, lpBuffersIn, lpBuffersOut, dwFlags, dwContext); } BOOL WINAPI _HttpSendRequestExW( __in HINTERNET hRequest, __in_opt LPINTERNET_BUFFERSW lpBuffersIn, __out_opt LPINTERNET_BUFFERSW lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext) { return s_pfnHttpSendRequestExW( hRequest, lpBuffersIn, lpBuffersOut, dwFlags, dwContext); } BOOL WINAPI _HttpEndRequestA( __in HINTERNET hRequest, __out_opt LPINTERNET_BUFFERSA lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext) { return s_pfnHttpEndRequestA( hRequest, lpBuffersOut, dwFlags, dwContext); } BOOL WINAPI _HttpEndRequestW( __in HINTERNET hRequest, __out_opt LPINTERNET_BUFFERSW lpBuffersOut, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext) { return s_pfnHttpEndRequestW( hRequest, lpBuffersOut, dwFlags, dwContext); } HINTERNET WINAPI _HttpOpenRequestA(__in HINTERNET hConnect,__in_opt LPCSTR lpszVerb, __in_opt LPCSTR lpszObjectName, __in_opt LPCSTR lpszVersion, __in_opt LPCSTR lpszReferrer, __in_z_opt LPCSTR FAR * lplpszAcceptTypes, __in DWORD dwFlags, __in_opt DWORD_PTR dwContext) { return s_pfnHttpOpenRequestA( hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes, dwFlags, dwContext); } HINTERNET WINAPI _HttpOpenRequestW(__in HINTERNET hConnect,__in_opt LPCWSTR lpszVerb,__in_opt LPCWSTR lpszObjectName,__in_opt LPCWSTR lpszVersion,__in_opt LPCWSTR lpszReferrer,__in_z_opt LPCWSTR FAR * lplpszAcceptTypes,__in DWORD dwFlags, __in_opt DWORD_PTR dwContext) { return s_pfnHttpOpenRequestW( hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes, dwFlags, dwContext); } HINTERNET WINAPI _InternetConnectA(__in HINTERNET hInternet,__in LPCSTR lpszServerName,__in INTERNET_PORT nServerPort,__in_opt LPCSTR lpszUserName,__in_opt LPCSTR lpszPassword,__in DWORD dwService,__in DWORD dwFlags,__in_opt DWORD_PTR dwContext) { return s_pfnInternetConnectA( hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, dwContext); } HINTERNET WINAPI _InternetConnectW(__in HINTERNET hInternet,__in LPCWSTR lpszServerName,__in INTERNET_PORT nServerPort,__in_opt LPCWSTR lpszUserName,__in_opt LPCWSTR lpszPassword,__in DWORD dwService,__in DWORD dwFlags,__in_opt DWORD_PTR dwContext) { return s_pfnInternetConnectW( hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, dwContext); }

对应的截获注册

UINT length = sizeof(IE_HOOKS)/sizeof(IE_HOOKS[0]); for(UINT i=0; i<length; i++) { MyHook::instance().hookAPIForAll("WININET.DLL", &(IE_HOOKS[i])); }

VC浏览器相关的学习(八)(截获IE网络访问)相关推荐

  1. VC浏览器相关的学习(六)(IDispEventImpl包装的主要方法)

    IDispEventImpl包装方法对Ajax相当无力,也就是说对Flash也是没辙,娘的又走了弯路,作为几天的总结,IDispEventImpl包装的方法如下: MyRock.h // MyRock ...

  2. VC浏览器相关的学习(二)(BHO)

    BHO Browser Helper Objects     1 BHO更像是浏览器的一个插件.     2 BHO依靠于COM,所以他只对IE生效,对其他浏览器无效. 一 创建一个ATL DLL工程 ...

  3. VC浏览器相关的学习(四)(在BHO中获取IE版本以及获取窗体句柄)

    值得注意的是IE6,IE7,IE8的窗体组织完全不一样,需要用VS自带的工具Spy++查看确定 a 获取IE版本 int CMyRock::GetIEVersion() { CComPtr<ID ...

  4. VC浏览器相关的学习(三)(解决IE8无法断点调试)

    修改注册表,在HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main创建一个DWORD类 ...

  5. VC浏览器相关的学习(一)(Single document界面)

    1 MFC建立一个Single document     第一步:Document/View architecture support要打勾,否则第六步不可选     第六步:BaseClass改为C ...

  6. VC浏览器相关的学习(七)(BHO捕获鼠标键盘事件)

    原本想暂时将BHO放放,结果发现了IDispEventImpl 的基类 IDispEventSimpleImpl,原来真正牛逼的方法都在这里呢. 0 #include <mshtmdid.h&g ...

  7. VC浏览器相关的学习(五)(在BHO中建立对话框)--解决CreateDialog的1813错误

    1 添加一个资源Dialog IDD_DIALOG1 2 创建对话框      MyRock.h CMyRock():m_hwndDlg(0) { m_pMyRock = this; } privat ...

  8. web前端学习day_03:JavaScript:如何使用/ 语法/ 方法/ NaN/ js对象分类/ BOM浏览器相关/ 事件/ DOM文档对象模型

    JavaScript 给页面添加动态效果 JavaScript是一门编程语言,和Java没有关系,为了蹭热度. 语言特点: 属于脚本语言,不需要编译直接解析执行. 基于面向对象 属于弱类型语言, 强类 ...

  9. VC++深入详解学习笔记

    VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesso ...

最新文章

  1. Gradle Tasks clear app:generateDebugSources,app:mockableAndroidJar app prepareDebugUnitTestDependenc
  2. 高等数学·同济七版+线性代数第六版+概率论与数理统计第四版(教材+辅导)
  3. [20160311]ora-01732.txt
  4. golang 关闭制定名称的 tomcat_Tomcat原理详解及请求过程
  5. 关于bc中小数点length,scale,(())以及进制转换
  6. 细说 | 失效的private修饰符
  7. 实战 | Element UI 父子组件传值与事件绑定(正向)
  8. 零元学Expression Blend 4 - Chapter 3 熟悉操作第一步(制作一个猴子脸)
  9. 学习java之利用泛型访问自己定义的类
  10. 蓝桥杯 基础练习 矩阵乘法
  11. 螺栓预紧力_斯姆勒知识讲解:螺栓预紧力的计算
  12. 【PAT乙】1033 旧键盘打字 (20分) 字符串
  13. xml和TreeView
  14. Win10/Win7下添加Protel 99 SE库文件
  15. 爬取m3u8格式文件并下载ts文件转换为MP4文件
  16. property_get和property_set使用方法
  17. 2年前我从华为外包辞职,如今干到创业公司倒闭,36岁的我该何去何从?
  18. Summation Prove (Intro. to Algo. Open Course Episode 5) in Quick Sort
  19. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
  20. limt mysql操作

热门文章

  1. gif图像分解、gif图像制作
  2. FRM-91500: Unable to start/complete the build.
  3. RT-Thread柿饼控件(5)-- ProgressBar
  4. 《架构设计2.0大型分布式系统架构方法论与实践》三高笔记
  5. 12306网站服务器时间限制,12306网上订票时间限制
  6. 使用jdbc:nested exception is java.sql.SQLException: No value specified for parameter或bad SQL grammar
  7. python access violation_Python x64下ctypes动态链接库出现access violation的原因分析
  8. 基于vue开发的多条件联动筛选特效(类似京东/淘宝/中国移动)
  9. 上下取整函数的关系以及一些重要性质(附证明)
  10. Learning Deep Similarity Models with Focus Ranking for Fabric Image Retrieval 学习笔记