解压错误,出来张wbb的图片
用Winhex打开压缩包看到PNG文件头,再找到文件尾
附一张常见文件头尾的截图
将84改成80解开伪加密
rar在伪加密状态下会显示压缩包已损坏或压缩格式未知,所以判断rar伪加密的方法并不难。
HEAD_FLAGS 2字节 位标记:(每个数值代表一比特位)
0x0001-卷属性(压缩文件卷)
Ox0002 -压缩文件注释存(RAR 3.x使用分开的注释
块,不设置这个标记。)
Ox0004-压缩文件锁定属性
0x0008-固实属性(固实压缩文件)0x0010-新的卷命名法则
0x0020 -用户信息存在(RAR 3.x不设置这个标记。)Ox0040-
恢复记录存在
0x0080 -块头被加密
0x0100-第一卷(只有RAR 3.0及以后版本设置)其中的其它位为内部使用保留
这个地方的84 00对应的是rar文件格式的HEAD_FLAGS,网上找了下相关信息才知道为什么改成80 00
快速傅里叶变换 (fast Fourier transform),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。
FFT(Fast Fourier Transformation) 是离散傅氏变换(DFT)的快速算法。即为快速傅氏变换。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
——百度百科
傅里叶盲水印原理:
图片经过傅里叶变换后,水印图片直接按像素覆盖到频率域,因为频谱是中心对称的,所以加水印也要对称的加,具体就是图片分上下两部分,左上加了什么,右下也要加同样的内容。之后傅里叶反变换回去。解水印的时候变换到傅里叶变换提取就可以了。
接下去就是要去水印
网上大佬的python代码 cv2这个包我也是去网上学了下才知道怎么安装
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('D:\\CTF\\FFT.png', 0) #直接读为灰度图像,不过此题已经是灰度图片了
f = np.fft.fft2(img) #做频率变换
fshift = np.fft.fftshift(f) #转移像素做幅度谱
s1 = np.log(np.abs(fshift))#取绝对值:将复数变化成实数取对数的目的为了将数据变化到0-255
plt.subplot(121)
plt.imshow(img, 'gray')
plt.title('original')
plt.subplot(122)
plt.imshow(s1,'gray')
plt.title('center')
plt.show()
在Anaconda Prompt里输入命令 安装opencv
之后cv2的包在pycharm里就自动有了
这是我python代码运行后的结果,
放大镜放大以下就可以看到flag了
VNCTF{Ff5_1S_bEauTiful}
本文是本人参考VNCTF2021 MISC 的write up后亲手操作代码来自: