Desktop development with C++ 工作负载另外(可选),为了获得更完整的逆向体验,请配置符号:
setx _NT_SYMBOL_PATH c:\Symbols;srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
mkdir \symbols
在 Visual Studio 中打开 PMD.sln。
选择 setup 项目,并确保你可以:
a. 编译项目
b. 在 DebugView++ 中查看调试打印输出。
更新 template 项目的编译器和链接器标志,以操纵 IAT 条目和其他 PE 属性。
a. 熟悉动态 API 解析和 MSDN 文档。
b. 还有其他突出的属性吗?如果你对二进制文件运行 Strings.exe,有哪些字符串比较显眼?
c. 你能移除/更新它们吗?
使用你选择的任何工具来完成练习(例如 dumpbin/PE Bear)。在 scripts\props.py 下提供了一个围绕 pefile 的封装(确保安装依赖)。
从 VXUG 下载一些恶意软件样本
a. 良性可执行文件和恶意可执行文件之间的主要区别是什么?
b. 我们的二进制文件与良性可执行文件之间的主要区别是什么?
当前使用的 API 哈希算法是 fnv1a。
solution 项目,并使用 API 哈希框架调用 MessageBoxA。下载 Cisco Webex (https://www.webex.com/downloads.html)
找到 CiscoCollabHost,并查看加载了哪些 DLL
在 Ghidra 中打开 CiscoCollabHost,找出通过侧加载实现代码执行的不同方式
编辑 dll_template 以侧加载目标二进制文件。验证你可以在 DebugView++ 中看到调试字符串。
更新 dll_template.dll 的 LastWriteTime 和 CreationTime,使其与目标 DLL 匹配。
编译并运行 utility 项目。
a. 另外,考虑在你的主机系统上运行它。
将识别出的 DLL 复制到 x64/{Debug,Release} 目录,并更新加载器代码。
更新 execute_sc,使用 API 哈希框架中的另一个函数来执行你的 shellcode。
注册一个云存储提供商(例如 AWS/CloudFlare)
打包你的 payload 并上传
a. 另外,研究限制/审计下载访问的方法
为你的虚拟机创建快照
恢复到基础虚拟机,并演练完整的“投递”场景
.github\workflows\build.yml,按你的需要添加可以节省时间的额外预处理/后处理。以下是一些想法:
props.py 并验证/包含输出LastWriteTime 和 CreationTime 以匹配目标