gh0st的IOCP模型分析

关于一款开源远程控制软件(gh0st)的源码分析(一) 2020年注定是不平凡的一年,前有冠状病毒的肆虐,全国上下都笼罩在一种紧张而又不安的氛围中,后有20200202这个千年难得一遇的对称时刻,朋友圈便充斥着各种祝福与童年回忆。正是因为这百年难得一遇的超长假期,才能让我有精力和时间去分析那些静静地躺在我电脑磁盘里的开源软件的源码。 gh0st这款开源软件,主要的用途是用于远程操作另一台计算机(包括远程文件的拷贝、远程视频连接),功能有点类似于QQ中的... 阅读详情

在分析了那么多IOCP相关api之后想把IOCP模型分析下,本人菜鸟一个,高手勿笑。

gh0st是单文档类型的程序框架。 文档类型的都是从theApp开始的。theApp是一个全局变量。 那我们就先看一下CGh0stApp这个类的初始化函数 BOOL CGh0stApp::InitInstance()
下面很大一部分是生成的框架。我给大家指出来,就没必要再看这些了

直到

if (!ProcessShellCommand(cmdInfo)) 
                return FALSE; 

都是框架。不去看。分析下面的。

((CMainFrame*) m_pMainWnd)->Activate(nPort, nMaxConnection); 

这句是调用CMainFrame类的Activate函数。 m_pMainWnd是单文档类的主界面指针,也是框架类指针。就是CMainFrame类 ,接下来我们就去Activate函数里面看看 。

	m_iocpServer = new CIOCPServer;   /// 这里调用了IOCPserver构造函数
	// 开启IOCP服务器, 初始化例程   
 	if (m_iocpServer->Initialize(NotifyProc, this, 100000, nPort))

进入 Initialize 函数看下:

bool CIOCPServer::Initialize(NOTIFYPROC pNotifyProc, CMainFrame* pFrame, int nMaxConnections, int nPort)
{
	//// 创建套接字
	m_socListen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);

	// 创建事件   处理网络IO
	m_hEvent = WSACreateEvent();

	/// 在 m_socListen 套接字上接收 FD_ACCEPT 事件,关联事件 和套接字 
	int nRet = WSAEventSelect(m_socListen,m_hEvent,FD_ACCEPT);	
	
	// 绑定 套接字
	nRet = bind(m_socListen, (LPSOCKADDR)&saServer, sizeof(struct sockaddr));

	// Set the socket to listen
	nRet = listen(m_socListen, SOMAXCONN);

	/// 开启监听线程 ListenThreadProc
	m_hThread = (HANDLE)_beginthreadex(NULL, 0,	 ListenThreadProc,  (void*) this, 0, &dwThreadId);
	if (m_hThread != INVALID_HANDLE_VALUE)
	{
		//// 初始化完成端口
		InitializeIOCP();
	}
}

让我们看下 监听线程 ListenThreadProc 和 InitializeIOCP 函数都做了什么。

首先看监听线程:

unsigned CIOCPS
gh0st 远程桌面控制源码分析 远程主机流程图:客户机流程图:CGh0stApp theApp; 唯一的实例在初始化中调用了主框架的 Activate 函数:BOOL CGh0stApp::InitInstance(){  ((CMainFrame*) m_pMainWnd)->Activate(nPort, nMaxConnection);}Activate 函数构造了一个  CIOCPServer 对象,然后调用 Initialize 函数初始化:void CMainFrame::Activate(UINT nPort, UINT n 阅读详情

相关推荐

基于C++6.0的Gh0st远控源码研究及在VS2019下的编译修正和测试

简单看了一下整个程序的流程。代码量不多也不少,该有的功能都有,不该有的功能也基本都删除了,对宿主机器有破坏性的东西基本都剔除掉了,只剩下远控和群集化管理功能。说实话 ,代码值得学习的地方真的很多。把这个东西完全研究透肯定会收获良多。代码不复杂,简单清爽、架构合理、设计精巧、性能优良,特别是主控端的IOCP完成端口高负载设计理论和实现方法真的Perfect!感觉比灰鸽子要强,远控直接可以粘贴复杂,传文件支持拖放操作。屏幕控制模块代码结构清爽优质,性能在近15年以后的现在来说有点儿Low low 滴了。

wh445306 3837

深入解析gh0st远程控制软件的核心架构与IOCP模型实现

本文深入解析了开源远程控制软件gh0st的核心架构,重点剖析其采用IOCP(完成端口)模型实现高并发网络通信的原理。文章通过类比医院分诊台,生动阐述了gh0st如何利用线程池和事件驱动机制高效处理海量连接与数据,并详细解读了其服务端启动、连接接入、数据收发引擎及资源管理的源码实现,是学习Windows高性能网络编程的经典范例。

weixin_29210759的博客 110

深入解析gh0st远程控制软件:IOCP模型与线程池的设计实现

本文深入解析了gh0st远程控制软件的高性能网络通信核心,重点剖析了其采用的IOCP(完成端口)模型与线程池的设计实现。通过源码分析,详细阐述了gh0st如何利用IOCP的异步I/O机制,结合重叠I/O与连接上下文管理,以固定数量的线程高效处理海量并发连接,从而构建稳定、高效的远程控制通信引擎。

weixin_28331555的博客 235

手把手教你用VS调试gh0st远程控制软件服务端(附线程池优化技巧)

本文详细介绍了如何使用Visual Studio调试gh0st远程控制软件服务端,并提供了线程池优化的实战技巧。通过源码分析和IOCP模型解析,帮助开发者深入理解高性能服务端开发,提升远程控制软件的性能和稳定性。

weixin_30374009的博客 434

Gh0st远控源码编译与剖析:从IOCP模型到恶意软件行为分析

远程控制(远控)是恶意软件与攻防演练中的典型C/S架构形态,其核心在于控制端与被控端通过TCP协议完成指令下发与数据回传。Gh0st作为经典开源远控样本,借助IOCP完成端口模型实现高并发Socket通信,并以模块化方式集成屏幕监控、文件管理、远程Shell等功能,非常适合安全研究者观察老牌木马的协议设计与运行机制。通过VS2019编译源码、配置参数与网络环境,可以系统理解远控程序从安装驻留到上线交互的完整链路;在此基础上结合导入表、注册表行为和流量特征进行侧写,有助于红队评估攻击路径、蓝队提炼检测规则,最

weixin_27722377的博客 331

从IOCP到远控:gh0st3.6源码中的Windows网络编程与安全对抗密码

在Windows系统编程领域,IOCP(完成端口)模型是高并发网络服务的基石,它通过异步I/O和线程池调度,让服务器以极低资源占用支撑海量连接。理解IOCP的核心原理,如完成端口创建、工作线程等待、WSARecv/WSASend异步循环,以及缓冲区与内存池设计,是掌握高性能网络服务的关键。而远程控制软件(RAT)正是这类技术的典型应用场景。以经典开源样本gh0st3.6为例,其服务端基于IOCP实现长连接管理,客户端采用C++封装命令分发、文件传输、屏幕监控等模块,构成完整的C/S架构。通过剖析这份源码,不

weixin_29212429的博客 264

gh0st 3.6源码拆解:从IOCP协议到YARA检测规则实战

远程控制类恶意程序(RAT)长期是网络安全分析的核心研究对象。gh0st 3.6作为经典远控源码,完整呈现了基于MFC界面构造、Socket自定义协议以及IOCP完成端口模型的远控三大核心机制。通过解析其数据包头结构、命令字与上线流程,分析人员可以快速掌握传统RAT的通信特征与持久化手段。此类源码的工程价值在于:利用VS2008工具链完成编译后,结合Wireshark抓包和Python结构体映射,即可从协议层面提取稳定常量;进一步固化为YARA规则,能够有效覆盖gh0st及其变种的检测。这种从源码分析到特征

weixin_29324401的博客 288

Gh0St3.75,支持win7、win8、64位屏幕,目前碰过最好的版本

目前最好的一般版本,支持代理,3389,更新,端口映射等等各种,功能最强大的一个版本,bin文件。

IOCP_dll 移植了Gh0st中的IOCP完成端口服务端

移植了开源远程控制软件 GH0ST3.6中的IOCP模型 封装为DLL的形式,分为客户端和服务端。 编译环境WIN7+VS2010

RAGFlow源码解析-2、从源码构架ragflow v0.25.0镜像

本文详细记录了从零开始构建自定义RAGFlow镜像lt/ragflow:0.25.0的全过程。首先介绍了环境准备,包括检查Node.js、Docker版本和项目结构。然后详细说明了构建步骤:编译前端、创建自定义Dockerfile、构建镜像和验证。接着讲解了docker-compose配置修改要点,包括网络定义、MySQL依赖处理等。最后总结了部署过程中遇到的五个关键问题及解决方案,包括networks未定义、MySQL服务依赖、tiktoken文件缺失、数据库配置错误和端口映射问题。通过完整的操作流程和问

liutao841204的专栏 364

Pytorch学习笔记(III)——提取特征

目录一、引言二、具体步骤1、参数模型2、网络结构3、参数载入4、特征提取器5、读取图片三、完整代码 一、引言   深度学习在许多任务中主要充当着特征学习的作用,而学习完的特征才是后续应用的一个关键。本文将主要介绍,如何提取任意目标层的特征图。   本文以输入数据为图片为例。 二、具体步骤 1、参数模型 博主使用了ResNet50训练了一个人脸识别的网络   训练完成的深度学习模型,我们会保存一...

lockonlxf的博客 2643

STM32 烧录报错Invalid ROM Table

STM32 烧录报错Invalid ROM Table

热爱科技,物联,程序开发等 1731

保姆级教程:用Vue3+Element Plus快速搭建Flowable流程定义管理后台界面

本文提供了一份详细的Vue3+Element Plus教程,指导开发者快速搭建Flowable流程定义管理后台界面。从项目初始化、核心页面设计到响应式数据处理,全面覆盖前端开发关键步骤,帮助提升企业级应用开发效率。

weixin_42662293的博客 475

ReAct 智能体 Agent:架构解析与实践拓展

ReAct 智能体 Agent 凭借其推理与行动协同的独特架构,在众多人工智能应用场景中展现出巨大的潜力。从智能办公到教育辅导,从智能家居到工业物联网,ReAct 智能体通过精准推理和高效行动,为用户提供了更加智能、便捷的服务体验。然而,在实际应用过程中,仍面临工具调用安全、模型持续学习、多智能体协作管理以及性能优化等多方面的挑战。通过合理的策略和技术创新,如强化工具审核机制、构建持续学习框架、设计高效协作协议和采用性能优化手段,我们有望逐步克服这些挑战,进一步提升 ReAct 智能体的性能和可靠性。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1686

【Autoware】Autoware.universe安装过程与问题记录

Autoware.universe安装过程与问题记录

DevFrank的博客 2739

uniapp [全端兼容] - 实现大文件上传分片/切片+本地选择文件上传超大文件,大文件切片上传+断点续传+上传进度条+失败自动重传,支持单个/批量上传图片、视频、文档各种文件(App、小程序、H5

uniapp 分片 断点续传 大文件上传。uniapp大文件切片上传,uniapp实现大文件上传 分片上传 进度条,分片上传附件,实现大文件上传,实现分片大文件上传,Uniapp实现大文件上传 分片上传 进度条,uniapp文件分片上传,uniapp如何上传很大的文件,在选择文件后,按指定大小将文件切割成独立的文件片,并逐片上传,uniapp 微信小程序上传大文件如何切片,uniapp APP实现大文件分片上传、断点续传、秒传,解决大文件上传问题,大文件上传如何做断点续传,uniapp上传视频,Uniapp

🏆 前端领域优质创作者 1万+

C++面向对象编程-继承与派生练习题

2、共同派生类 3、人员类Person的派生(虚基类的使用)

编程小鹏的博客 1191

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: IOCP 系列函数讲解
下一篇: MFC不能多线程操作控件的原因
xianjian_x
博客等级 码龄14年 231粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值