⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 利用hook拦截封包原理—编程爱好者网站http--www_programfan_com.htm

📁 利用hook拦截封包原理.rar
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=12">汇编语言文章</A><BR><IMG 
            height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=13">游戏开发文章</A><BR><IMG 
            height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=14">数据库开发文章</A><BR><IMG 
            height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=15">Visual 
            C#文章</A><BR><IMG height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=16">VB.net文章</A><BR><IMG 
            height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=17">XML文章</A><BR><IMG 
            height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=18">ASP.net文章</A><BR><IMG 
            height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A 
            href="http://www.programfan.net/article.asp?classid=19">算法文章</A><BR><IMG 
            height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A href="http://www.programfan.net/tougao.asp" 
            style="COLOR: #ff0000"><B>欢迎上传文章<BR></B></A><IMG height=13 
            src="利用HOOK拦截封包原理—编程爱好者网站http--www_programfan_com.files/small.gif" 
            width=18><A href="http://www.programfan.net/sample.asp" 
            style="COLOR: #ff0000"><B>免费更新代码</B></A>
            <P> </P></TD></TR>
        <TR>
          <TD bgColor=#ff6600 height=19 width="100%">
            <P align=center><STRONG><FONT color=#ffffff>文 章 搜 
            索</FONT></STRONG></P></TD></TR>
        <TR>
          <TD bgColor=#ffffcc height=83 width="100%">
            <FORM action=searcharticle.asp?classid=10 method=post target=_blank>
            <DIV align=center>
            <P><BR><FONT color=#ff0000>请输入关键字</FONT></P></DIV>
            <DIV align=center>
            <P><INPUT name=keyword size=10 
            style="BORDER-BOTTOM: rgb(255,0,0) 1px solid; BORDER-LEFT: rgb(255,0,0) 1px solid; BORDER-RIGHT: rgb(255,0,0) 1px solid; BORDER-TOP: rgb(255,0,0) 1px solid; COLOR: rgb(0,0,255); FONT-FAMILY: 宋体; FONT-SIZE: 9pt"> 
<INPUT name=B1 style="BACKGROUND-COLOR: rgb(0,255,255); BORDER-BOTTOM: rgb(0,0,255) 1px solid; BORDER-LEFT: rgb(0,0,255) 1px solid; BORDER-RIGHT: rgb(0,0,255) 1px solid; BORDER-TOP: rgb(0,0,255) 1px solid" type=submit value=搜索></P></DIV>
            <DIV align=center>
            <P><SELECT name=fw size=1> <OPTION selected 
              value=1>搜索本栏文章</OPTION> <OPTION 
            value=2>搜索全部文章</OPTION></SELECT><BR></P></DIV></FORM></TD></TR>
        <TR>
          <TD bgColor=#ff6600 height=20 width="100%">
            <P align=center><STRONG><FONT color=#ffffff>栏 目 说 
            明</FONT></STRONG></P></TD></TR>
        <TR>
          <TD bgColor=#ffffcc width="100%">&nbsp;&nbsp;&nbsp; 
            本栏目大部分文章均来自于互联网,版权归原作者和各发布网站所有。本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业目的。否则后果自负。<BR>&nbsp;&nbsp;&nbsp; 
            如果您对本栏目有什么意见和建议,欢迎<A 
        href="mailto:yaoz@163.com">和我联系</A>。</TD></TR></TBODY></TABLE></CENTER></DIV></TD>
    <TD height=234 vAlign=top width="80%">
      <DIV align=center>
      <CENTER>
      <TABLE border=0 cellPadding=0 cellSpacing=1 height=509 width="98%">
        <TBODY>
        <TR>
          <TD bgColor=#99ccff height=18 
          style="BORDER-BOTTOM: rgb(0,0,0) 1px solid" 
            width="100%"><STRONG>您所在的位置:<A 
            href="http://www.programfan.com/">编程爱好者网站</A> -<A 
            href="http://www.programfan.net/article.asp">文档中心</A> - <A 
            href="http://www.programfan.net/article.asp?classid=10" 
            style="COLOR: rgb(255,0,0)">WINDOWS编程文章 </STRONG></A></TD></TR>
        <TR>
          <TD align=middle bgColor=#fafafa height=248 
          style="FONT-FAMILY: 宋体; FONT-SIZE: 11pt">
            <DIV align=center>
            <TABLE border=0 cellPadding=0 cellSpacing=0 height=217 
              width="90%"><TBODY>
              <TR>
                <TD align=middle bgColor=#fafafa height=24 
                style="FONT-FAMILY: 宋体; FONT-SIZE: 11pt"><FONT 
                  color=#ff0000><B>利用HOOK拦截封包原理</B></FONT></TD></TR>
              <TR>
                <TD align=middle bgColor=#fafafa height=70><FONT 
                  color=#c0c0c0>(加入日期:2003-10-23 点击数:1134)</FONT><BR><B>【<A 
                  href="http://www.programfan.net/comment.asp?id=2402">对此文发表评论</A>】&nbsp;【<A 
                  href="http://www.programfan.net/club">编程爱好者论坛</A>】 【<A 
                  href="http://www.programfan.net/showarticle.asp?id=2402#" 
                  onclick=javascript:WebBrowser.ExecWB(4,1)>保存文章至硬盘</A>】
                  <OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 
                  height=0 id=WebBrowser width=0></OBJECT>&nbsp;【<A 
                  href="http://www.programfan.net/showarticle.asp?id=2402#" 
                  onclick=javascript:window.print()>打印文章</A>】</B></TD></TR>
              <CENTER></CENTER>
              <CENTER></CENTER>
              <TR>
                <TD align=middle bgColor=#fafafa>
                  <P align=center><FONT color=#0000ff><A 
                  href="http://www.programfan.net/club/listbbs.asp?rootclassid=8" 
                  style="COLOR: #ff0000"><B>Borland开发讨论区</B></A><B> </B><A 
                  href="http://www.programfan.net/club/listbbs.asp?rootclassid=9" 
                  style="COLOR: #ff0000"><B>微软开发讨论区</B></A> <B><A 
                  href="http://www.programfan.net/club/listbbs.asp?rootclassid=10" 
                  style="COLOR: #ff0000">C/C++讨论区</A> <A 
                  href="http://www.programfan.net/club/listbbs.asp?rootclassid=2" 
                  style="COLOR: #ff0000">新手入门专区</A></B></FONT></P></TD></TR>
              <CENTER>
              <CENTER>
              <TR>
                <TD bgColor=#fafafa 
                  height=123><BR>截获API是个很有用的东西,比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。 
                  <BR>首先,我们必须设法把自己的代码放到目标程序的进程空间里去。Windows 
                  Hook可以帮我们实现这一点。SetWindowsHookEx的声明如下: <BR>HHOOK 
                  SetWindowsHookEx( <BR>int idHook, // hook type <BR>HOOKPROC 
                  lpfn, // hook procedure <BR>HINSTANCE hMod, // handle to 
                  application instance <BR>DWORD dwThreadId // thread identifier 
                  <BR>); <BR>具体的参数含义可以翻阅msdn,没有msdn可谓寸步难行。 
                  <BR>这里Hook本身的功能并不重要,我们使用它的目的仅仅只是为了能够让Windows把我们的代码植入别的进程里去。hook 
                  Type我们任选一种即可,只要保证是目标程序肯定会调用到就行,这里我用的是WH_CALLWNDPROC。lpfn和hMod分别指向我们的钩子代码及其所在的dll,dwThreadId设为0,表示对所有系统内的线程都挂上这样一个hook,这样我们才能把代码放到别的进程里去。 
                  <BR><BR>之后,我们的代码就已经进入了系统内的所有进程空间了。必须注意的是,我们只需要截获我们所关心的目标程序的调用,因此还必须区分一下进程号。我们自己的钩子函数中,第一次运行将进行最重要的API重定向的工作。也就是通过将所需要截获的API的开头几个字节改为一个跳转指令,使其跳转到我们的API中来。这是最关键的部分。这里我想截三个调用,ws2_32.dll中的send和recv、user32.dll中的GetMessageA。 
                  <BR><BR>DWORD dwCurrentPID = 0; <BR>HHOOK hOldHook = NULL; 
                  <BR>DWORD pSend = 0; <BR>DWORD pRecv = 0; <BR>GETMESSAGE 
                  pGetMessage = NULL; <BR><BR>BYTE btNewBytes[8] = { 0x0B8, 0x0, 
                  0x0, 0x40, 0x0, 0x0FF, 0x0E0, 0 }; <BR>DWORD dwOldBytes[3][2]; 
                  <BR><BR>HANDLE hDebug = INVALID_HANDLE_value; <BR><BR>LRESULT 
                  CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam 
                  ) <BR>{ <BR>DWORD dwSize; <BR>DWORD dwPIDWatched; <BR>HMODULE 
                  hLib; <BR><BR>if( dwCurrentPID == 0 ) <BR>{ <BR>dwCurrentPID = 
                  GetCurrentProcessId(); <BR>HWND hwndMainHook; <BR>hwndMainHook 
                  = ::FindWindow( 0, "MainHook" ); <BR>dwPIDWatched = 
                  ::SendMessage( hwndMainHook, (WM_USER+100), 0, 0 ); 
                  <BR>hOldHook = (HHOOK)::SendMessage( hwndMainHook, 
                  (WM_USER+101), 0, 0 ); <BR><BR>if( dwCurrentPID == 
                  dwPIDWatched ) <BR>{ <BR>hLib = LoadLibrary( "ws2_32.dll" ); 
                  <BR>pSend = (DWORD)GetProcAddress( hLib, "send" ); <BR>pRecv = 
                  (DWORD)GetProcAddress( hLib, "recv" ); 
                  <BR><BR>::ReadProcessMemory( INVALID_HANDLE_value, (void 
                  *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &amp;dwSize 
                  ); <BR>*(DWORD *)( btNewBytes + 1 ) = (DWORD)new_send; 
                  <BR>::WriteProcessMemory( INVALID_HANDLE_value, (void *)pSend, 
                  (void *)btNewBytes, sizeof(DWORD)*2, &amp;dwSize ); 
                  <BR><BR>::ReadProcessMemory( INVALID_HANDLE_value, (void 
                  *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &amp;dwSize 
                  ); <BR>*(DWORD *)( btNewBytes + 1 ) = (DWORD)new_recv; 
                  <BR>::WriteProcessMemory( INVALID_HANDLE_value, (void *)pRecv, 
                  (void *)btNewBytes, sizeof(DWORD)*2, &amp;dwSize ); 
                  <BR><BR>hLib = LoadLibrary( "user32.dll" ); <BR>pGetMessage = 
                  (GETMESSAGE)GetProcAddress( hLib, "GetMessageA" ); 
                  <BR>::ReadProcessMemory( INVALID_HANDLE_value, (void 
                  *)pGetMessage, (void *)dwOldBytes[2], sizeof(DWORD)*2, 
                  &amp;dwSize ); <BR>*(DWORD *)( btNewBytes + 1 ) = 
                  (DWORD)new_GetMessage; <BR>::WriteProcessMemory( 
                  INVALID_HANDLE_value, (void *)pGetMessage, (void *)btNewBytes, 
                  sizeof(DWORD)*2, &amp;dwSize ); <BR><BR>hDebug = ::CreateFile( 
                  "C:\\Trace.log", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -