2 / 52 导论、环境与编译

第 2 课:源码整体结构导览

# 第 2 课:源码整体结构导览

免责声明:本专栏仅用于安全工程学习研究,禁止使用本专栏介绍的技术做其他用途,否则后果自负,与本号无关。

本课定位:建立源码全景图、模块角色和阅读路线。 本课不讲编译运行,不讲远控功能使用,不讲插件滥用步骤;只帮助读者分清目录、角色、依赖、风险类别和后续阅读顺序。

# 1. 为什么要先看整体结构

读这类远控源码,最常见的错误是一上来就钻进某个插件函数。这样很容易迷路,也容易把高风险实现误读成操作教程。

正确的顺序是先建立全景图:

  1. 哪个目录是主控端。
  2. 哪个目录是插件和上线模块。
  3. 哪些目录是第三方依赖。
  4. 哪些文件是编译和调试说明。
  5. 哪些模块属于高风险能力,需要只做防御分析。

源码整体结构看清楚后,后续阅读每个模块时才知道它在系统里扮演什么角色、数据从哪里来、结果到哪里去、企业应该在哪些位置做检测。

# 2. 本课学习目标与适用人群

学完本课后,读者应当能做到:

目标 说明
看懂根目录 能说明 README.md主控主插件thirdpartyliblibx64 的作用
区分角色 能区分主控端、上线模块、功能插件、第三方依赖和预编译库
建立阅读路线 知道应先读低风险结构,再读协议和加载链,最后读高风险插件
初步分类风险 能把插件目录按系统管理、隐私采集、网络代理、底层执行等类别归类
输出检测映射 能从目录结构推导主机、网络、内存、构建链的检测方向

适用人群:

人群 学习重点
企业安全人员 快速建立远控类源码能力清单和检测覆盖面
安全工程学习者 学会从目录结构进入大型 Windows C++ 项目
授权红蓝测试人员 在授权演练中理解能力链路,帮助验证检测和复盘
安全研发人员 对照高风险结构,设计合规远程运维工具的安全边界

# 3. 根目录总览

当前源码根目录可以先按六类对象理解。

# 目录位置:F:\githubrepo\winos4.0-gh0st
winos4.0-gh0st
├─ README.md        # 源码声明、编译步骤、调试差异说明
├─ 主控             # 主控端工程,核心入口是 Quick
├─ 主插件           # 上线模块、网络基础、功能插件、加载支撑
├─ thirdparty       # 第三方源码和依赖材料
├─ lib              # 预编译库,主要覆盖 32 位和部分通用库
├─ libx64           # 64 位预编译库
└─ 清理.bat         # 清理生成文件的辅助脚本
1
2
3
4
5
6
7
8
9

第 2 课图 1:源码根目录地图

这张图可以按阅读顺序看:先读 README.md,再分清 主控主插件,然后看 thirdpartyliblibx64 这些依赖来源。不要一开始就直接跳到 shellcode注入管理驱动插件 这类高风险模块。

# 4. README 透露的结构信息

README.md 虽然很短,但对理解工程结构很关键。

源码节选:

<!-- 源码位置:README.md:11-15 -->
> 说明:
>
> 主控只有x86 debug和release,没有x64;
>
> 被控有x64和x86 debug和release
<!-- 防御分析注释:主控和被控在平台支持上不完全一致,后续审计要分别看 x86、x64、Debug、Release。 -->
1
2
3
4
5
6
7

这说明主控端和被控端不是同一类工程。主控端主要是管理界面和控制入口;被控端相关模块需要同时考虑 32 位和 64 位。

源码节选:

<!-- 源码位置:README.md:41 -->
> 生产和调试版本区别在于,主控将插件传输给被控时,生产版本会使用主控传过来的插件shellcode数据,并执行,调试版本会从本地磁盘加载相关插件dll方便调试。
<!-- 防御分析注释:这句话指出了插件传输、shellcode 数据、动态执行、本地 DLL 调试加载等关键审计线索。 -->
1
2
3

安全工程上,这句话至少提示了三件事:

  1. 插件不是普通静态链接能力,而是和传输、加载、执行链路有关。
  2. Debug 和 Release 的行为路径不同,检测和审计不能只看一个配置。
  3. shellcode、插件 DLL、本地磁盘加载和动态执行都需要作为后续重点。

# 5. 工程整体架构

从高层看,这套源码可以理解成五层:

层级 代表目录或模块 作用
主控界面层 主控\Quick 展示连接、菜单、功能窗口,发起管理操作
网络通信层 主控\Quick 中的网络类、主插件\HPSocket 负责 TCP/UDP 通信、连接收发和回调
上线会话层 主插件\上线模块主插件\登录模块 负责连接初始化、会话识别、后续插件请求
插件能力层 主插件 下各功能目录 实现系统管理、文件、注册表、屏幕、音频、终端等能力
依赖支撑层 thirdpartyliblibx64 提供网络、图像、音视频、压缩、加密等基础库

第 2 课图 2:工程整体架构

这张图不是精确调用栈,而是用于建立方向感:主控界面是入口,网络通信负责传输,上线模块负责连接与会话,插件加载把不同能力组织起来,功能插件再调用系统 API 或第三方库完成具体工作。

# 6. 主控目录初识

主控 目录中最重要的是 Quick.slnQuick 源码目录。

# 目录位置:主控
主控
├─ Quick.sln        # 主控端 Visual Studio 解决方案
├─ Quick            # 主控端主要源码目录
└─ 清理.bat         # 主控构建清理脚本
1
2
3
4
5

主控\Quick 里文件很多,新手不用一次读完,可以先按功能分组。

类别 代表文件 先看什么
程序入口与框架 Quick.cppQuick.hMainFrm.cppMainFrm.h 主窗口、菜单、消息响应的大致结构
资源与界面 Quick.rcres、各类 *Dlg.cpp 界面控件、菜单、弹窗和功能入口
连接管理 MachineDlg.cppLogView.cppPlugView.cpp 客户端列表、日志视图、插件视图
网络通信 HpTcpServer.cppHpUdpServer.cppISocketBase.cpp 收发数据、连接回调、网络事件
插件与构建相关 BuildDlg.cppDllToShellCode.cppMemoryModule.cpp 构建器、插件转换、内存加载相关风险点
功能窗口 FileManagerDlg.cppKeyBoardDlg.cppH264ScreenSpyDlg.cpp 功能入口和主控侧展示逻辑

防御阅读建议:主控端先看“界面入口如何触发网络命令”,不要先追到底层实现。等第 7 课讲主控界面布局时,再从菜单、控件 ID、消息映射反查处理函数。

# 7. 主插件目录初识

主插件 是后续专栏的重点。它下面有网络基础、上线会话、系统管理、隐私采集、底层高危能力等多类插件。

# 目录位置:主插件
主插件
├─ all.sln          # 主插件集合解决方案
├─ HPSocket         # 网络基础能力
├─ shellcode        # 动态代码加载和执行链路相关支撑
├─ 上线模块         # 被控端连接初始化和插件请求
├─ 登录模块         # 登录和会话初始化相关逻辑
├─ 系统管理         # 进程、服务、窗口、任务等系统管理能力
├─ 文件管理         # 文件浏览、传输和操作能力
├─ 查注册表         # 注册表读取和修改相关能力
├─ 启动管理         # 启动项、计划任务、服务等持久化相关位置
├─ 远程终端         # 命令执行和输出回传能力
├─ 键盘记录         # 高危输入采集能力,只做防御分析
├─ 高速屏幕/差异屏幕/后台屏幕/后台窗口/娱乐屏幕
├─ 视频查看/播放监听/语音监听
├─ 代理映射/压力测试
├─ 注入管理/驱动插件
└─ 解密数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

为了后续阅读更清楚,可以先把插件按风险和功能分类。

分类 目录 防御重点
网络基础类 HPSocket 连接生命周期、心跳、收发回调、异常断开
加载支撑类 shellcode 内存执行、可执行页、动态载荷、无文件执行线索
上线会话类 上线模块登录模块 配置提取、认证缺陷、会话可信边界
系统管理类 系统管理文件管理查注册表启动管理远程终端 文件、注册表、服务、命令执行、持久化审计
隐私采集类 键盘记录、屏幕类、音频类、视频查看解密数据 输入、屏幕、摄像头、麦克风、凭据和敏感数据保护
网络与底层高危类 代理映射压力测试注入管理驱动插件 内网穿透、异常流量、进程注入、驱动加载

这里不把每个插件展开讲。后续专栏会逐个模块做防御分析,但第 2 课只负责让读者先知道“有哪些类别、哪些风险、后续从哪里读”。

# 8. 第三方库与预编译库

thirdpartyliblibx64 是新手经常忽略的部分。实际上,依赖库决定了很多能力边界。

# 目录位置:thirdparty
thirdparty
├─ HP-Socket-dev             # 网络通信库
├─ libjpeg-turbo             # 图像压缩相关
├─ libyuv                    # 图像像素格式转换相关
├─ SDL-release-2.30.11       # 多媒体相关
├─ xvidcore-1.3.7            # 视频编码相关
├─ G729a                     # 音频编码相关
├─ Xtreme ToolkitPro v18.5.0 # 界面控件相关
├─ zlib131.zip               # 压缩库归档
└─ README.md                 # 依赖库说明入口
1
2
3
4
5
6
7
8
9
10
11

liblibx64 里放的是预编译库。审计时要重点看:

关注点 为什么重要
32 位和 64 位是否匹配 位数不匹配会导致链接或运行异常,也会影响检测规则
Debug 和 Release 是否混用 混用可能引入不同运行时库和行为差异
第三方库来源是否可追溯 供应链风险、版本漏洞和后门风险都要评估
是否存在重复库或过期库 老版本依赖可能带来已知漏洞
是否有本地改动 第三方库被改动后,需要单独审计

第 4 课会专门讲第三方库下载、编译和依赖管理。

# 9. 新手推荐阅读顺序

建议按下面顺序读,不要直接跳高危插件。

第 2 课图 3:源码阅读路线图

具体步骤:

  1. 读 README。 先看免责声明、编译说明、主控和被控的位数差异、生产和调试版本差异。

  2. 看根目录。 分清 主控主插件thirdpartyliblibx64

  3. 看主控界面。 从菜单、窗口、列表控件和功能按钮理解用户操作入口。

  4. 看网络协议。 理解主控和被控之间是如何传递命令和数据的。

  5. 看插件加载。 理解插件是如何被请求、传输、缓存、加载和调用的。

  6. 看插件分类。 先读系统管理、文件、注册表等较容易理解的模块,再读 shellcode、注入、驱动、键盘记录等高风险模块。

  7. 落到工程输出。 每读完一个模块,都要形成风险点、检测点、检查项和加固建议。

# 10. 从目录结构提取风险信号

目录名本身不能作为检测规则,但能帮助我们快速建立风险清单。

目录或能力 风险提示 企业应关注
远程终端 远程命令执行能力 父子进程、命令行、脚本日志、交互式 shell
文件管理 文件浏览和传输能力 敏感目录访问、批量读取、异常上传下载
查注册表启动管理 系统配置和持久化位置 Run 键、服务、计划任务、策略项变更
键盘记录 输入采集高危能力 输入钩子、敏感 API、异常后台进程
屏幕类插件 屏幕采集和远程查看 图形 API、持续高频图像流、隐私合规
音视频类插件 摄像头、麦克风、播放音频采集 设备访问、权限提示、隐私审计
代理映射 内网流量转发或穿透 异常长连接、端口映射、东西向流量
注入管理 进程注入风险 跨进程句柄、远程线程、异常内存权限
驱动插件 内核级能力 驱动加载、签名策略、内核模块审计
shellcode 动态执行链路 RWX 内存、非模块执行、无文件执行
解密数据 敏感数据访问 凭据、浏览器数据、密钥材料、DLP

读目录时就要开始做“能力到检测”的转换。不要只记功能名,要把它翻译成可观测行为。

# 11. 企业检测点

第 2 课只做结构层检测点,不写具体产品规则。

检测面 结构来源 检测思路
网络连接 HPSocket、上线模块、代理映射 关注长连接、心跳、异常端口、内网转发
插件加载 主插件shellcodeMemoryModule 类文件 关注动态加载、内存执行、未知模块、版本缓存
文件行为 文件管理、构建器、插件缓存 关注敏感目录访问、二进制写入、异常 DLL
注册表和启动项 查注册表、启动管理、上线配置 关注自启动、策略项、服务项和配置落点
命令执行 远程终端、系统管理 关注 cmd、PowerShell、脚本解释器和父子进程
隐私访问 键盘、屏幕、音频、视频、解密数据 关注输入、屏幕、摄像头、麦克风、凭据访问
内存风险 shellcode、注入管理、驱动插件 关注 RWX 内存、非模块执行、远程线程、驱动加载
构建链 README、.sln.vcxprojliblibx64 关注构建后事件、依赖来源、位数混用和产物写入

# 12. 常见误区

  1. 一上来就读高危插件。 这样容易看不懂调用链,也容易把防御学习变成危险操作笔记。应先看结构,再看数据流。

  2. 只看目录名,不看数据流。 目录名只能提示能力,真正的检测要看数据从哪里来、进入哪个模块、最终触发什么系统行为。

  3. 忽略 liblibx64 预编译库会影响链接、运行和供应链风险。32 位和 64 位库不能混看。

  4. 把 Debug 行为当成 Release 行为。 README 已说明生产和调试版本加载路径不同,安全审计必须分别确认。

  5. 只看主插件,不看主控。 主控端决定功能入口、命令分发和管理逻辑。没有主控视角,就很难理解插件为什么被调用。

# 13. 本课小结

第 2 课的重点是建立全景图。当前源码可以先分成主控、主插件、第三方依赖、预编译库和构建说明五大块。主控负责界面和管理入口,主插件负责上线、网络、加载和具体功能,第三方库和预编译库提供底层支撑。后续专栏会从环境、编译、主控界面、网络协议、插件加载逐步进入每个模块。

从安全工程角度看,本课最重要的输出不是运行程序,而是目录资产表、架构角色图、插件风险矩阵和检测覆盖表。

# 14. 合法练习题

  1. 根据本课内容,画一张你自己的根目录结构图,标出 主控主插件thirdpartyliblibx64 的作用。
  2. 主插件 下的所有目录按“网络基础、上线会话、系统管理、隐私采集、底层高危、其他”重新分类。
  3. 从目录名出发,列出你认为最需要优先审计的 5 个高风险模块,并说明原因。
  4. 写一张检测映射表:每类插件能力对应哪些主机、网络、内存或构建链数据源。
  5. 阅读 README.md,总结主控、被控、x86、x64、Debug、Release 之间的差异,不需要编译运行。

安全工程知识交流加wx:easy_coder,黑灰产勿扰,企业单位合作请出示有效证件。

上次更新: 2026/07/14, 19:37:40

社区交流

讨论与留言

前往 GitHub Issues →

本留言区仅对应当前文章,欢迎补充观点、提出问题或帮助修正文中疏漏。 留言由 GitHub/Gitalk 提供,需要使用 GitHub 登录。

最近更新
第 1 课:专栏导论与安全边界
07-01
第 3 课:安装编译与调试环境
07-01
第 4 课:第三方库下载、编译与依赖管理
07-01
更多文章>