CSS实验报告:关键变量解析与控制流程

需积分: 9 2 下载量 131 浏览量 更新于2024-09-12 收藏 33KB DOCX 举报
在CSS slp lab5的实验报告中,作者分享了关于缓冲区攻击实践的理解和解决方法。实验主要涉及两个部分,Practice1和Practice2,都是针对内存安全问题的示例。 在Practice1中,作者探讨了如何利用越界访问(Buffer Overflow)来执行恶意操作。首先,一个名为"secretmessage"的示例展示了密文传输,其中包含加密密钥(key1=3, key2=777, key3=-1, key4=45)。通过越界操作,攻击者利用变量`dummy`的地址漏洞,过程_keys12将dummy的值从1修改为777,进而影响了`start`和`stride`变量(start=9, stride=3)。这里的关键是理解key1决定了越界地址,而key2决定了目标地址的内容。通过调试和分析,攻击者发现`key1`的地址偏移12位,因此确定`key1`的值为3,同时`key2`被设置为修改后的dummy值777。 在Practice2中,重点转向了控制流劫持(Control Flow Hijacking)。函数`swap1`的汇编代码被注释以揭示关键点。函数接收两个整数作为参数并交换它们,但当处理恶意输入时,例如在`process_keys34`中,攻击者通过精心构造的参数,修改了函数的返回地址。这样,程序跳过了`extract_message1`调用,直接进入`extract_message2`,实现了间接的控制流操纵。通过分析,攻击者利用了返回地址与参数地址的关系(对int*类型而言,返回地址位于参数地址之后一个整型大小的位置),计算出`key3`的值为-1,而`key4`的值为导致两次函数调用返回值差为45的量,即45。 这个实验报告不仅演示了如何利用缓冲区溢出实施攻击,还展示了如何通过逆向工程和调试技巧来分析和防御此类攻击。学习者可以从中学到内存安全编程的重要性,以及如何通过理解和利用程序的内存布局来保护软件免受此类攻击。此外,这份报告还提供了深入剖析汇编语言的视角,这对于理解底层编程和漏洞利用机制至关重要。