Shellcode分段执行技术详解

需积分: 11 5 下载量 112 浏览量 更新于2024-09-25 收藏 398KB PDF 举报
"Shellcode是一种在程序漏洞利用中常见的恶意代码,用于在目标程序中执行攻击者指定的行为。分段执行技术是Shellcode的一种高级应用,尤其在内存空间有限的情况下,通过将Shellcode拆分成多个小片段(通常称为'eggs'),在内存中寻找这些片段并重组执行。这种技术由荷兰黑客SkyLined提出,他在微软工作期间是Alpha2/Alpha3这类字母数字型Shellcode编码器的开发者,后来转投谷歌。 Shellcode分段执行的核心在于设计每个代码段的结构。每个段包含四部分:字节大小(size)、索引值(index)、标记(marker)和数据内容(data)。标记是一个独特的3字节序列,用于egghunter代码在内存中识别和组合这些片段。egghunter首先遍历用户地址空间,查找标记的代码段,然后按照正确的顺序和位置重建原始的Shellcode。 在执行过程中,egghunter还会设置Structured Exception Handler (SEH)以应对可能出现的访问违例。如果发生访问违例,SEH会修改内存页地址以尝试跳过不可读取的部分,避免搜索过程中的中断。当搜索到的内存地址超过特定阈值(例如0x7FFFFFFF)时,表示已遍历完所有可能的内存区域,此时egghunter会终止搜索并执行重构后的Shellcode。 为了防止因异常处理递归导致栈空间耗尽,egghunter还包括一个`reset_stack`函数,该函数重置栈空间,恢复SEH链表,并继续搜索。具体实现包括清零EAX作为计数器,获取当前SEH链表的指针,遍历SEH结构,直到找到最后一个SEH或者处理完所有异常。 这个技术的使用增加了Shellcode的灵活性和适应性,使得攻击者能在各种复杂环境中有效地实施攻击。然而,这也对安全防御提出了新的挑战,需要更精细的内存管理和更强的异常处理机制来防范此类攻击。"