我是靠谱客的博主 火星上石头,最近开发中收集的这篇文章主要介绍计算机系统原理(2)——实验报告(1)问题描述,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

(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

 

最后成果:

用命令行执行:

最后

以上就是火星上石头为你收集整理的计算机系统原理(2)——实验报告(1)问题描述的全部内容,希望文章能够帮你解决计算机系统原理(2)——实验报告(1)问题描述所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部