1、创建代码注入的一个最重要方面是维护一个足以用于检查和调试进程执行的可用工具链。请下载并安装Process Hacker和Process Monitor工具,然后使用Process Hacker定位Kernel32和LoadLibrary的内存地址,同时找到进程句柄,查看完整性级别以及固有特权,最后将你的代码注入到同一个目标进程中并定位该线程。
首先需下载安装 Process Hacker 和 Process Monitor 工具。 接着使用 Process Hacker 定位相关内存地址、进程句柄等信息。 最后将代码注入目标进程并定位线程。
2、你可以将进程注入示例进行扩展,使其不再那么简单。例如,不通过磁盘文件路径加载有效负载,而是使用MsfVenom或Cobalt Strike生成shellcode并直接加载到进程内存中。这将需要你修改VirtualAllocEx和LoadLibrary。
该描述指出了扩展进程注入示例的一种方式,即不依赖磁盘文件路径加载有效负载,而是借助 MsfVenom 或 Cobalt Strike 生成 shellcode 并直接加载进进程内存,同时需要对
和
VirtualAllocEx
进行修改。
LoadLibrary
3、简述Frida项目的作用、使用场景以及使用它的相关操作和注意事项。
可以使用 Frida 项目将谷歌 Chrome V8 JavaScript 引擎注入受害进程。 Frida 受移动安全从业者和开发者欢迎,具有以下用途: 运行时分析 进程内调试 插桩 Frida 也可在 Windows 等操作系统上使用。 需创建 Go 代码将 Frida 注入受害进程并运行 JavaScript。 要熟悉其工作方式需要进行研究,但值得投入。
4、获取各种 Windows 二进制文件,使用十六进制编辑器和调试器来探索各种偏移值。确定不同二进制文件的差异,例如它们的节数量。使用一个解析器来探索并验证手动观察结果。
该内容是关于 PE 文件数据结构学习的拓展练习,旨在通过获取不同 Windows 二进制文件,利用十六进制编辑器和调试器探索偏移值、对比二进制文件差异,再用解析器验证手动观察,以加深对 PE 文件数据结构的理解和运用。
5、在进行异或(XOR)解码时,XorDecode() 函数会生成一个解码后的块段,但不更新循环冗余校验(CRC)校验和,如何解决这个问题?
可在调用
函数完成解码后,重新计算并更新 CRC 校验和。例如,有代码
XorDecode()
,这部分代码就是用来重新计算并更新解码后块段的 CRC 校验和。
m.Chk.CRC = m.createChunkCRC()
6、创建一个动态链接库(DLL)并将其全部内容加载到内存中。使用进程监视器设置路径过滤器、进程过滤器或两者同时设置,并观察系统 DLL 的加载顺序。是什么阻止了 DLL 加载顺序劫持?
阻止因素可能有:
系统采用安全的搜索路径策略,优先从受信任的系统目录加载 DLL; 数字签名验证,确保加载的 DLL 是合法且未被篡改的; 应用程序清单文件明确指定 DLL 的加载位置和版本; 操作系统的访问控制机制限制恶意程序对关键 DLL 文件的修改和替换等。
7、在现有的PE文件中添加一个新的节以包含新的shellcode。更新整个节,使其包含适当的节数量、入口点以及原始和虚拟值。再次执行此操作,但这次不添加新的节,而是使用现有的节并创建一个代码洞穴。
可按以下大致思路操作:
添加新节时: 使用 Go PE 包加载 PE 文件 更新节表中的节数量 分配新节的空间并写入 shellcode
更新入口点、原始和虚拟值
使用现有节创建代码洞穴时:
搜索现有节中连续的
或
0x00
值作为代码洞穴 将 shellcode 写入洞穴 更新相关值
0xCC
8、有一个话题我们未讨论,即如何处理用常见打包工具(如UPX)或更冷门打包工具进行代码打包的PE文件。找一个已打包的二进制文件,确定它是如何打包的以及使用了什么打包工具,然后研究合适的解包代码的技术。
通用步骤解答
寻找已打包二进制文件 :可在一些恶意软件样本库、开源软件项目中寻找被打包的PE文件。
确定打包方式和工具 :
– 文件头信息 :部分打包工具会在文件头留下特定标识,可借助十六进制编辑器查看文件头字节,与常见打包工具特征比对。
– 工具检测 :使用专门工具,如 PEiD、Detect It Easy(DIE),它们能检测文件是否被打包及所用工具。
研究解包技术 :
– 对于常见打包工具(如 UPX),可使用其官方解包命令,如:
upx -d packed_file.exe
– 对于冷门或自定义打包工具,需进行逆向工程,分析打包算法和逻辑,编写相应解包代码。
9、WriteData() 函数便于注入任意块段。如果要覆盖现有的辅助块段,需要对代码进行哪些更改?
利用
函数定位到要覆盖的现有辅助块段起始位置; 使用字节移位操作来确定块段长度; 将新的块段数据写入定位好的位置以覆盖原有数据。
Seek()
10、这有一个更具挑战性的问题:尝试通过将有效负载(PNG DATA字节块)分散到各个辅助块段中来注入它。你可以一次注入一个字节,也可以按多个字节分组注入,发挥你的创造力。另外,创建一个解码器,它能读取有效负载的确切字节偏移位置,以便更轻松地提取有效负载。
注入有效负载时,先分析 PNG 文件辅助块段结构,可借助工具查看,再将有效负载按单个字节或字节组分散到辅助块段;
创建解码器时,记录注入时有效负载各部分的字节偏移位置,编写代码根据这些位置读取并提取有效负载。
11、本章解释了如何使用异或(XOR)作为一种保密技术——一种混淆植入有效负载的方法。尝试实现高级加密标准(AES)加密来混淆植入有效负载。观察该解决方案对新图像有何影响。它是否会导致图像整体大小增加?如果是,增加了多少?
实现AES加密,然后通过对比加密前后图像大小来确定是否增加及增加量。
12、如何解决向一种新图像格式读写数据的挑战?
以下是将给定文本内容调整为 Markdown 格式的结果:
可以按照以下步骤进行:
深入研究新图像格式的规范
– 了解其文件结构
– 掌握字节组织方式等关键细节
借鉴已有图像格式处理经验
– 使用合适的数据类型存储关键信息
– 利用循环处理重复结构
针对不同格式特点,使用Go语言相关功能
– 灵活运用字节处理
– 使用二进制读写包和函数
应对特殊情况和复杂结构
– 分析新格式可能存在的异常情况
– 设计算法和逻辑进行处理