计算机系统原理(2)——实验报告

(1)问题描述

本实验是解除二进制炸弹。给你一个二进制可执行文件,运行该文件,你需要在没有任何提示的情况下输入5个password,如果都输入正确,则炸弹被解除;如果输入错误,则炸弹爆炸。

(2)实验思路

就是通过二进制文件分析这个程序作了些什么。运用反汇编工具IDA ,分析这个程序实现了什么功能。

(3)闯关

第一关

 

第二关

 

第三关

第四关

call _phase_4

根据学号进入phase_4_24

调用递归函数_func4_2, 计算数的阶乘

发现ebx存放的是40320=8!

故密码是8*500=4000

第五关

输入指令后发现eax是计算输入的数字个数。2F6h是一个比较大的数(758)所以炸弹一般不会爆炸,跳转。

遇到一个_Is Debugger Present函数发现Step over就会爆,而Step into

一样会爆,无法避免。推测这就是提示中的“反调试”,此时我们不可能不用IDA Pro工具,恰恰相反是用到了它的修改ip的功能:

发现经过_Is Debugger Present, eax=1,无法跳转,会使得炸弹爆炸。

因此用set IP 跳过这里。

 

遇到 _tohex 根据名称推断是把我们的输入转成十六进制的指令。

 

然后又是随机生成一些密码指令。

接着遇到 _check_buf_valid 函数,step into, 研究发现是对输入做异或,把结果储存在eax,然后与edx作比较如果不相等,c1的值将被置零。

发现eax=4D,即输入的数异或和为4D。

继续step into _goto_buf_2,发现莫名其妙程序崩溃了。根据提示发现输入的指令很有可能是地址!

于是找到通关的程序段:推断出密码含有 D4 11 40 00

然后根据异或和为4D和其他的提示,找到答案为:B8 D4 11 40 00 50 C3 E3

 

最后成果:

用命令行执行:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值