zoukankan      html  css  js  c++  java
  • bugkuCTF—杂项—猫片(安恒)

    根据题目提示

    可以判断出来出来这很可能是一个LSB的图片隐写,下载下来

    很明显是一个png的图片文件,只是被删掉了后缀名,我们将它补上

    根据题目提示我们直接打开stegsolve的图片数据信息提取

    根据题目提示我们选择LSB和BGR

     发现了里面隐藏了一张图片png我们将其提取出来,保存的格式bin(txt格式用winhex和010Editor打开都是乱码),然后我们修改文件的后缀为png,然后发现图片打不开,用winhex打开

     

    发现了并不是我们预期的png文件头,PNG (png)的正常的文件头:89504E47,所以们将他前面的FFFF删掉保存退出。

    额  半张二维码@@,CRC值出错,很明显是高度出错引起的

    这个时候我们用一个py脚本算出正确的宽度和高度

     1 import os
     2 import binascii
     3 import struct
     4 crcbp = open("999.png","rb").read()   #文件名
     5 for i in range(1024):
     6     for j in range(1024):
     7         data = crcbp[12:16] + struct.pack('>i',i) + struct.pack('>i',j) + crcbp[24:29]
     8         crc32 = binascii.crc32(data) & 0xffffffff
     9         if crc32 == 0x08ec7edb:   #当前的CRC值
    10             print i,j
    11             print "hex",hex(i),hex(j)   #输出宽度和高度

    在有python环境的kali下面跑一下脚本

     

    在winhex里面修改保存即可。

    发现一个问题这个二维码和我们平时见到的不太一样,正常正方形中间应该是黑色的。所以还要用画图工具进行反色

    反色后的图片用QR二维码扫一下

     发现一个百度云链接,我也是醉了,还没出来 - -

     打开链接下载一个压缩包

    mmp  flag竟然不在里面,真TM。。。无语。。现在呢??我无从下手了  ,开始参考网上大佬的wp

    度娘搜了下,发现另一位老铁写的writeup

    https://www.jianshu.com/p/abc44c54857a

    最后根据hint里面的提示“NTFS”,根据大佬的说法,这是一种流隐写,需要用到工具

    ntfstreamseditor,然而。。这里还有一个坑就是,这压缩文件一定要用winrar来解压才会产生这样的效果

     接着用ntfstreamseditor,查看解压的文件夹里面的数据流,然后把他导出来,而且更可恶的是解压的时候必须使用的是winrar来解压(我是在win7的虚拟机里面做的,

    我也不知道win10为什么不能不能扫出来@@)

    不然的话扫不出文件夹里面的数据流,,真的是坑爹到了极致@@

    得到一个pyc文件,也就是py编译后的文件,因此需要扔到网上去在线反编译一下

    这里推荐一个网站,可以反编译py,   https://tool.lu/pyc/

    根据他这个加密的脚本再写出一个解密的脚本,运行一下就可以得到flag了

     1 def decode():
     2     ciphertext = [
     3     '96',
     4     '65',
     5     '93',
     6     '123',
     7     '91',
     8     '97',
     9     '22',
    10     '93',
    11     '70',
    12     '102',
    13     '94',
    14     '132',
    15     '46',
    16     '112',
    17     '64',
    18     '97',
    19     '88',
    20     '80',
    21     '82',
    22     '137',
    23     '90',
    24     '109',
    25     '99',
    26     '112']
    27     ciphertext.reverse()
    28     flag = ''
    29     for i in range(len(ciphertext)):
    30         if i % 2 == 0:
    31             s = int(ciphertext[i]) - 10
    32         else:
    33             s = int(ciphertext[i]) + 10
    34         s=chr(i^s)
    35         flag += s
    36     return flag
    37  
    38 def main():
    39     flag = decode()
    40     print(flag)
    41  
    42 if __name__ == '__main__':
    43     main()

    拿到这个网上去跑一下就出来了

    吐槽一番:

    我只能想吐一口血在出题人脸上 ,没写过py,这个脚本和还是参考网上大佬写的,好刚嘎,刚刚那个软件ntfstreamseditor也是花了很长时间才找到的,网上这种软件都快绝种了。。这个题目解题的一个转折点就是从数据流中提取出来那个已经编译过的py程序,我们需要拿去反编译,

    然后呢?就是要看得懂这个加密脚本了,再然后呢,就是写解密脚本了,这个是真的没写过@@,一波三折,   +写博客=花了4个小时 -   感觉dei找个时间去学一下py --人生苦短,我用python。

  • 相关阅读:
    NOI2010 超级钢琴
    [linux][nginx] 常用2
    [linux][nginx] 常用
    [PHP]听说随机数mt_rand()比rand()速度快,闲的无聊测试了一下!
    [linux] 权限问题
    [Laravel] 自带分页实现以及links方法不存在错误
    [YII2] 去除自带js,加载自己的JS,然后ajax(json)传值接值!
    [PHP]PHP设计模式:单例模式
    [html]浏览器标签小图标LOGO简单设置
    [javascript]JS获取当前时间戳的方法
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/10033384.html
Copyright © 2011-2022 走看看