记得在什么地方见过一些文章,讲授关于用HOOK IAT表的方法挂接/拦截API,
但其中好象说道: 与SOCKET相关的DLL,例如ws2_32.dll,wsock32.dll不能
用这种方法拦截,跟踪.今天尝试着用HOOK IAT表的方法拦截ws2_32.dll,wsock32.dll果然失败,
应用程序总是返回WSAStartup()返回100091. 但正常启动应用程序时(不拦截)
应用程序运行良好.哪位高人能解释一下其中的缘由, 另外有谁知道通常情况下用什么方法拦截
诸如ws2_32.dll,wsock32.dll这样与SOCKET相关DLL的API调用.谢谢
请问为什么不能用HOOK IAT表的方法跟踪与SOCKET相关的DLL,例如ws2_32.dll,wsock32.dll?
但其中好象说道: 与SOCKET相关的DLL,例如ws2_32.dll,wsock32.dll不能
用这种方法拦截,跟踪.今天尝试着用HOOK IAT表的方法拦截ws2_32.dll,wsock32.dll果然失败,
应用程序总是返回WSAStartup()返回100091. 但正常启动应用程序时(不拦截)
应用程序运行良好.哪位高人能解释一下其中的缘由, 另外有谁知道通常情况下用什么方法拦截
诸如ws2_32.dll,wsock32.dll这样与SOCKET相关DLL的API调用.谢谢
请问为什么不能用HOOK IAT表的方法跟踪与SOCKET相关的DLL,例如ws2_32.dll,wsock32.dll?
解决方案 »
- VC2010中SolutionBuilderEnvironment的叫什么,在什么位置?
- CTreeCtrl展开时如何通知View出现滚动条
- CDocument size问题? 急!!!
- GetWindowThreadProcessId 无法真确获取进程PID (50分,新人没分。不过心里会感激各位前辈)
- cstring 转char
- wawaku(挣钱啦挣钱啦 娶个媳妇盖房啦),请进!
- 程序编到一定程度,经常不能再添加或删除控件了,什么原因?
- 200分告诉两个函数 一个100分。 实现计算机关机的函数和重起的函数 。最好写得详细些,在线等待, 马上给分。谢谢大家!
- 有关Socket的问题
- 关于鼠标,菜单项和显示简略信息的问题
- win2000下c编程,我只使用showwindow,为什么还会有WM_PAINT消息发送给消息循环?
- 怎样编写 DX 程序
accept,bind,closesocket,connect等.
ws2_32.dll(Windows Socket 2.0 32-Bit DLL)中的函数,但直接调用
的函数只有两个WSARecv(), WSARecvFrom()。其他都是通过
"forward function"机制完成的。但具体"forward function"机制是
怎么实现调用转移的,就不清楚了。
ws2_32.dll(Windows Socket 2.0 32-Bit DLL)中的函数,但直接调用
的函数只有两个WSARecv(), WSARecvFrom()。其他都是通过
"forward function"机制完成的。但具体"forward function"机制是
怎么实现调用转移的,就不清楚了。
你HookFun的地址,而不是send函数的真正地址,再WSAStartup中
就进行判断该地址是不是等于send的真正地址,如果不是的话,
就返回false,这样,初始化就错误了,知道原因了吧,所以,用
Hook API的方法有一个很大的缺点就是别人能防止你进行Hook。
前提是你已经Hook了GetProcAddress函数。
时,发现在WSAStartup()中调用了很多GetProcAddress("xxx")函数。
并且只要程序中替换了WS2_32.dll的任何一个函数的IAT地址,并且这个函数被
WSAStartup()通过GetProcAddress("xxx")调用过,则WSAStartup()必返回FALSE。从跟踪结果分析,在WSAStartup()函数中对WS2_32.dll的除以下3个函数之外的所
有函数都调用了GetProcAddress(),这3个函数是:
__WSAFDIsSet
WEP
WSApSetPostRoutine从跟踪结果上分析好象是“在WSAStartup中判断该地址是不是等于send的真正地
址”,但总觉得Windows系统没有必要“防止你进行Hook”。因为通过外包DLL一样
可以对SOCKE API进行HOOK的。另外LSP(layered service provider)也允许对
应用程序的SOCKET API调用进行再定向。我将进一步深入研究WSAStartup()的汇编代码,看看到底它在干什么。
时,发现在WSAStartup()中调用了很多GetProcAddress("xxx")函数。
并且只要程序中替换了WS2_32.dll的任何一个函数的IAT地址,并且这个函数被
WSAStartup()通过GetProcAddress("xxx")调用过,则WSAStartup()必返回FALSE。从跟踪结果分析,在WSAStartup()函数中对WS2_32.dll的除以下3个函数之外的所
有函数都调用了GetProcAddress(),这3个函数是:
__WSAFDIsSet
WEP
WSApSetPostRoutine从跟踪结果上分析好象是“在WSAStartup中判断该地址是不是等于send的真正地
址”,但总觉得Windows系统没有必要“防止你进行Hook”。因为通过外包DLL一样
可以对SOCKE API进行HOOK的。另外LSP(layered service provider)也允许对
应用程序的SOCKET API调用进行再定向。我将进一步深入研究WSAStartup()的汇编代码,看看到底它在干什么。
我已经很久没研究Hook API 了,最近研究了一下Debug发现比
Hook Api功能强劲多了,还没发现有什么它搞不定的。除非特别
对Debug进行了处理。
之一, 尤其对HOOK技术. 希望以后能多和你交流.