ApolloScreen是ApolloFish钓鱼演练平台配套的轻量级演示工具,功能为屏幕截图捕获一键上传至平台,全程遵循无害化设计,保障演练环境安全可控。客户端代码已开源,赋能安全从业者快速构建自定义演示能力。
✨ 开源开放:客户端源码全公开,支持二次开发与个性化定制,携手社区共建安全演练新生态。欢迎大家关注阿波罗系列项目!
- ✅ 全屏截图捕获 - 支持多显示器环境,捕获虚拟屏幕的所有内容
- ✅ PNG 编码 - 使用 GDI+ 将截图编码为 PNG 格式,存储在内存中
- ✅ 自动上传 - 通过 HTTP POST 请求将截图和系统信息上传到服务器
- ✅ 系统信息收集 - 自动获取并上传 IP 地址、用户名、主机名
- ✅ 高 DPI 支持 - 支持高分辨率显示器,解决 DPI 缩放导致的截图区域偏小问题
- ✅ 跨架构支持 - 支持 x86 和 x64 两种架构
-
主程序 (
ScreenToMemory.cpp)- C++ 编写的核心逻辑
- 使用 Windows API 进行屏幕捕获和网络通信
- 支持控制台输出和消息框提示
-
汇编模块 (
code_x86.asm/code_x64.asm)- 分别支持 x86 和 x64 架构
- 用于存储服务器 URL 和提示内容
- 通过函数导出提供给主程序调用
-
服务器端 (
server.py)- Flask 编写的简单接收服务器
- 接收 multipart/form-data 格式的数据
- 保存截图文件到本地
- 采用 C++ + 汇编语言的混合编程方式
- 使用汇编模块存储敏感信息(服务器 URL),增加逆向分析难度
- 不同架构使用对应的汇编文件,编译时自动选择
- GDI+ API: 用于屏幕捕获和 PNG 编码,无需第三方图像库
- WinHTTP API: 使用 Windows 原生 HTTP 库,避免依赖第三方网络库(如 libcurl)
- Shell Scaling API: 实现 Per-Monitor DPI Awareness,完美支持高 DPI 显示器
- 使用
IStream接口创建内存流 - 将 PNG 编码直接写入内存,避免临时文件
- 提高了执行效率和安全性
- 使用
SM_CXVIRTUALSCREEN和SM_CYVIRTUALSCREEN获取虚拟屏幕尺寸 - 支持跨越多个显示器的截图场景
- 完整的 UTF-8 到宽字符转换
- 支持中文字符的正确显示和处理
- 使用 multipart/form-data 格式上传文件
- 支持 HTTP 和 HTTPS 协议
- 设置合理的超时时间(30秒)
- Release 版本关闭缓冲区安全检查以提高性能
- 使用全程序优化(Whole Program Optimization)
- 优化代码大小(MinSpace)
-
性能优异
- 使用原生 Windows API,执行效率高
- 无需额外依赖库,减少运行时开销
- 内存流处理,避免磁盘 I/O
-
兼容性好
- 支持 Windows 10 及以上版本
- 完美支持高 DPI 显示器
- 支持 x86 和 x64 架构
-
安全性考虑
- 服务器 URL 存储在汇编模块中,增加逆向难度
- 不产生临时文件,降低泄露风险
- 使用 Windows 原生 API,减少第三方库的安全隐患
-
用户体验
- 自动获取系统信息
- 友好的中文提示信息
- 支持消息框和控制台双重输出
-
代码质量
- 规范的错误处理
- 资源释放完善(GDI+、WinHTTP 句柄等)
- UTF-8 编码支持良好
