menu 牢记自己是菜
BUUCTF [BJDCTF 2nd]8086
2301 浏览 | 2020-04-21 | 阅读时间: 约 2 分钟 | 分类: BUUCTF | 标签:
请注意,本文编写于 1459 天前,最后修改于 1459 天前,其中某些信息可能已经过时。

0x1 前言

一道比较水的题目,本身不是太想记录下来的。但是这道题存在一点让我没有想明白的问题,所以还是先行记录下来,以后要是能有机会理解其中的奥秘,再来这里解决我的问题。


0x2 题目分析

下载题目,发现是一个exe可执行程序,但是有趣的是,OD无法识别,IDA无法完成反编译(一开始我的理解),就连查壳软件都不觉得他是一个PE文件。

这种情况之前我有遇见过,就是因为出题人篡改了PE文件的基本hex格式,导致软件无法识别本程序,所以我们把它拖到winhex里面,尝试从PE文件头入手。但是当我拖到Winhex里面后就傻了,完全没有一点PE文件该有的样子。

好的,这里这题就要用到题目名字给出的线索了。8086第一个反应应该都是80x86,而在汇编语言中有种汇编,是十分基础的,被当作示例给大家讲的汇编语言,就是8086汇编。今天早上的微机原理接口第一节课上,满屏幕的都是8086,整本书应该都与这个神奇的东西有关。上网查了一下,8086汇编的程序通常是一个16位的程序,这就是为什么OD认不出来了。并且关于win十兼容的问题,按理来说微软的系统应该都是可以做到向下兼容的,但是为什么64位的系统只能兼容到32位,而并不能运行16位的程序。虽然网上也有对于这方面的解释,但是奈何我实在是看不太懂,所以先将这个问题作为疑惑保留下来。
之后就是题目问题了,由于IDA反编译出来的代码与数据很少,以至于我认为它有问题。仔细看看,有一段数据,但是又没有对数据的调用,所以我们猜测这可能就是8086的主体代码,由于IDA没有在头部文件获取到有用的信息,所以就没有将此数据段进行反汇编。这里我们强制分析一下,就发现题目逻辑很简单,就是上面的字符串与31进行异或。仔细看一下,的确在汇编中,我们使用的是16位的寄存器。

既然知道了逻辑,我们就用python简单的还原一下吧(我要努力改掉喜欢用c++的习惯)。


0x3 后记

这个问题我觉得在微机原理接口课上就可以解决,其实挺难受的,毕竟有些时候在接触到一些题目的时候,并不能搞清楚原理,让人还是比较头疼的。不管以后怎样,我一定会刨根问底的!QAQ

发表评论

email
web

全部评论 (共 2 条评论)

    2020-04-26 19:21
    我记得win10可以运行16位程序,好像是在DOS模式下。(才发现你的评论框右下角是书记诶~)
      2020-04-26 21:05
      @iyzyi这样嘛,我去康康,多谢师傅我去再好好研究研究。 ୧(๑•̀⌄•́๑)૭ (书记多可爱 (☆ω☆) )