hook WSARecv要注意的问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

如果直接在hook的函数中直接调用原始地址的话完全没有问题:

int WSAAPI hooked_WSARecv_ws232(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
{
return ((LPFN_WSARECV)(WSARecvHookerWS232.GetRawFunction()))(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine );
}

但是如果是在调用原函数后还进行了getsockname或者getpeername操作的话将导致网络操作失败。

这里如果需要截获实际接收的数据的话,当村的通过这个函数是很片面的,需要分几种情况说明:

1、如果lpOverlapped为NULL,那么是阻塞式的,直接在原函数返回后处理即可
2、如果lpOverlapped不为NULL,且lpCompletionRoutine不为NULL,那么需要使用自己的函数替换lpCompletionRoutine;并在调用后执行调用用户原函数。因为这时是完成例程通知。
3、如果lpOverlapped不为NULL,且lpCompletionRoutine为NULL,并且lpOverlapped的hEvent不为NULL,那么需要hook WSAGetOverlappedResult。因为这时是事件通知。
4、如果lpOverlapped不为NULL,且lpCompletionRoutine为NULL,并且lpOverlapped的hEvent为NULL,那么需要hook GetQueuedCompletionStatus,因为这时是完成端口的方式。

这里还有一个需要注意的地方:如果一个api hook的DLL强行卸载的话会导致调用堆栈出现返回地址错误。 比如GetQueuedCompletionStatus这样的函数, 在进行卸载时, 基本可以肯定程序在原始函数中阻塞,且返回地址为dll模块的地址, 如果这时候卸载HOOK和dll的话,将会导致该函数执行完成后跳到原来dll模块的函数地址, 这时内存已经清空,从而出现访问出错的异常。因此我们需要进行是否函数当前正在等待返回的判断。 如果还有在执行的,我们需要先等待他们返回。最好的方式是设计一个引用计数reference。

当然,除非必要,否则建议不要hook可能阻塞很久的函数,尤其是像GetQueuedCompletionStatus这样的函数,因为系统中很多情况下都会调用该函数,那么在卸载的时候基本可以肯定有两种情况:一是强行卸载,程序必死无疑;二是等待返回,这种情况也基本可以肯定是hook模块也不要想着卸载掉了 ;)

 

//其他参考:

1.http://www.cppblog.com/twzheng/archive/2007/04/16/21991.html;


【自定义抓包发包工具(中)——挂钩六大通信函数】send,sendto,wsasend,recv,recvfrom,wsarecv函数挂钩,hook实战 在上篇内容中【自定义抓包发包工具(上)】我们提到了Windows通信底层实现和编写带窗口的动态库,然后将动态库注入并显示了窗口。本期是自定义抓包、发包工具的第二部分。本部分内容是对Windows常用的六大通信函数进行挂钩,并将发送和接受的数据包打印输出出来。主要工作有Detour Hook框架的使用【DetourHook框架】,六大通信函数源地址获取【源函数地址获取】和对应代理函数的实现。并通过带窗口的动态库注入控制捕获数据。 阅读详情

相关推荐

微信Hook进阶:网络层函数定位与消息收发流程深度解析

在Windows平台软件逆向工程中,Hook(钩子)技术是深入理解程序内部机制的关键手段。其原理是通过拦截并修改函数调用,实现对程序行为的监控与干预。这项技术的核心价值在于,它能让开发者突破软件表层,直接分析其底层数据流与业务逻辑,为安全研究、自动化工具开发及协议分析提供可能。应用场景广泛,包括但不限于软件行为分析、数据监控、功能扩展及自动化测试。本文聚焦于即时通讯软件的网络通信模块,深入探讨如何定位并Hook其核心网络函数,从而完整捕获和分析消息的发送与接收流程。通过结合动态调试与静态分析,文章详细拆解了

weixin_36250541的博客 458

HookRecv 拦截输出

hookrecv拦截输出封包信息 不错的东西

PC微信消息Hook实战:逆向定位与稳定获取方案解析

Hook技术是软件逆向工程与安全分析中的核心方法,它允许开发者在目标程序执行流程的关键节点插入自定义代码,从而实现对程序行为的监控、修改或数据提取。其原理是通过修改目标函数在内存中的指令,将执行流重定向到开发者控制的函数,在完成定制逻辑后再跳回原流程。这项技术的价值在于提供了从进程内部观察和干预的视角,克服了网络嗅探等外部方法的局限,广泛应用于自动化测试、安全审计、功能扩展等场景。在即时通讯软件的深度集成与自动化处理需求中,稳定获取客户端实时消息流是一个典型应用。本文以PC微信为例,深入探讨如何通过逆向分析

weixin_34050005的博客 329

hook send recv wsasend wsarecv 封包工具源码

hook send recv wsasend wsarecv 封包工具源码 本工具支持命令行操作,采用远程线程注入目标进程,注入后hook发包函数,实现封包拦截。 主程序为MFC编写 动态链接库VC WIN32项目

任鸟飞逆向C++高级篇

【课程简介】本课程为任鸟飞逆向C++高级篇,注重在逆向中运用的技巧和思维逻辑,掌握后相关工具与手法可以熟练运用,在反汇编的世界里如鱼得水。 本套课程不只是一套深入学习C++的课程,更是一套深入学习汇编逆向课程、外挂与反外挂、软件安全的课程。 逆向思路技术随笔,请关注我的CSDN博客:https://blog.csdn.net/qq_36553941 欢迎大家来学习交流,活动折扣咨询等请在博客私聊我。 PS: 课程中工具包、源码、课件请关注第一章的第一节的随课课件,工欲望善其事,必先利其器! 【学前预备知识】任鸟飞逆向C++系列课程是一条精心安排为掌握汇编逆向、外挂与反外挂、软件安全以及软件编程的学习路线,包括但不限于 基础篇、进阶篇、高级篇(本篇)、实战篇等,所以为保证您能学有所成请在学习本篇之前务必掌握基础篇与进阶篇!!! 基础篇CSDN学院链接:https://edu.csdn.net/course/detail/30509进阶篇CSDN学院链接:https://edu.csdn.net/course/detail/30680 【学员学成收获】认真学习并练习后将掌握:1、熟练游戏逆向思想与技巧。2、熟练通用辅助程序设计。3、熟练诸多逆向工具使用。4、熟练常见数据结构逆向分析。5、熟悉智能主线脚本编写。 

IOCP (关于WSASend,WSARecv调用)

IOCP (关于WSASend,WSARecv调用)

thebluebluesky的专栏 8360

Detours项目中Hook Winsock2 recv()函数失败的技术分析

在Windows平台网络编程中,Winsock2 API是最基础的网络通信接口。许多开发者会使用微软的Detours库来拦截和修改这些API调用,以实现网络调试、数据修改或功能扩展等目的。本文通过一个实际案例,分析在使用Detours库Hook Winsock2 API时可能遇到的问题及解决方案。 ## 问题现象 开发者在尝试Hook Winsock2的send()和recv()函数时,发现s...

gitblog_00483的博客 351

关于HOOK WINAPI函数

有时候要研究游戏封包或者需要对其进行修改,则最好的方法是HOOK他的网络API函数,如用于发送封包的send函数和 用于接受的recv,WSARecv函数等等。 将HOOK代码写到DLL中,然后通过修改游戏运行程序的输入表去加载这个dll从而达到劫持API的作用! 修改PE文件的输入表方法:最简单的就是试用PE工具LordPE了,打开程序,选择目录,点击输入表,然后右键增加输入表

Debug8的专栏 2061

hook

什么是hook如题,我是用hook实现一键换肤。那么什么是hookhook,钩子. 安卓中的hook技术,其实是一个抽象概念:对系统源码的代码逻辑进行"劫持",插入自己的逻辑,然后放行。注意hook可能频繁使用java反射机制··· ...

博客 344

Winsock-Hook:挂钩winsock send&recv以读取进程的所有流量

温索克胡克 挂钩winsock send&recv以读取进程的所有流量

ws2_32.dll wsock32.dll send sendto 注意

我们知道,WS2_32.DLL导出了send、sendto、recv、recvfrom、WSASend、WSASendTo、WSARecvWSARecvFrom,而WSOCK32.DLL也导出了send、sendto、recv、recvfrom函数(OD只能看到WSOCK32.DLL的recv、recvfrom,用VC的DEPENDS.EXE才能查看到send、sendto)。但MSDN上并没有

lionzl的专栏 3722

逆向调试完成端口回包实践总结

大概描述下完成端口的原理      一个套接字可以对应多个overlapped, 每个overlapped都由相应的一个线程来处理。而WSARecv绑定好了一个OVERLAPPED,WSARecv的调用会通知数据即将到来,同时将会触发某线程中的GetQueuedCompletionStatus函数调用完成,然后通过第四个参数OVERLAPPED的某个偏移得到回包j然后进行后续操作。相应的WSAS

随心散人专栏 1561

UE4游戏安全:线程发包与HOOK加密通信的逆向实战分析

在软件安全领域,HOOK技术是一种关键的动态分析手段,它通过拦截和修改程序执行流来监控或改变其行为。其核心原理是在目标函数执行前插入自定义代码,实现对函数调用的捕获与处理。这项技术在软件调试、安全分析和性能监控中具有重要价值。在游戏安全这一特定应用场景下,客户端与服务器的通信加密是保护核心逻辑和数据完整性的关键防线。通过结合逆向工程,分析者可以定位网络线程中的发包函数,并运用HOOK技术对加密通信过程进行监控与解析。本文以虚幻引擎4(UE4)游戏为例,深入探讨了如何针对“线程发包”这一常见架构,以及“加密通

weixin_34195142的博客 329

微信防撤回技术原理与安卓端实战:逆向分析与Hook实现

在即时通讯与客户端开发领域,消息的生命周期管理与状态同步是核心基础概念。其原理通常涉及客户端-服务器架构下的本地数据存储、状态标记与UI渲染机制。从技术价值看,深入理解这一流程有助于掌握应用层协议分析、客户端安全机制及UI框架的工作原理,是进行软件逆向工程、自动化测试与安全评估的重要实践。应用场景广泛,包括客户端功能扩展、自动化测试脚本开发及安全漏洞研究。本文聚焦于微信消息撤回机制,通过逆向工程定位关键方法,并利用Xposed/LSPosed框架进行Hook拦截,实现防撤回功能。文中详细拆解了消息撤回的完整

weixin_38166557的博客 425

防撤回补丁技术解析:从内存Hook到逆向工程的实战指南

在软件安全与逆向工程领域,Hook技术是一种通过拦截和修改程序执行流来实现功能扩展或行为监控的核心方法。其原理通常涉及在目标进程的内存空间中,将特定函数的入口指令替换为跳转到自定义代码的指令,从而在函数执行前后插入自定义逻辑。这项技术的工程价值在于,它允许开发者在无需源码的情况下,深度分析和干预闭源软件的内部行为,广泛应用于软件调试、安全研究、功能增强等场景。例如,在即时通讯软件的辅助工具开发中,通过内存Hook技术可以精准拦截消息处理流程,实现诸如消息防撤回等特定功能。本文以微信/QQ防撤回补丁为例,深入

weixin_34216107的博客 386

UE4游戏网络协议逆向实战:从HOOK明文到自定义发包

网络协议分析是理解软件通信机制的基础,其核心在于解析客户端与服务器之间的数据交换格式与规则。通过动态调试与HOOK技术,可以截获并分析内存中的明文数据流,从而逆向出协议的序列化结构与加密算法。这一过程对于安全研究、漏洞挖掘和通信逻辑理解具有重要价值,尤其在游戏开发与安全领域应用广泛。本文聚焦于UE4引擎,详细阐述了如何定位网络函数、HOOK关键点以获取明文数据包,并结合逆向工程方法解析自定义加密算法,最终实现独立的数据包构造与发送,为深入理解复杂网络应用提供了一套完整的工程实践路径。

weixin_30292745的博客 579

UE4/UE5网络线程发包Hook实战:定位加密Call与稳定拦截方案

在游戏开发与安全分析领域,Hook技术是一种通过拦截和修改程序执行流程来实现功能扩展或数据监控的核心方法。其原理通常涉及修改目标函数入口的机器码,使其跳转到自定义处理函数,从而在函数执行前后注入逻辑。这项技术的核心价值在于能够深入分析程序内部行为,广泛应用于协议分析、性能监控、自动化测试及安全研究等场景。针对现代游戏引擎如UE4/UE5,网络模块普遍采用多线程异步发送与数据加密机制,这给传统的Hook方法带来了挑战。本文聚焦于解决UE4引擎中因线程发包和加密导致的Hook难题,详细阐述了如何通过系统API

weixin_30617695的博客 383
上一篇: SPI 注入最基本的模板,可直接安装运行
下一篇: error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMT.
冷风
冷风 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄21年 809粉丝 337原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值