Misc-nep寒假训练营5

1、MP3 隐写

image-20210301210501849

工具下载:https://www.petitcolas.net/fabien/software/

打开音乐文件发现里面有一张图片提示

image-20210301214035216

搜一下英文名称得到GourdSmallDiamond

image-20210301213919759

解压密码
在这里插入图片描述
解压,得到flag
在这里插入图片描述
输入flag,提示错误,经过多次尝试,wt?,梅开二度。。。flag为flag{MSTSEC_DINGANN_KEY_IS_GSD}

2、Affine_task

image-20210301214309312

from string import digits, ascii_lowercase
from secret import numbers, A, B

assert min([i in digits for i in numbers])

flag = "flag{"+"".join([ascii_lowercase[int(i)] for i in numbers])+"}"

assert numbers == "".join([str(ascii_lowercase.find(i)) for i in flag[5:-1]])
Ciphertext = ""
for i in flag:
    if i not in ascii_lowercase:
        Ciphertext += i
    else:
        Ciphertext += ascii_lowercase[(ascii_lowercase.find(i)*A+B) % 26]
print("Ciphertext =", Ciphertext)
# Ciphertext = vjsg{dckvzksr}

exp:

from Crypto.Util.number import *
from string import ascii_lowercase
table = ascii_lowercase
Ciphertext = "vjsg{dckvzksr}"
MOD = len(table)


def crack():
    for a in range(MOD):
        for b in range(MOD):
            if (a*table.find("f")+b) % MOD == table.find(Ciphertext[0]):
                if (a*table.find("l")+b) % MOD == table.find(Ciphertext[1]):
                    if (a*table.find("a")+b) % MOD == table.find(Ciphertext[2]):
                        if (a*table.find("g")+b) % MOD == table.find(Ciphertext[3]):
                            print("a, b = {}, {}".format(a, b))
                            return (a, b)


flag = ""
A, B = crack()
for i in Ciphertext:
    if i not in table:
        flag += i
    else:
        flag += table[inverse(A, MOD)*(table.find(i)-B) % MOD]
print(flag)
print("".join([str(ascii_lowercase.find(i)) for i in flag[5:-1]]))

3、明文攻击

image-20210301214805796

附件为一个zip压缩包,里面是加密的两个文件,flag.doc和readme.txt
明文攻击介绍

根据提示,再创建一个readme.txt文件,将提示内容粘贴保存,保证加密的和创建的readme.txt文件的CRC32值和文件大小相同,然后以zip压缩
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后使用ARCHPR工具进行明文攻击,

在这里插入图片描述
点击开始,等待。。。。。。
在这里插入图片描述

点击下方保存,得到一个zip3_decrypted.zip文件,里面即是已解密的文件,
打开flag.doc,是小说片段,其中藏在flag
在这里插入图片描述

4、python脚本使用(一)

image-20210303124958084

附件为一张图片,名为misc.jpg

根据提示,应该是用python脚本解决图片隐写

使用binwalk命令分析一下,发现zlib压缩
image-20210303125034342
并在生成的extracted文件夹中发现一堆总共625位二进制字符串,emm…25*25=625,
image-20210303125101240
将这些二进制字符串使用python脚本转图片

from PIL import Image
MAX = 25
pic = Image.new("RGB",(MAX, MAX))
str = "得到的二进制数字"
i=0
for y in range (0,MAX):
    for x in range (0,MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0, 0, 0))
        else:
            pic.putpixel([x,y],(255,255,255))
        i = i+1
pic.show()
pic.save("flag.png")

得到一张二维码,解码得flag

image-20210303220237698

或者用010找到zlib压缩部分,文件头78 9C
在这里插入图片描述
使用zlib解压脚本:

import zlib
s = '''
78 9C 5D 91 01 12 80 40 08 02 BF 04 FF FF 5C 75
29 4B 55 37 73 8A 21 A2 7D 1E 49 CF D1 7D B3 93
7A 92 E7 E6 03 88 0A 6D 48 51 00 90 1F B0 41 01
53 35 0D E8 31 12 EA 2D 51 C5 4C E2 E5 85 B1 5A
2F C7 8E 88 72 F5 1C 6F C1 88 18 82 F9 3D 37 2D
EF 78 E6 65 B0 C3 6C 52 96 22 A0 A4 55 88 13 88
33 A1 70 A2 07 1D DC D1 82 19 DB 8C 0D 46 5D 8B
69 89 71 96 45 ED 9C 11 C3 6A E3 AB DA EF CF C0
AC F0 23 E7 7C 17 C7 89 76 67 D9 CF A5 A8 00 00
00 00 49 45 4E 44 AE 42 60 82

'''
s = s.replace(' ','').replace('\n','')
b = bytes.fromhex(s)
flag = zlib.decompress(b)
print(flag)

同样得到一堆二进制字符串

SCTF{(121.518549,25.040854)}

5、数字水印隐写

image-20210303220359304

用010打开,点击模板尾,发现还藏有无文件头的png文件
在这里插入图片描述
可以直接用010新建文件,将隐藏的png文件数据复制到新建文件中,并添加上png文件头,89 50 4E 47 0D 0A 1A 0A 00 00 00 0D,保存
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
得到一张与原图一样的图片,猜测是双图隐写

使用BlindWaterMark工具,将两张图片复制到该工具下,并在当前目录cmd回车,输入命令python3 bwmforpy3.py decode half.png 123.png 333.png,然后什么事也没发生,不知道是什么原因,难道是python库的版本不对????
在这里插入图片描述
无果。。。。
这题解题思路可参见南京大学:南京大学:数字水印隐写writeup

最后修改:2021 年 03 月 04 日 12 : 10 AM
如果觉得我的文章对你有用,请随意赞赏