hook send/sendto函数的问题

yaozhu88 yaozhu88 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
想练习一下inline hook,exe程序用来加载此DLL,得到指定进程的线程ID,调用此DLL导出的Installhook()函数用来对指定的进程安装钩子过程,想inline hook 此进程的WS2_32.dll的一些函数,想拦截包。下面是一个完整DLL工程,但是遇到了一个奇怪的问题,把#include <Winsock2.h>这句注释掉能编译成功,加上之后,会出现下面的错误。
哪位兄弟帮我看下啊。

下面是下载地址
http://www.brsbox.com/filebox/uploadcomplete/randstr/4961I2HMGmj48c72Tu87JW1915/fgid/707c09885160b93194337095a3e7c0fa/dirids/0

1>------ 已启动生成: 项目: FuckVClient, 配置: Debug Win32 ------
1>正在编译...
1>FuckVClient.cpp
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : 参见“AF_IPX”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: “AF_MAX”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : 参见“AF_MAX”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: “SO_DONTLINGER”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : 参见“SO_DONTLINGER”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: “sockaddr”: “struct”类型重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : 参见“sockaddr”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 语法错误 : 缺少“}”(在“常量”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 语法错误 : 缺少“;”(在“常量”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: 语法错误 : “常量”
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(518) : warning C4005: “IN_CLASSA”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(287) : 参见“IN_CLASSA”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(524) : warning C4005: “IN_CLASSB”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(293) : 参见“IN_CLASSB”的前一个定义
的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(778) : 参见“inet_addr”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1745) : error C2375: “inet_ntoa”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(780) : 参见“inet_ntoa”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(1763) : error C2375: “listen”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(782) : 参见“listen”的声明
...全文

相关推荐

hook sendto 函数

hook截获http发送的数据包 hook截获http发送的数据包 hook截获http发送的数据包

cheng44540

Python内存Hook技术实现小程序云函数网络流量抓包与逆向分析

在软件开发和逆向工程领域,网络流量分析是理解程序行为、调试接口和进行安全测试的基础技术。传统抓包工具如Fiddler、Charles通过代理模式拦截流量,但在云函数等远程执行环境中,由于代码运行在云端服务器,传统代理方案面临环境配置复杂、HTTPS解密困难和高侵入性等挑战。为解决这一问题,内存Hook技术提供了一种更底层的解决方案,它通过在运行时动态替换关键网络函数(如socket.sendall和recv),实现对特定Python进程网络流量的零侵入拦截。这种技术对于分析小程序云函数、第三方SDK的内部网

weixin_34234721

vc截获封包

vc2005 上编译通过, 可正对不同的进程截取封包,原理是hook 了send recv sendto recvfrom api 函数

尘埃_

c# socket

NULL 博文链接:https://keva4240.iteye.com/blog/461759

weixin_38669628

内核和用户空间通信—netlink源码

一、imp2源码 整个源码包含三个文件:imp2_k.c, imp2_u.c和imp2.h. 其中imp2_k.c为内核模块的源代码,imp2_u.c为应用程序,即测试代码,imp2.h为两个源文件都需要引用的头文件。其整体的功能是:注册一种新的netlink协议,并注册一个新的NF hook函数。当有ping包发往当前主机或者经过当前主机转发时,内核向用户发送ping包的源IP和目的IP。各个文件的简单分析见下文。 1. imp2.h 该文件主要是定义了一种新的Netlink协议类型NL_IMP2(31)。新的协议类型的选值不能和当前内核中已经定义的netlink协议类型重复。定义了基于该协议类型的消息类型,内核根据接收到消息的不同类型,进行不同的处理:IMP2_U_PID和IMP2_CLOSE分别为请求和关闭。IMP2_K_MSG代表内核空间发送的消息。 该头文件的源码如下: 2. imp2_k.c 该程序为内核模块程序。其完成的功能如下: (1)创建一种新的Netlink协议NL_IMP2,并注册该协议的回调函数kernel_receive。但用户空间通过建立且协议类型为NL_IMP2的socket套接字并调用sendto,sendmsg函数发送数据时,传送到内核空间的数据由kernel_receive进行处理。该函数主要是记录用户进程的ID,用于随后发送数据的时候指定目的。 (2)在Netfilter的hook点NF_IP_PRE_ROUTING注册hook函数get_icmp,对经过该hook点的ping包进行处理。get_icmp首先判断是否是ping包,如果不是,直接Accept。如果是,则记录该包的源IP和目的IP,然后调用send_to_user,将记录的信息发送给kernel_recieve函数中记录的用户进程ID。 该文件的源码如下: 3. imp2_u.c 该程序为用户空间的测试程序。该程序包括以下功能: (1)生成NL_IMP2协议的socket.然后通过调用sendto发送IMP2_U_PID类型的请求信息给内核。然后等待接受内核发回的信息。记住:仅当有ping包经过内核的NF时,内核才会向用户进程发送信息。 (2)当用户进程通过Ctrl+C来结束该程序时,调用信号处理函数sig_int,向内核发送IMP2_CLOSE的消息,结束socket。 该文件的源码如下: 二、编译和测试 1. 整个源文件编译的Makefile如下: all: gcc -O2 -DMODULE -D__KERNEL__ -W -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/`uname -r`/build/include -c -o imp2_k.o imp2_k.c gcc imp2_u.c -o imp2_u install: insmod imp2_k.o uninstall: rmmod imp2_k clean: rm -f imp2_k.o imp2_u 2. 加载内核模块,并执行测试程序。 #make install #./imp2_u 当没有ping包时,终端一直处于等待输出状态。通过另一台主机(192.168.1.100)向当前主机(192.168.1.101)发送ping包,则终端已经有输出: #./imp2_u [root@localhost imp2]# ./imp2_u src: 192.168.1.100, dest: 192.168.1.101 src: 192.168.1.100, dest: 192.168.1.101 src: 192.168.1.100, dest: 192.168.1.101 src: 192.168.1.100, dest: 192.168.1.101

xiaoziyao
评论 6
收藏 已收藏
分享
返回顶部
yaozhu88
进程/线程/DLL 15,465 成员 49,169 内容