著名的bomb拆炸弹实验:
程序运行在linux环境中。程序运行中有6个关卡(6个phase),每个phase需要用户在终端上输入特定的字符或者数字才能通关,否则会引爆炸弹!那么如何才能知道输入什么内容呢?这需要你使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数。然后分析汇编代码,找到在每个phase程序段中,引导程序跳转到“explode_bomb”程序段的地方,并分析其成功跳转的条件,以此为突破口寻找应该在命令行输入何种字符通关。
实验过程很艰辛,三言两语道不尽呐!好吧,那就一关一关来拆。看到两千行汇编代码头都晕啊!!!
首先,bomb.c中的c代码好抽象,根本得不到什么信息,只看到有六个phase的函数。根据提示,要将抽象的c代码反汇编,我先打开了我的Ubuntu,我把整个LAB3文件放在fsj文件下,进入终端,输入objdump -d bomb > fsj.txt将汇编代码输出到与bomb同目录的一个自动生成的叫fsj.txt的文件中。这样就可以看到fsj.txt中有约两千行汇编代码,总的浏览一下,大概的意思是将一个一个的函数分开,明显可以看到六个phase函数。
Bomb第一弹正式开始。分析一下代码吧!
08048f61 <phase_1>://We have to stand with our North Korean allies.
8048f61: 55 push %ebp</