6个关卡,难度随关卡升级而提升;
通过解读汇编代码来推断其对应的函数结构(推断过程不唯一),某些关卡答案不唯一;
尽力而为,能通几关就几关。
提示:
第一关(知识点:string,函数调用,栈)
第二关(知识点:循环语句,数组)
第三关(知识点: switch语句)
第四关(知识点:递归)
第五关(知识点:字串变换,ascii转换,寻址)
第六关(知识点:寻址)
(第1-5关,各15分。第6关10分。实验总结15分。)
注1:
当前用户可能对bomb文件没有执行权限,建议先用ls查看文件权限,若没有执行权限,请用chmod +x bomb命令增加当前用户对bomb文件的执行权限。
注2:
若用命令./bomb执行该文件提示no such file时,请先用 su szu 切换到szu账户,然后输入命令sudo apt-get install lib32z1,等待下载安装完毕即可。
三、实验环境:
1. 计算机(Intel CPU)
2. Linux64位操作系统(Ubuntu 17)
3. GDB调试工具
4. objdump反汇编工具
四、实验方法与步骤
1. 首先对bomb文件进行反汇编,并将结果输出到1.txt。
$ objdump -d bomb_64 > 1.txt
080488c0 <phase_1>: 80488c0: 83 ec 1c sub $0x1c,%esp 80488c3: c7 44 24 04 3c 93 04 movl $0x804933c,0x4(%esp) 80488ca: 08 80488cb: 8b 44 24 20 mov 0x20(%esp),%eax 80488cf: 89 04 24 mov %eax,(%esp) 80488d2: e8 93 04 00 00 call 8048d6a <strings_not_equal> 80488d7: 85 c0 test %eax,%eax 80488d9: 74 05 je 80488e0 <phase_1+0x20> 80488db: e8 95 05 00 00 call 8048e75 <explode_bomb> 80488e0: 83 c4 1c add $0x1c,%esp 80488e3: c3 ret 这个是
phase_1的汇编代码,第一个是比较字符串是否相等
<strings_not_equal>,相等则 je 80488e0 <phase_1+0x20>
不相等则 <explode_bomb>
找到地址
0x804933c得到答案。phase-1到这里,下次更新2
参考:https://www.cnblogs.com/Cherrison-Time/p/10085616.htmlhttps://blog.csdn.net/Xindolia_Ring/article/details/80142345
来源:博客园
作者:0001lzb
链接:https://www.cnblogs.com/0001lizhubo/p/11470465.html