钩全版本IE并修改网址的示例分析

  介绍

这篇文章将为大家详细讲解有关钩全版本IE并修改网址的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

正文

先导入一波引用

# include & lt; windows.h>
# include & lt; WinInet.h>
# include & lt; string>
# include & lt; iostream>
使用std:: string;
使用名称空间性病;
# pragma评论(自由,“wininet.lib")

首先我们知道http应用层的函数基本都在wininet.dll中故我们导出wininet.dll的函数列表(这里我使用的是ProcessHacker)

钩全版本IE并修改网址的示例分析

钩全版本IE并修改网址的示例分析

我们要对Url进行拦截修改所以先要查找和Url有关的函数,这边的推迟验证了我之前说的经由wininet。dll是延迟导入IAT钩是无效的。钩全版本IE并修改网址的示例分析

这里我们找到了InternetCrackUrl这个函数同时上面一个InternetConnect看上去非常有用,调试即在该函数加断点这里我使用的是开源的x64_dbg输入指令bp InternetConnectW

钩全版本IE并修改网址的示例分析”>这样我们可以确定IE在访问网址是必然会执行这个函数我们需要对其进行内联钩,避免大家采坑说明一下IAT钩是行不通的,即浏览器进行了DelayLoad,一开始并没有加载wininet.dll,通过查找wininet.h我们可以得到该函数的参数以及类型</p> <pre> typedef  HINTERNET (WINAPI  * tInternetConnectWFunc)
  (
  ,HINTERNET ,,, hInternet,
  ,LPCWSTR ,,,,, lpszServerName,
  ,INTERNET_PORT  nServerPort,
  ,LPCWSTR ,,,,, lpszUserName,
  ,LPCWSTR ,,,,, lpszPassword,
  ,DWORD ,,,,,,, dwService,
  ,DWORD ,,,,,,, dwFlags,
  ,DWORD_PTR ,, dwContext
  );</pre> <p>注意一定要引入wininet.h不然会有类型找不到</p> <p>接下来我们需要准备一个变量来存储该函数的原调用</p> <pre> tInternetConnectWFunc  oInternetConnectWFunc ; </pre> <p>然后需要编写该函数的新回调,注意这边用到了钩和解开需要现在头部声明,另外WCharToMByte这个转换函数在文章最后我会给出。</p> <pre> HINTERNET  WINAPI  hkInternetConnectW (
  互联网,HINTERNET  hInternet//句柄(我是这么理解的)
  ,LPCWSTR  lpszServerName//服务器名
  ,INTERNET_PORT  nServerPort//端口
  ,LPCWSTR  lpszUserName,
  ,LPCWSTR  lpszPassword,
  ,DWORD  dwService,
  ,DWORD  dwFlags,
  DWORD_PTR  dwContext
  )
  {
  ,解开();//先解除钩取得返回值后在重新困境=,oInternetConnectWFunc  (tInternetConnectWFunc) GetProcAddress (GetModuleHandle (L

接下来是InLineHook非常简单

 BYTE  oldAddress [5];
  BYTE  newAddress [5],=, {, 0 xe9 };
  void  InHook ()
  {
  ,memcpy (oldAddress, InternetConnectW,, 2),,//保存原字节
  ,BYTE  pByte [2],=, {xeb, 0, 0 xf9 },,//优化以防重复钩
  ,if (* *)(字节InternetConnectW ==, 0 xeb)
  返回才能;
  
  ,//计算偏移
  ,DWORD  Offset =,(字)hkInternetConnectW 作用;(字)InternetConnectW;
  字,*(*)(时间+ newAddress  1),=,抵消;
  ,
  ,DWORD 保护;
  ,VirtualProtect((值)((字)InternetConnectW 安康;5),,7日,PAGE_EXECUTE_READWRITE,,,保护);//修改内存属性
  
  ,//修改函数地址数据
  ,memcpy()的值((字)InternetConnectW 安康;5),,newAddress,, 5);
  ,memcpy (InternetConnectW, pByte,, 2);
  ,
  ,VirtualProtect((值)((字)InternetConnectW 安康;5),,7日,保护,和保护);//,还原内存属性
  }

钩全版本IE并修改网址的示例分析