2. 实验:bomb 2.1 实验环境 2.2 实验介绍 2.3 炸弹1 2.4 炸弹2 2.5 炸弹3 3. 总结 前言 这一章主要介绍了x86架构下汇编指令的相关内容,最好是需要一些汇编的基础才能上手比较快,书上花了100页+来介绍这些内容~。lab是“拆除炸弹”,使用gdb调试阅读程序的汇编代码,进而“拆除”出程序中的“炸弹”。 1. 碎...
首先执行命令objdump -d bomb > bomb.txt得到反汇编代码。 Phase1 考察点:字符串的传递方式 查看bomb.txt文件的反汇编代码,如下所示,首先栈顶指针向下移动了8个字节,在64位机器下就是一格,然后将0x402400传递给了esi寄存器(保存函数参数的寄存器),在0x400ee9处调用了string_not_equal函数,调用返回后如果eax寄存...
and so they will all blow up in a* spectaculary fiendish explosion. -- Dr. Evil*/FILE*infile;intmain(intargc,char*argv[]){char*input;/* Note to self: remember to port this bomb to Windows
argv[1], 0x80uLL);9byte_4045FF =0;10strncpy(userpwd, argv[2], 0x80uLL);11byte_40467F =0;12((void(*)(void))bomb_initialize)();13__printf_chk(1LL,"%s:","pupil");14readNextLine
本次实验中的bomb文件中共有7个炸弹问题(6个显式的和1个隐藏的),每条问题只有输入正确的答案才能进入下一题,否则则会触发爆炸。通过阅读bomb文件的汇编代码理解各个问题的运作方式,推出正确的输入答案。隐藏的问题需要通过gdb直接调用解决。 我的编译环境:Ubuntu16.04,gcc 5.4.0。
使用gdb bomb开始调试程序,首先在explode_bomb、phase_1函数处设置断点。 输入的字符串为hello! 观察以%rdi为地址的字符串验证了之前的假设。 %rdi处的字符串 所以经过分析,phase_1只是简单地把输入的字符串与0x402400处的字符串相比较,如果相等则拆弹成功。
Bomb Lab 首先拿到代码我们先看 README 文件,好吧,什么都没有,我们继续看其他文件。 发现bomb.c 文件,但是没有头文件,所以不能进行运行和编译。但可以看出该程序要求从命令行或者文件以“行”为单位读入字符串,每行字符串对应一个phase的输入。如果phase执行完毕,会调用phase_defused 函数表明该 phase 成功搞定。
Bomb是一个二进制炸弹,拆除他需要分别输入六条命令,一旦输入错误就会爆炸。在bomb.c文件中可以看到有6个phase,每个phase的输入是一条字符串,所以关键就是通过分析phase的内容来判断我们应该输入的字符串是什么。 理论上通过阅读汇编代码就可以找到答案,前3题或许可以,后边的题目就有点难度了。熟练使用gdb也是这个lab很...
下载bomblab压缩包并输入 tar –xvf bomb.tar 进行解压缩,进入该目录所有文件如下所示: 在终端输入 sudo apt-get install gdb 安装调试器。基本用法参考下图: 实验过程阶段: “Binary bombs”是一个可在Linux系统上运行的C程序,它由6个不同的阶段(phase1~phase6)组成。在每个阶段,程序会要求输入一个特定的字符...
实验二—BombLab 实验材料 一个能够运行的Linux或者Unix系统 官网的实习手册 实验规则 实验共有6个关卡,分别是phase_1到phase_6,对于每一个关卡,...