利用gdb和objdump拆除BinaryBombs:C语言实战与调试技巧

需积分: 0 1 下载量 158 浏览量 更新于2024-06-30 收藏 6.78MB DOCX 举报
在CS1806课程的实验报告中,学生杨雨鑫针对"BinaryBombs"和缓冲区溢出攻击进行了深入探究。实验2着重于提升对程序机器级表示、汇编语言以及调试和逆向工程的理解。"BinaryBombs"是一个包含六个阶段的C程序,每个阶段都涉及不同的编程概念,如: 1. 阶段1:字符串比较 - 学生需通过比较用户输入的字符串与预设值,理解基本的条件判断和数据类型处理。 2. 阶段2:循环 - 进一步考察控制流,通过循环结构的实现分析程序逻辑。 3. 阶段3:条件/分支(含switch语句) - 学习如何解析和利用switch语句,处理多种可能的路径。 4. 阶段4:递归调用和栈 - 探索递归函数的执行过程和栈的使用,涉及到函数调用的深层次原理。 5. 阶段5:指针 - 学生通过实际操作指针,理解内存地址和指针在程序中的作用。 6. 阶段6:链表/指针/结构 - 结构化数据的处理,包括链表的操作和结构体的定义。 隐藏阶段的存在,要求学生在正确理解前四个阶段的基础上,解决额外的谜题以解锁。 实验3则关注于缓冲区溢出攻击,这是一种常见的安全漏洞,学生通过逐步升级的攻击级别(level0~level4),学习如何识别和防御这种攻击,包括smoke、fizz、bang、boom和nitro等不同级别的挑战。 在整个实验过程中,学生必须熟练运用gdb调试器和objdump工具进行反汇编,通过单步调试来理解每一段代码的行为,并根据调试结果推断出正确的输入字符串。这些技能对于理解程序执行的底层机制和安全防范至关重要。 实验报告展示了杨雨鑫对计算机系统基础理论的实际应用,不仅提升了编程技巧,也锻炼了逆向工程和安全分析的能力。通过这两个实验,学生深化了对C语言、操作系统和调试工具的理解,为未来的学习和工作打下了坚实的基础。

void CS5532_INITIAL(void) { uchar CS5532_i; EX1=0; //IE=0x00; CS5532_A0=0; CS5532_A1=0; CS5532_SDO=1; CS5532_SDI=0; CS5532_SCLK=0; CS5532_CS=0; CS5532_SDI=1; _nop_(); for(CS5532_i=0;CS5532_i<135;CS5532_i++) //sending the 16 bytes sync1 and 1 byte sync0 { CS5532_SCLK=1; _nop_(); CS5532_SCLK=0; _nop_(); } CS5532_SDI=0; _nop_(); CS5532_SCLK=1; _nop_(); CS5532_SCLK=0; _nop_(); CS5532_CS=1; CS5532_WRITE_ONE_BYTE(0x03); //reset the cs5532 namely set RS=1 CS5532_WRITE_ONE_BYTE(0x22); CS5532_WRITE_ONE_BYTE(0x40); CS5532_WRITE_ONE_BYTE(0x00); CS5532_WRITE_ONE_BYTE(0x00); DELAY_TIMES(0xAA); //delay about 20ms CS5532_WRITE_ONE_BYTE(0x0B); //read the RV bit and set RV=0 CS5532_READ_ONE_BYTE(); CS5532_READ_ONE_BYTE(); CS5532_READ_ONE_BYTE(); CS5532_READ_ONE_BYTE(); DELAY_TIMES(0xAA); //delay about 20ms CS5532_WRITE_ONE_BYTE(0x03); //set the cs5532 system configuration register CS5532_WRITE_ONE_BYTE(0x02); CS5532_WRITE_ONE_BYTE(0x40); CS5532_WRITE_ONE_BYTE(0x00); CS5532_WRITE_ONE_BYTE(0x00); DELAY_TIMES(0xAA); //delay about 20ms CS5532_WRITE_ONE_BYTE(0x05); //set the cs5532 channel setup register CS5532_WRITE_ONE_BYTE(0x32); CS5532_WRITE_ONE_BYTE(0x40); //0x00 for bipolar preforming CS5532_WRITE_ONE_BYTE(0x32); //speed 7.5sps CS5532_WRITE_ONE_BYTE(0x40); DELAY_TIMES(0xAA); //delay about 20ms CS5532_WRITE_ONE_BYTE(0xC0); //cs5532 performing successive conversion CS5532_CS=0; CS5532_SDO=1; DELAY_TIMES(0xFF); DELAY_TIMES(0xFF); //DELAY_TIMES(0xFF); //PX1=1; //set the external interrupt 1 highest prior IT1=1; //set the external interrupt 1 edge trigger mode EX1=1; EA=1; //IE=0x84; //external interrupt 1 turn on }

2023-07-13 上传