分为七个阶段,分别是阶段0中的字符串表示,阶段1中的浮点数表示,阶段2中的循环控制结构,阶段3中的switch条件分支控制结构,阶段4中的过程调用和栈帧结构组成,阶段5中的数组,指针,阶段6主要是结构,链表和指针以及最后的隐藏阶段。在该隐藏阶段中,只有在阶段4的拆解字符串后再附加一特定字符后才会出现。
在做实验的开始阶段,需要首席按下载数据包,下载完成后将压缩包进行解压缩,压缩完成后的到如下的所示的文件:
阶段0:字符串的比较的基本过程和方法:
第一步:对二进制炸弹进行反汇编,并将反汇编文件重定向保存在相应的文件中。
使用该命令就可以将bomb的源程序文件进行反汇编至bomb.s文件。
第二步:对本阶段函数的汇编指令代码进行分析。
使用less bomb.s进行查看文件内容的操作,然后使用/phase_0的命令将其定位至phase_0函数的位置,通过对这段代码的分析,0x804a198的位置就是目标字符串,也就是拆除炸弹的解决方式,然后使用GDB来对bomb程序进行调试。
第三步:定位并且获得内置字符串的值,并相应构造输入字符串
使用gdb bomb,然后进入调试程序的入口,再使用break的命令将该程序设置断电,break *0x8049480,将断点设置在call指令执行的位置,然后使用run指令,并将,使用x/40c 0x804a198来查看字符串的各个字符的数值,要得到该地址相应的字符串,只需要使用x/1s 0x804a198的命令来对该字符串进行查看即可。如下图中所示:
将得到的字符串在启动bomb程序后进行输入操作,即可得出如下信息,即意味着二进制炸弹的第一阶段的拆除成功了。
阶段1:浮点数表示
第一步:对本阶段的反汇编结果进行总体分析
主要利用阶段0反汇编完成之后的bomb.s文件进行实验操作。
第二步:找到浮点数常量的值,获得其IEEE-754表示
根据对bomb.s中文件数据进行分析就可以得出系统所给的匹配数据为如下所示的机器数:
通过分析就可以得出阶段一的数据为-167772160和1102728908,因此就可以得出相应的数据,并将这两个数据输入到Linux的二进制炸弹的源程序中就可以解密,如下所示:
阶段二:循环控制结构
根据对已经反汇编成功的二进制炸弹文件就可以得出如下的汇编语言如下图中所示:
根据如上图中所框出来的汇编语言就可以得出在该过程中需要输入8个整数,其中每两个整数之间利用一个逗号和一个tab键的距离将两个整数分隔开的,打开read_n_number的函数,得到如下的汇编语言,然后使用GDB命令进行调试,如下所示:
通过对如下所示的数据进行分析即可得出,将R[ebp]-2c的数存放到eax寄存器中,然后使用EAX寄存器中的数据与0x8a进行比较,如果成功则进入到8049545的函数体体中进行循环操作,如果不相同,系统就会跳转至爆炸的函数体,通过分析就可以得出系统要求输入的第一个数为0x8a,由于占32位机器数,故可以得知该数的高位为0,即该数为正数,10001010,故可以得出该数的值为138。
假设第一个数输入正确,接下来就需要前往8049545的地址的函数,在该函数体中首先就是将1赋值给了R[ebp]-c的寄存器空间中,然后就将函数体跳转到了8049584,在8049584中主要起到的作用就是将i值判断是否是小于7的,如果小于7就会执行如下的一系列的函数循环体:
循环体:
故根据对循环体的分析就可以得出第一个数是138,假设该函数体的数组名为Switch,故根具函数体中的数据显示就可以分析出该函数体所执行的操作就是Switch[i]=Switch[i-1]-2*i+1,且一直Switch[0]=138,故接下来的7个数依次就是:137, 134, 129, 122, 113, 102, 89;将分析出来的数据写入bomb源程序的第二阶段中进行验证操作即可测试出这些数据是合法的:
阶段三:switch条件分支控制结构
首先还是对bomb源程序反汇编的结果文件bomb.s进行分析,根据分析就可以得出在该过程中同样需要输入两个整数,两个整数的存放地址分别是在ebp-18以及ebp-14。其中第一个整数的地址是ebp-14,第二个整数的地址是在ebp-18。
得出上述结果之后,根据如下所示的将ebp-0x14的值送往EAX寄存器中,将EAX寄存器中的值减去7就然后与9进行无符号的整数比较,如果ja就会跳转到bomb函数,就会引起爆炸,因此就得出第一个数的值是大于等于7且小于等于16。
根据如上图中所圈出来的语句就是一个switch结构,使用GDB调试工具对第一个数进行数据的依次检测,因此可以检测出第一个数为16,此分支将0x3cd放到了ebp-0xc,即973,最后转到8049652,此时就是将ebp-0x8与ebp-0xc比较,相等就能拆除炸弹,而ebp-0x8即为输入的第二个整数,因此此时输入的第二个整数应为973。
将分析得出的两个数16和973输入到第四阶段的实验中就可得出如下所示的已经拆解完成该过程的炸弹了。
本人实力有限,只能制作四个阶段,后续阶段仍然在探索,敬请期待