由于工作需要,我重新捡起了安全工程方面的知识,并一直在学习银狐远控的源码。在这个过程中,也接触了一些对安全工程感兴趣的小伙伴。本文不介绍具体的技术细节,而是想和大家聊聊,学习这类项目时,应该掌握怎样的方法。
特别申明:
- 本文介绍的内容仅做技术上的交流,请勿使用本文介绍的技术做其他用途,违者与本文无关。
- 作者不提供任何支持免杀版本的银狐源码,不做任何黑产,有此需求的读者请勿联系作者。

银狐这套源码虽然代码风格不尽如人意,但总体的设计和架构思路还是很有参考价值的,是一份不错的学习材料。
在与部分小伙伴交流技术时,我发现一个现象:很多同学在学习安全工程时,容易沉迷于各种现成的工具和脚本,而忽略了底层技术原理的钻研。
举个例子,有小伙伴看到某平台上一个关于绕过 Windows UAC 的视频,感到非常兴奋并拿来分享。但我一看,那其实是应用了非常古老的技术。如果你对 Windows UAC 的原理和机制有基本的了解,就不会盲目追捧这类内容。试想,如果通过简单的几步操作,软件就能轻易提升到管理员权限,那 Windows 上的恶意软件岂不是可以为所欲为?微软在安全方面的设计也不至于如此“拉垮”。
我认为,从事 Windows 安全工程,除了学习 Windbg、IDA、x64dbg/x86dbg、Cobalt Strike 等必要的工具外,至少还应掌握以下几项基本功,否则很容易停留在“调库侠”或“脚本小子”的阶段:
- 汇编语言
- Windows 系统原理,需要熟悉 Windows 常用的 API,包括部分 Native API
- Windows 内核或驱动开发基础
- 网络编程
然而,研究银狐这套源码,不仅需要上述安全工程方面的知识,还需要正统的软件开发技能,例如 Windows C/C++ 编程、多线程编程等等。当然,你也可以通过逆向学习这套源码,来巩固这些开发知识。
此前,看雪学院招募小伙伴翻译了《Windows Shellcode Mastery》一书,这是一本教授如何编写高级 Shellcode 的学习资料。我一边学习一边参与了翻译,并将译文放在了 cppguide.cn 上,方便更多的小伙伴学习。
https://cppguide.cn/pages/windows-shellcode-advanced-practice/
(若链接无法直接点击,请复制至浏览器打开)

该教程的目录结构如下,涵盖了从基础概念到实战应用的完整知识体系:
1 shellcodisation在病毒学中的应用
- 1.1 背景定义
- 1.2 恶意代码的选定目标
- 1.2.1 避开基于特征码识别的反病毒软件检测
- 1.2.2 在受感染主机上留下尽可能少的痕迹
- 1.2.3 嵌入合法程序以创建特洛伊木马
- 1.2.4 拦截使用受感染计算机的用户的私人数据
- 1.2.5 加密自身以防止人工分析
- 1.3 基于可执行文件的实现
- 1.3.1 实现多态性
- 1.3.2 仅在内存中执行
- 1.3.3 感染其他可执行文件
- 1.3.4 执行代码注入
- 1.3.5 实现真正的加密
- 1.3.6 总结
- 1.4 基于shellcode的实现
- 1.4.1 实现多态性
- 1.4.2 仅在内存中执行
- 1.4.3 感染其他可执行文件
- 1.4.4 执行代码注入
- 1.4.5 实现真正的加密
- 1.4.6 总结
2 编写shellcode
- 2.1 编译生成的二进制数据解析
- 2.2 shellcode生成原理
- 2.2.1 第一种方法:汇编代码修补
- 2.2.2 第二种方法:使用栈
- 2.2.3 第三种方法:使用全局数据
3 WiShMaster:shellcodisation过程
- 3.1 工具介绍
- 3.2 开发进展
- 3.2.1 WiShMaster 版本1
- 3.2.2 WiShMaster 版本2
- 3.3 shellcodisation过程
- 3.3.1 概述
- 3.3.2 “分析”步骤说明
- 3.3.3 “获取全局变量大小”步骤说明
- 3.3.4 “生成”步骤说明
- 3.3.5 “自定义”步骤说明
- 3.3.6 “集成”步骤说明
- 3.3.7 WiShMaster中shellcodisation的实现
- 3.3.8 shellcode初始化
4 使用WiShMaster开发应用程序
- 4.1 WiShMaster的目标
- 4.2 WiShMaster版本2中应用程序的结构
- 4.2.1 应用程序结构概述
- 4.2.2 导出表和导入表
- 4.2.3 入口点
- 4.3 标准模块
- 4.3.1 “日志”模块
- 4.3.2 “initsh”模块
- 4.3.3 “加载器”模块
- 4.4 shellcode加密
- 4.4.1 32位密钥的异或(XOR)加密
- 4.4.2 256位密钥的高级加密标准-密码分组链接模式(AES-CBC)加密
- 4.4.3 使用共享密钥
- 4.5 开发反向shell
- 4.5.1 程序结构概述
- 4.5.2 生成反向shell
- 4.6 实现USB攻击以执行反向shell
5 未来工作
- 5.1 pycparser工具
- 5.2 GCC编译器的fPIC选项
- 5.3 趣味使用编译指令
6 结论
总结来说,学习银狐远控源码或类似项目,不应只停留在表面功能的使用和模仿。深入理解其背后的 Windows 系统机制、编程原理以及安全概念,才能真正提升自己的技术实力,从“会用工具”进阶到“理解并创造工具”。希望这份关于学习方法的探讨,能对正在安全工程道路上探索的你有所启发。也欢迎大家在专业的开发者社区交流更多技术心得。
|