博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HOOK API 相关
阅读量:6818 次
发布时间:2019-06-26

本文共 1522 字,大约阅读时间需要 5 分钟。

hot3.png

   今天在使用一个HOOK 库来HOOK send 函数 发现 虽然HOOK 成功了 但是 尼玛 发送不出去数据包 返回 10035 错误。。

   各种 debug 无解  但是百度了下 还真没几个人遇到这个问题 说明 这个应该是 HOOK 库的问题了。。一些HOOk lib 虽然HOOk了 但是最后 寄存器的值都被改写了。。。导致最后API执行异常。。。

    于是自己写了个 尼玛正常了。。。我去。

   感觉HOOK 库 微软的 detour 做的还是很好的。。基本避免了这个问题。。。

哥写的测试代码

// Hook_test.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include 
#include
int (__stdcall *pf_send)( __in SOCKET s, __in_bcount(len) const char FAR * buf, __in int len, __in int flags );int __stdcall my_send( __in SOCKET s, __in_bcount(len) const char FAR * buf, __in int len, __in int flags ){ printf("send:%d %d bytes %d\n",s,len,flags); return 0;}int __declspec(naked) __stdcall detour_send( __in SOCKET s, __in_bcount(len) const char FAR * buf, __in int len, __in int flags ){ __asm { pushad pushfd push [esp+0x34] //0x24 + 4 * 4 push [esp+0x34] push [esp+0x34] push [esp+0x34] call my_send popfd popad mov edi,edi push ebp mov ebp,esp mov eax,pf_send add eax,5 jmp eax }}int _tmain(int argc, _TCHAR* argv[]){ DWORD old_protect; DWORD jmp_addr; pf_send = (int (__stdcall *)(SOCKET,const char *,int,int))GetProcAddress(LoadLibraryW(L"ws2_32.dll"),"send"); VirtualProtect(pf_send,10,PAGE_EXECUTE_READWRITE,&old_protect); __asm { mov eax,offset detour_send sub eax,pf_send sub eax,5 mov jmp_addr,eax } printf("%x",jmp_addr); __asm { mov eax,pf_send mov [eax],0xE9 inc eax mov ebx,jmp_addr mov [eax],ebx } pf_send(222,NULL,22,22); return 0;}

转载于:https://my.oschina.net/sincoder/blog/87399

你可能感兴趣的文章
杂项之rabbitmq
查看>>
【转】关于大型网站技术演进的思考(十)--网站静态化处理—动静整合方案(2)...
查看>>
jQuery练习题HTML文件
查看>>
SQL注入原理
查看>>
MySQL 锁(lock与latch)
查看>>
python
查看>>
DataTable数据存入指定路径的Excel文件
查看>>
Linq-C#左连接
查看>>
c和指针读书笔记
查看>>
常用正则表达式集锦
查看>>
JS 验证
查看>>
【Lua】特性和一些基础语法
查看>>
Jaxb2 实现JavaBean与xml互转
查看>>
shell中exec解析(转)
查看>>
ContentType ,charset和pageEncoding的区别(转)
查看>>
21副GIF动图让你了解各种数学概念(转。太强大了)
查看>>
SQL Server 2008通过LinkServer连接MySQL
查看>>
模板:LCT
查看>>
mysql的数据类型int、bigint、smallint 和 tinyint取值范围 及varchar
查看>>
[android] 手机卫士自定义控件的属性
查看>>