安恒杯-misc

安恒杯-杂项-MISC-喵喵喵

——2018年1月21日

题目文件: 点击打开链接         提取密码:1qr6


拿到这个题目是一张图片

安恒杯-misc_第1张图片

首先看一下是不是隐写,用stegsolve查看之后发现,查看不同的色道不能直接找到结果。(最简单的办法就是一直按“右键头”)
再看看十六进制,用  binwalk 跑一下
安恒杯-misc_第2张图片

发现好像只有  png  文件头,后来找了写关键字发现也没有,那就还有一种可能  LSB隐写,这个原理我还不太清楚,感兴趣的同学可以自己查一查最终还是被我找到了一点异常的东西
打开stegsolve->analyse->Data Extract
安恒杯-misc_第3张图片

按照图中的顺序操作,最后在生成的数据头部发现藏有一张PNG图片,我们选择  Save Bin  ,再从保存的文件拖到十六进制编辑器中,我用的是

HxD.exe
这个软件,会发现他的头两个十六进制数据不是PNG文件头,删掉即可,即上图中最开始的“ff fe”,然后保存下来。
 打开之后只是这样的

安恒杯-misc_第4张图片



这个图片一看就知道肯定是个二维码,但是缺少了一半,通过常识,我们应该知道二维码是一个正方形的图片
这时候就需要再次查看一下他的十六进制文件,我们知道PNG文件的大小在文件按头部有显示,如下:



可以看出他是一个118H*8CH像素大小的图片,显然这不是一个正方形,我们应该将8CH改为118H,得到下图:

安恒杯-misc_第5张图片


这就很兴奋了,拿起手机扫一扫发现扫不出来,这时候联想到这应该是一个反色,把它拖到PS里面处理一下,(图像->调整->反相)保存,即可:
这里我用这个网站处理的图片

https://online-barcode-reader.inliteresearch.com/
点击打开链接

安恒杯-misc_第6张图片

选择你的二维码,然后添加文件,Read的结果是 安恒杯-misc_第7张图片

是一个网盘链接,打卡之后有一个  flag.zip 下载下来,打开之后你会很无语: 安恒杯-misc_第8张图片

当时一下子蒙圈了,这都是对的呀,怎么会这样,仔细再分析一下,给的rar好像数据量有点大,后面那么多数据是怎么回事,我把解压好的txt文件又压缩生成了一个压缩包文件,我比较了一下两个文件的大小:

安恒杯-misc_第9张图片

这两个文件的大小相差如此之大!!!一定还藏了什么东西,果然有猫腻!
这是结合提示,知道了还有  NTFS隐写  ,不知道是什么东西然后查了查:
https://www.cnblogs.com/Chesky/p/ALTERNATE_DATA_STREAMS.html 点击打开链接
然后用它说的工具看了看:
安恒杯-misc_第10张图片

正如上图所示:(把放flag.rar文件的那个文件夹添加,点击搜索)
发下有一个   flag.pyc   ,把它导出来,大家都知道 pyc 是python的字节码文件,我们需要反编译:直接上在线反编译的网站:
https://tool.lu/pyc/ 点击打开链接

通过反编译我们得到如下代码:

#!/usr/bin/env python
# encoding: utf-8
# 访问 http://tool.lu/pyc/ 查看更多信息
import base64

def encode():
    flag = '*************'
    ciphertext = []
    for i in range(len(flag)):
        s = chr(i ^ ord(flag[i]))
        if i % 2 == 0:
            s = ord(s) + 10
        else:
            s = ord(s) - 10
        ciphertext.append(str(s))
    
    return ciphertext[::-1]

ciphertext = [
    '96',
    '65',
    '93',
    '123',
    '91',
    '97',
    '22',
    '93',
    '70',
    '102',
    '94',
    '132',
    '46',
    '112',
    '64',
    '97',
    '88',
    '80',
    '82',
    '137',
    '90',
    '109',
    '99',
    '112']

很容易看出这是一个把  flag  ,加密了的算法,然后给了一个最后生成的数组,我们要做的就是把这个数组当作已知量,编写解密脚本,最后生成的字符串就是flag

解密脚本:

#!/usr/bin/env python
# encoding: utf-8
# 访问 http://tool.lu/pyc/ 查看更多信息

ciphertext = [
    '96',
    '65',
    '93',
    '123',
    '91',
    '97',
    '22',
    '93',
    '70',
    '102',
    '94',
    '132',
    '46',
    '112',
    '64',
    '97',
    '88',
    '80',
    '82',
    '137',
    '90',
    '109',
    '99',
    '112']
def encode():
    flag = '*************'
    ciphertext = []
    for i in range(len(flag)):
        s = chr(i ^ ord(flag[i]))
        if i % 2 == 0:
            s = ord(s) + 10
        else:
            s = ord(s) - 10
        ciphertext.append(str(s))
    
    return ciphertext[::-1]
    
def decode ():
    i=0
    flag=''
    for str in ciphertext[::-1]:
        s=int(str)
        
        if i%2 == 0:
            s=s-10
        else:
            s=s+10
        
        flag_bit=i^s

        flag=flag+chr(flag_bit)
        i=i+1
        print chr(flag_bit)
        
    print flag
decode()

我稍稍优化了一下,运行脚本输出的结果是:

安恒杯-misc_第11张图片


flag{Y@e_Cl3veR_C1Ever!}

总的来说这个题考的非常综合,涉及到的知识面也很广,出题人费心了啊!!!






















你可能感兴趣的:(CTF)