题目现在已经看不到了,大概意思是附件,是一个磁盘映像文件,里面有flag。
用虚拟机加载软盘跑下,提示输入access code,如下:
上IDA,将加载地址设置为0x7C00,用16位分析。
一,Boot程序
Boot 程序逻辑很清晰。
1.显示提示语句Loading 2.加载内核,从0面0磁道2扇区开始读10个扇区的内容到0x8000(0x800:0000) (PS:原代码是从磁盘读的,这里是用软盘启动的该镜像的,请修改成读软盘的。在这里吃了亏,T^T) 3.提示输入Access code,解密内核代码 4.转到0:8000h运行内核
看init过程是怎么解密的,从而得到Access code。
只能输入4个数字,并用这4个数字循环对0×8000-0x87ff 异或解密,用程序进行猜想。
fin = open('bctfos.bin', 'rb') fin.seek(512) content = fin.read(16) fin.close() base = range(48, 58) for ch in content: print [hex(ord(ch)^x) for x in base]
输出内核的头16个byte的内容 xor [0, 9] 的结果,进行分析猜想。
我们看到当access code为1337时,跟boot的开头一样有点像,输入后,果然可以进入。