[安洵杯 2019]吹着贝斯扫二维码(二维码拼接)
打开题目,有一堆没有后缀的文件,有一个flag.zip文件,但要密码,不是zip伪密码,同时下面有一排未知的数字,拿去解密,但是好像并没有得到什么
用010去查看没有后缀的文件,发现是jpg,改完之后发现是二维码的片段,在010中发现了未知片段,是数字,可以用下面的进行批量修改,但是是直接对文件进行添加后缀,所以flag.zip可能会变成flag.zip.jpg,记得再进行修改(来源:BUUCTF 吹着贝斯扫二维码-CSDN博客)
import os
path = '' #文件具体路径,这个1是那堆文件所在的文件夹,不成功时可以改个路径
for i in os.listdir(''): #路径最好用绝对路径,不会出错
#if i == '修改后缀.py':
# continue
#else:
oldname = os.path.join(path,i)
newname = os.path.join(path,i+'.jpg')
os.rename(oldname,newname)
后面可用PS对图片进行拼图,最得到二维码,扫描,得到提示应该是之前那段未知字段的解密,最后得到密码,解密得到flag
从娃娃抓起(md5,中文电码,五笔字型)
题目为两个文本
问ai,这两种文字为:中文电码和五笔字型
中文电码:这是一种早期的汉字编码方式,主要用于电报通信和早期计算机汉字处理。:中文电码表采用四位阿拉伯数字作为代号,从0001到9999按顺序排列,最多可表示一万个汉字、字母和符号;
五笔字型:由王永民发明,是一种高效的汉字输入法,极大地推动了汉字在计算机中的输入和处理
正好对应了另一个文档
第一排的可以由中文电码解出,第二行去搜在线五笔字型解密没咋搜到,但是可以用搜狗的输入法
中文电码:MD5 在线加密工具 | 菜鸟工具
最后再用md5(一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串)
弱口令(Sublime Text,cloacked-pixel)
打开题目发现是一个需要密码的,发现提示下面有像是空白的,但是其实是有东西的,猜测是不是snow,但是不是的,看别人的题解,需要用Sublime Text:在普通文本编辑器中不可见的字符(如空格、制表符、换行符等)在 Sublime Text 中可以显示,是因为 Sublime Text 提供了显示隐藏字符的功能。这些字符在普通文本编辑器中默认是不可见的,但在某些编程场景中,这些隐藏字符可能会影响代码的运行或格式,因此 Sublime Text 提供了显示和管理这些字符的功能。
进行解密
运用其进行解密
后面运用到cloacked,得到flag,具体可见:Buuctf 弱口令详解附送图片隐写工具cloacked-pixel安装配置使用实列-CSDN博客
cloacked-pixel:
使用:加密:python lsb.py hide 待加密的png图片 存放payload 加密的密码
解密:python lsb.py extract 待解密的png图片 存放导出的payload 解密密码
cloacked-pixel和Stegsolve的区别:
Stegsolve 主要通过可视化分析,在某些情况下可能无法检测到隐藏信息,尤其是当隐写信息被加密或采用特殊的隐藏方式时
Cloaked-Pixel 在提取隐写信息时,会按照特定的加密和隐藏逻辑进行操作,如果隐写信息被加密或隐藏在特定的像素位置,Cloaked-Pixel 可以通过其算法直接定位并提取
[GUET-CTF2019]zips(伪密码,时间戳,掩码爆破)
打开发现一个zip包着一个zip,但是需要密码,老规矩,最后用ARCHPR得
但是呢里面还是要密码,还是按老规矩走,发现伪密码
发现set up.sh可以打开
浅浅解读一下:将一个名为 flag
的文件压缩成一个名为 flag.zip
的加密压缩包,并使用一个动态生成的密码来加密这个压缩包
python -c "print(__import__('time').time())"
是 Python 中动态导入 time
模块并调用 time()
函数的方法。time()
返回当前时间的时间戳,时间戳为zip的密码
时间戳:是一个表示时间的数字,通常用来记录某个事件发生的具体时间,从特定时间点开始计算的数值,
也可用这个
import time t_str = '2019-5-17 16:40:15' t_tuple = time.strptime(t_str, "%Y-%m-%d %H:%M:%S") t_unix = time.mktime(t_tuple) print(t_unix) # 输出结果:1558082415.0
后面可在kail中运行讨论为啥为两位小数(忘记截图了)在python2中为两位,在python3为四位,但是通过时间推算,大概率是用python2(可以看这位博主的还是挺详细的BUUCTF-zips_buuctf zip-CSDN博客
后面通过掩码爆破:已知密码格式和其一部分的时候使用的,对于密码未知部分可以使用 ? 或者 * 来代替
[UTCTF2020]file header(添加文件头)
打不开图片,保存用010,发现文件头与后缀不符合,查看文件尾就是png,于是添加文件头
得到flag
[XMAN2018排位赛]通行证
栅栏密码:传统栅栏加密、有密钥的栅栏加密以及W型栅栏加密
传统:将明文分为n组,再取每组第一个进行拼接,后第二组进行拼接
有密钥:
W型:将明文按w型排列,然后一排一排取
(详细可见:CTF那些事儿)
打开题目引入眼帘的是一串base密码,进行解密
利用栅栏密码对其加密,并用ROT13,得到flag
为什么是xman,因为题目是XMAN2018排位赛
MD5
根据提示为MD5,找解密网站
Url编码
url:网址,只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,即如果URL中有汉字,就必须编码后使用,URL编码将每一个非安全的ASCII字符都被替换为“%xx”格式(URL 编码/解码 - 锤子在线工具)
zip(crc32,rar文件头尾)
打开发现一堆zip文件,放进ARCHPR中无果,010中也没发现啥,看wp,要用crc32爆破(第一次见)
crc:循环冗余校验是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。可分为crc8,crc12,crc32等,也就是分别使用8,12,32次多项式,生成8,12,32位的校验码,计算过程逐渐变得复杂,错误检测能力也逐渐变强,都具有数据块中每个位都参与计算的特性,因此任何一个位的变化都会导致不同的校验值,crc32 校验码出现在很多文件中比如 png 文件,同样 zip 中也有 crc32 校验码。值得注意的是 zip 中的 crc32 是未加密文件的校验值 (在压缩文件之前,原始文件内容通过CRC32算法计算得到的校验值。即使ZIP文件本身被加密,存储在ZIP文件中的CRC32校验值仍然是基于未加密的原始文件内容计算的)
crc32特点:文件内容少(比赛中大多为 4 字节左右),加密密码长
利用脚本:是利用只有一位发生改变也会得到不同的CRC32值,不断寻找CRC32值相匹配的4字符字符串
因为内容只有4bit大小(将脚本放在与文件同目录下)
#python3 import zipfile import string import binascii def CrackCrc(crc): for i in dic: for j in dic: for k in dic: for h in dic: s = i + j + k + h if crc == (binascii.crc32(s.encode())): f.write(s) return def CrackZip(): for i in range(0,68): file = 'out'+str(i)+'.zip' crc = zipfile.ZipFile(file,'r').getinfo('data.txt').CRC CrackCrc(crc) print('\r'+"loading:{:%}".format(float((i+1)/68)),end='') dic = string.ascii_letters + string.digits + '+/=' f = open('out.txt','w') print("\nCRC32begin") CrackZip() print("CRC32finished") f.close()
后面得到一串base64,解码得到
将其保存并用010打开,发现文件头啥也不是,看文件尾有Ä={,猜测是不是rar文件,为其添加文件头,后得到flag在提示部分
(相关:【科普向】谁都能看懂的CRC(循环冗余校验)原理_crc循环冗余校验原理-CSDN博客
MISC:压缩包取证(zip爆破、明文攻击、伪加密、CRC32碰撞)_crc32加密文件怎样解密-CSDN博客
【CTF入门】BUUCTF Misc刷题(持续更新) - Super_Snow_Sword - 博客园)
[WUSTCTF2020]girlfriend(双音多频拨号,dtmf2num)
打开有一个文档,有一个音频
将音频放进010,audacity,看波形图,频谱图都无果
看wp,是音频隐写中的拨音号识别中的双音多频拨号
双音多频拨号:由高频群和低频群组成,高低频群各包含4个频率。电话上的每个按键(数字键和功能键)对应一个唯一的DTMF信号,每个DTMF信号由高频群中的一个高频信号和低频群中的一个信号叠加组成。(摘于:《CTF那些事儿》)(音视频学习--DTMF介绍 - 知乎)
运用dtmf2num
下面这一串就是九键,以前应该用过的老年机,打字时,按一下9,就指到w,两下 :x,三下:y,以此类推,可以得到:youaremygirlfriends(为flag)
stego100.wav(波形图隐写)
用audacity打开,有上下两个波形图,为双声道,一般双声道的波形完全一样,这样会让播放时产生立体声的效果,这题两个不一样,猜想上面的是否为摩斯
对其进行放大:.....-...-.-.----...---.....-........-----.-.-.-...-----.-------..---....-........---.-.....----- -...-..--...---------...-------..--------..-----.-.
sound.wav(频谱图)
用audacity打开,查看频谱图
[DDCTF2018](╯°□°)╯︵ ┻━┻(转十进制,ASCII特征,将ASCII表中转16进制)
打开题目!
解密:
发现是一串不知道是什么的东西,看wp
是将其转成十进制之后发现,直接转字符串不行,因为ASCII中只有128个,将其减去128,再进行转化
key='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd' hex=[] flag='' for i in range(0,len(key)-1,2): zdh=key[i:i+2] hex.append(zdh) for i in range(len(hex)): zdh1=hex[i] flag+=chr(int(int(zdh1,16))-128) print(flag)
得到flag
(相关:[DDCTF2018](╯°□°)╯︵ ┻━┻ - 跳河离去的鱼 - 博客园)
[SUCTF2018]followme(流量搜索)
流量题,搜一搜看能不能通过关键字,得到flag
[MRCTF2020]千层套路(循环压缩包,二维码)
打开是一个压缩包,有提示,尝试发现后一个压缩包的密码,为上一个压缩包的名字,有很多层,照应了题目
用脚本
import zipfile import os path=r"" #这个自己把控想在哪里开始使用脚本 file="0573.zip" def un_zip(Path,File_name): #传入一个路径和当前路径的压缩包名字,返回解压缩后的文件名字 current_file=Path+os.sep+File_name #路径+'/'+文件名 #new_path='' os.chdir(Path) #改变当前工作路径,方便添加文件夹 zip_file=zipfile.ZipFile(current_file) #print(zip_file.namelist()[0]) new_file=zip_file.namelist()[0] #新解压的压缩文件为新的路径名字 #new_path=current_path + os.sep + new_file #os.mkdir(new_path) #新建一个以解压出来的压缩包为名字的文件夹 #os.chdir(new_path) zip_file.extractall( path=Path, members=zip_file.namelist(), pwd=File_name[0:-4].encode() )#因为密码就是文件名 zip_file.close() return new_file new=file new1='' while (1): #new1=un_zip(path,new) #第一次解压出来了new1 if(new ==''): #判断是否解压完毕,是则直接退出 print("end:"+new1) break else: #否则就开始新的解压 new1=un_zip(path,new) print("continue:"+new1) new=new1
得到一个txt
再运用脚本生成二维码
from PIL import Image string='' file=open('qr.txt') MAX=200 picture=Image.new("RGB",(MAX,MAX)) for y in range(MAX): for x in range(MAX): string =file.readline() picture.putpixel([x,y],eval(string)) #直接使用eval()可以转为元组 picture.show()
得到
通过二维码扫描得到flag
百里挑一
打开题目,又是流量,习惯性试着搜搜关键词
明显可看到只有一半,寻找下一半,进行协议分析,发现有许多图片,导出来,好多图片,浅浅分析一下,太多了,后面好像用exiftool分析图片的属性,也是得到前半截flag,看wp,联系前半截flag前后相关的,让后可以搜索adobe得到后半截flag
两个进行拼接
[MRCTF2020]CyberPunk(看题提示)
打开题目为exe,运行
再2020.8.17,会给flag,调整电脑时间再运行
[BSidesSF2019]zippy(流量文件foremost分离)
打开,流量题,试着搜索一下关键词,没特殊信息,进行协议分析
是个要密码的压缩包,用foremost分离
后用密码解密得到flag
[UTCTF2020]basic-forensics(010搜查)
打开题目显示
保存下来用010查看,像那种文章,搜索一下
[GUET-CTF2019]虚假的压缩包(zip伪密码,RSA,密码可有中文,crc,异或)
打开题目,两个压缩包都是需要密码,那这样的话,那就看看假的压缩包是否为zip伪加密
欸嘿,还果真是的,修改保存一下,得到了一个文档
越看越觉得像信安学的,尝试一下
但是他的解并没有说明是明文还是密文,就得到了两个结果,正确的是5,但是,解密的密码并不是5,密码为“答案是5”
解出来的是一个无后缀的文档,和一张jpg图片,但是打不开,用010打开,发现是png,修改,再进010显示crc错误
进行爆破得到正确的并且修改
修改后得到
多出来了一个异或5
异或:是一种数学运算符,常用于逻辑运算与计算机中的位运算。当且仅当两个输入值不同时,异或运算输出为真(1),否则输出为假(0),即“同为 0,异为 1”。异或运算可以通过数学符号“⊕”表示, 具有交换律、结合律、恒等律等性质。
猜测是不是将前面无后缀的异或5
import base64 f1 = open(r 路径) xor_data = f1.read() f1.close() dec_data = "" for i in xor_data: tmp = int(i,16) ^ 5 dec_data += hex(tmp)[2:] print(dec_data) f2 = open('./data.doc','wb') f2.write(base64.b16decode(dec_data.upper())) f2.close()
for i in xor_data: tmp = int(i,16) ^ 5 dec_data += hex(tmp)[2:]
循环遍历 xor_data
中的每个字符,首先将字符转换为十六进制整数,然后与数字5进行异或操作。异或的结果再转换回十六进制字符串
得到将其变个颜色得到
[SUCTF 2019]Game(加盐,需密码的算法)
打开题目,有一张为图片,有一个为zip,zip中有个html,用firefox打开好像是个游戏
解密,但并不是flag
接下来分析图片,老规矩,最后发现
加盐:密码加盐是一种增加密码安全性的技术,其主要思想是在密码加密的过程中,为密码添加一些额外的随机字符串或固定字符串,以增加密码的随机性和复杂性,从而提高密码的安全性。比如:密码为:335563 可变:sfjo335563
什么叫给密码“加盐”?如何安全的为你的用户密码“加盐”? - 知乎)
那就说明要找密码
一些需要密码的算法:对称加密算法(AES,DES,3DES,RC4,Blowfish等)(相关:数据加密方法总结---对称加密算法(DES、3DES、AES、RC4、TEA、IDEA、Blowfish)-CSDN博客)现在好像密码学也学了一些,非对称加密算法(RSA,DSA等)(相关:网络安全的加密算法:RSA与DSA比较_dsa加密-CSDN博客),哈希算法
运用这个网站在线Triple DES加密 | Triple DES解密- 在线工具
看我回旋踢(ROT13)
打开
flag的格式都给了,猜测是不是 ROT位移密码
摩丝
打开题目
进行解密
ci{v3erf_0tygidv2_fc0}
USB(rar,usb流量,脚本,维吉尼亚密码,栅栏密码)
打开文件,有一个rar和一个以ftm为后缀的文件,搜索了一下
ftm:使用FamiTracker创建的音频跟踪器模块,FamiTracker是用于为Nintendo(NES)系统制作音乐的音频程序; 包括简短的音频样本和构成旋律的一系列音符,FTM文件以专有格式保存,只能使用FamiTracker打开和编辑。(但是好像并没有什么用)
rar里有一个flag.txt,但是并没有什么内容,用010打开,有点奇怪,平常不这样显示
rar:rar通常情况比zip压缩比高,但压缩/解压缩速度较慢。
标记块:
52 61为头部校验,rar都以52 61开头
72 为块类型,所有文件都一样
21 1A 为块标记
07 00 为块大小
位标记:如果块头被加密,则位标记应该为:0x8000
文件头:
(来自:RAR文件格式学习(了解)_rar文件头-CSDN博客)
用010打开发现文件头部的块类型:74变为7A了,进行修改,解压后得多了一张图片,老规矩,在此通道发现了二维码,再进行扫描
但并不是flag
key.ftm
用binwalk进行分析,发现还隐藏了文件,再用foremost分离,得到了usb的流量
USB(通用串行总线)数据包是用于在 USB 设备和主机之间传输信息的基本单元。USB 是一种标准化的接口,用于连接各种外围设备,如键盘、鼠标、存储设备、打印机等。USB 数据包在这些设备和主机之间传输数据,确保设备能够正常工作和通信。
usb.capdata
字段是用于显示捕获的 USB 数据的原始字节,这些字节通常表示设备在 USB 总线上发送的实际数据。对于 USB 键盘,usb.capdata
通常包含按键操作的编码信息。在分析 USB 数据包时,我们通常会关注数据包中的特定字节来获取按键信息。
又因为USB键盘的数据包长度通常为8个字节,在USB键盘的数据包中,击键信息集中在第3个字节,SB协议数据部分在 Leftover Capture Data
域中,数据长度为 8
个字节。击键信息集中在第 3
个字节,每次击键都会产生一个数据包。所以如果看到给出的数据包中的信息都是 8
个字节,并且只有第 3 个字节不为 0000
,即记录了USB连接的键盘输入数据
运用GitHub - WangYihang/UsbKeyboardDataHacker: USB键盘流量包取证工具 , 用于恢复用户的击键信息脚本
运行得到
维吉尼亚密码:是移位密码的推广,在信安中也学过,但是好像不叫这个名字
就是按密钥分组,然后再依次加上相应的密钥
但不是完整的flag形式,猜测是否是栅栏密码,得到flag
draw(Logo编程语言)
打开
搜索说是Logo 编程语言:Logo 是一种教育用的编程语言,通常用于教授基本的编程概念,如循环、条件语句和图形绘制。Logo 语言的一个显著特点是它的图形界面,它允许用户通过编写程序来控制一个名为 "turtle"(海龟)的图形化对象,使其在屏幕上绘制图形。
得到flag
[ACTF新生赛2020]明文攻击(zip已知明文攻击)
打开题目有一张图片和一个压缩包,压缩包里有,都需要密码
分析图片,用010打开,发现PK,但是文件头少了一点,补充完全之后,也得到一个flag.txt
zip已知明文攻击:
攻击条件:
对于zip文件来说,进行明文攻击的条件
是:有一个单独的文件已知且进行压缩之后的crc值与某个包含此文件的压缩包的CRC值相等
在进行明文攻击时,压缩算法一定要相同
慢慢的
[SWPU2019]Network(TTL)
打开
TTL加密
TTL是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL的初值通常是系统缺省值,是包头中的8位的域。TTL的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把TTL域减一,TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。
解密方法:
将所有前两位合并为8位,并且每八位一组。
将上面的每组转化为十六进制的字符
([SWPU 2019]Network-TTL加密和涉及的一些知识_[swpu2019]network-CSDN博客)
# coding=utf-8 import binascii # 使用 with 语句确保文件正确关闭 with open("attachment.txt", "r") as f, open("result.txt", "wb") as f2: num = '' res = '' for i in f: value = int(i.strip()) # 去除行尾的换行符 if value == 63: num += "00" elif value == 127: num += "01" elif value == 191: num += "10" elif value == 255: num += "11" # 将二进制字符串转换为 ASCII 字符 for j in range(0, len(num), 8): res += chr(int(num[j:j+8], 2)) # 转换为字符 # 直接将 ASCII 字符串编码为二进制数据 res = res.encode('utf-8') f2.write(res)
后续发现为zip,改完之后又和前面的一样,
# -*- encoding: utf-8 -*- import base64 f = open('flag.txt','rb').read() while True: f = base64.b64decode(f) if b'{' in f: print(f) break else: continue
之后得到flag
[MRCTF2020]Hello_ misc(foremost,red最高位,base64脚本)
打开时一个rar但里面带密码和一张png
分析图片,老规矩,最后010分离,但是只有一个带密码的文本,而且他说有损坏,还是用foremost
分离得到一张图片和文本
图片有Steg分析(在red最高)
得到密码去解密
后面得到的文本和ttl很像
with open('out.txt','r') as Dec: res = '' for i in Dec.readlines(): Bin = '{:08b}'.format(int(i)) print(Bin) Sub_Bin = Bin[:-6] res += Sub_Bin print(res) for j in range(0,len(res),8): full_bin = res[j:j+8] print(chr(int(full_bin,2)),end="")
得到另一个的密码
import base64 with open('data.txt','r') as file: for i in file.readlines(): line = str(base64.b64decode(i),'utf-8') print(line)
建议近视的可以把眼镜摘下,得到flag
[CFI-CTF 2018]webLogon capture(流量,url解码)
打开是流量,统计,分级
[UTCTF2020]zero(零宽字符隐写)
零宽字符隐写
零宽度字符是一些不可见的,不可打印的字符。它们存在于页面中主要用于调整字符的显示格式。
Unicode Steganography with Zero-Width Characters
[WUSTCTF2020]spaceclub
打开跳转到了一片空白的地方,另存为,crtl+a,发现有东西,放进sublime
短的为0,长的为1
import binascii
# 打开 attachment.txt 文件进行读取
with open('attachment.txt', 'r', encoding='utf-8') as input_file:
# 打开 output.txt 文件进行写入
with open('output.txt', 'w', encoding='utf-8') as output_file:
temp_lines = [] # 临时列表,用于存储八行内容
result_chars = [] # 用于存储所有转换后的字符
# 逐行读取文件内容
for line in input_file:
temp_lines.append(line.strip()) # 去除每行末尾的换行符
# 每八行处理一次
if len(temp_lines) == 8:
# 将八行内容拼接成一个字符串
combined_str = ''.join(temp_lines)
# 将拼接的字符串转换为十六进制数,再转为字符
try:
hex_number = hex(int(combined_str, 2))[2:] # 转换为十六进制数
if len(hex_number) % 2 != 0:
hex_number = '0' + hex_number # 确保十六进制数长度为偶数
char = binascii.unhexlify(hex_number).decode('utf-8', errors='ignore') # 转为字符
result_chars.append(char) # 添加到结果列表中
except ValueError:
print("转换失败,请确保输入内容只包含二进制字符(0和1)。")
# 清空 temp_lines 以便处理下一组
temp_lines = []
# 如果文件行数不是8的倍数,处理剩余的行
if temp_lines:
combined_str = ''.join(temp_lines)
try:
hex_number = hex(int(combined_str, 2))[2:]
if len(hex_number) % 2 != 0:
hex_number = '0' + hex_number # 确保十六进制数长度为偶数
char = binascii.unhexlify(hex_number).decode('utf-8', errors='ignore')
result_chars.append(char)
except ValueError:
print("转换失败,请确保输入内容只包含二进制字符(0和1)。")
# 将所有字符拼接成一个字符串写入 output.txt 文件
output_file.write(''.join(result_chars))
print("处理完成,结果已写入 output.txt")
[ACTF新生赛2020]music(音频异或加密,010异或功能)
打开显示,放入010查看
有很多A1,进行异或后可恢复(新知识,看大佬的wp)
记得选,无符号字节,与A1进行异或
后通过听音频得到:actfabcdfghijk
flag:flag{abcdfghijk}
[MRCTF2020]Unravel!!(SilentEye,AES,文件分离)
打开有一个压缩包,一个音频,一张图片,压缩包里要密码,音频听了下没啥特别,但名字提示说看文件的末尾,用010打开,发现
猜测这是不是密码:key=U2FsdGVkX1/nSQN+hoHL8OwV9iJB/mSdKk5dmusulz4=(U2FsdGVkX1的开头,猜测是aes,me并没有看出来,但是似乎之前好像写过这样的,别人的wp说到过,浅浅记一下吧,在这[SUCTF 2019]Game)
去分析图片,用010打开好像有东西,用binkwalk,foremost
得到,同时有一张图片,名为ase
ASE加密,Tokyo为密钥
为第一个压缩包密码
然后使用 SilentEye
[GKCTF 2021]excel 骚操作(汉信码)
打开题目跳转到一个和excl类似的,显示flag,看不到,点击公式显示,有很多个,缩小
有点像二维码,但又有点不同,保存,到了本机显示
再修改长宽
得到
并不是二维码,是汉信码
汉信码:是一种具有完全自主知识产权的二维矩阵码,由中国物品编码中心牵头组织相关单位合作开发。它是我国首个拥有自主知识产权的二维码国家标准。
去在线网站
[UTCTF2020]File Carving(文件分离,ELF)
打开题目为图片,老规矩,010打开
手动分离,得到一个压缩包,压缩包里为ELF可执行文件
ELF:是一种广泛应用于Unix和类Unix系统(如Linux)的标准二进制文件格式。它用于定义不同类型的对象文件(Object files)的结构和内容,包括可执行文件、目标文件、共享库和核心转储文件
运行 ./+文件名
[watevrCTF 2019]Evil Cuteness(S,文件分离)
这题实属惊到我了,不过咪咪还是可爱的
打开图片为,010发现隐藏,分离,之后就得到flag了
[MRCTF2020]pyFlag(文件合并,脚本)
打开三张图片,010打开,发现文件尾有part1,2,3,合并
得到zip里面两个加密文件,爆破
得到提示
运用(要在python3)
#!/usr/bin/env python import base64 import re def baseDec(text,type): if type == 1: return base64.b16decode(text) elif type == 2: return base64.b32decode(text) elif type == 3: return base64.b64decode(text) elif type == 4: return base64.b85decode(text) else: pass def detect(text): try: if re.match("^[0-9A-F=]+$",text.decode()) is not None: return 1 except: pass try: if re.match("^[A-Z2-7=]+$",text.decode()) is not None: return 2 except: pass try: if re.match("^[A-Za-z0-9+/=]+$",text.decode()) is not None: return 3 except: pass return 4 def autoDec(text): while True: if b"MRCTF{" in text: print("\n"+text.decode()) break code = detect(text) text = baseDec(text,code) with open("flag.txt",'rb') as f: flag = f.read() autoDec(flag)
得到flag
[QCTF2018]X-man-A face(补二维码)
打开为图片,其中为二维码,但是少了定位点,补一下(不知道为什么手机可以扫出来,CQR不行)
派大星的烦恼
打开为一张粉色的图片,010打开
有提示可知,重要信息在22,44
data = ''' 22 44 44 22 44 44 22 22 22 22 44 22 44 44 22 22 22 22 22 22 44 44 22 22 22 44 44 22 44 44 22 22 44 22 22 44 44 44 22 22 44 22 44 22 44 44 22 22 22 22 22 22 44 44 22 22 44 22 22 22 22 44 44 22 44 22 44 22 44 44 22 22 22 22 44 22 44 44 22 22 44 22 22 22 44 44 22 22 22 22 22 44 44 44 22 22 22 22 44 22 44 44 22 22 22 44 22 22 22 44 44 22 22 22 44 22 22 44 44 22 44 22 44 22 44 44 22 22 22 44 44 22 22 44 44 22 44 22 44 22 22 44 44 22 22 44 44 22 44 44 22 22 22 44 22 22 22 44 44 22 22 44 44 22 44 44 22 22 44 22 44 22 22 44 44 22 44 22 44 22 44 44 22 22 22 44 22 22 22 44 44 22 22 22 44 22 44 44 22 22 44 44 22 22 22 44 44 22 44 22 44 22 22 44 44 22 22 22 44 22 44 44 22 22 44 44 22 22 44 44 22 22 22 22 22 44 44 44 22 22 44 44 22 22 44 44 22 22 22 44 22 22 44 44 22 22 ''' # 替换为 0 和 1 converted = data.replace('22', '0').replace('44', '1') print(converted)
key不在这里
打开为二维码,扫码得
把这个放在浏览器里搜索直接就是在搜索这个题“107”:“f”;
s = '10210897103375566531005253102975053545155505050521025256555254995410298561015151985150375568' temp = '' while len(s): if int(s[:3]) < 127: temp += chr(int(s[:3])) s = s[3:] else: temp += chr(int(s[:2])) s = s[2:] print(temp)
得到
二维码(ps抠图,拼图)
[INSHack2017]sanity(Markdown文件)
打开就得到flag
[UTCTF2020]sstv(sstv,QSSTV)
打开为音频,老规矩查看并没有什么线索
sstv:SSTV可以理解成一种特殊编码的音频信号,这种信号通过软件工具可以解码成静态图像。 大家实际接收到的SSTV音频大概长是一段“令人摸不着头脑”的音频,经过特定软件解码后,可以得到原始图片(业余无线电入门:如何接收SSTV图像 - 知乎)
kali安装QSSTV
apt-get install qsstv
[SCTF2019]电单车(PT224X)
打开题目,音频,就听到次的一声,aud打开(看着很像摩斯,但是并不是的)
PT224X: 同步引导码(8bit) + 地址位(20bit) + 数据位(4bit) + 停止码(1bit)
PT226X: 同步引导码(4bit) + 地址位(8bit) + 数据位(4bit) + 停止码(1bit)
来源:buuctf-Misc91-120题wp - 骁隆's Blog
0 01110100101010100110 0100
flag为地址码
[GUET-CTF2019]soul sipse(Steghide,Unicode)
打开音频,得到网址,是一张图片,但是文件头有错,修改
常用的文本字符(\u)(一文看懂Unicode编码 - IllidanStormrage - 博客园)
steghide extract -sf
+文件
Unicode转中文,之后两数相加得到flag
粽子的来历(word文档行距不同)
打开题目,是几个文件,但是显示打不开,用010打开发现有几个奇怪的(像是恶意插进来的全部改成FF),修改后就可以显示内容了
内容都是《离骚》,但是行距不一样
A:100111100010
B:111110010011
C:100100100001
D:111100100001
题目描述提示
正好第三就是flag
[UTCTF2020]spectogram(频谱图)
打开用audacity打开,打开频谱图,拉大
Business Planning Group(BPG文件,工具:BandiView)
打开为一个图片,老规矩,010打开时发现有文件隐藏,就用foremost提取了一下,但是提取出来的还是原来的图片。后面去看了别的题解
BPG:是一种新的图像格式,压缩率比jpeg高
可以用BandiView或Honeyview打开
(Honeyview · 免费图像查看器 · 下载和功能说明)
用BandiView打开(有第二张图片)
再进行解密,得到flag
[GKCTF 2021]你知道apng吗(apng,二维码摆正)
打开题目问我知道apng,并不知道,去浅浅搜索一下吧
apng:也就是动图,但是比git好,可以用Firefox与Chrome浏览器(59版本及以上)(因为它是Mozilla组织创办的)
用firefox打开是动图,发现有几帧有二维码
可用BandiView
逐个扫描,第一个稍作修改
用ps,点击透视裁剪工具
将四个角连接起来,再点击√
得到
第二个图用Stegsolve
然后逐个扫描
得到flag{a3c7e4e5-9b9d-ad20-0327-288a235370ea}
[DDCTF2018]流量分析(TLS,FTP,wireshark密钥导入)
打开题目有一个文本,打开
接着分析,进行协议分析
FTP协议
发现了两个压缩包,进行导出,发现有密码
进而继续找密码,分析tcp,在tcp 2016找到
提取图片中的,进行md5,但并不是两个压缩包的密码
TLS协议
TLS(Transport Layer Security)是一种安全协议,用于保护网络通信的安全性和隐私性。它是SSL(Secure Sockets Layer)的后继者,用于在互联网上建立安全的通信连接。本文将介绍TLS的概论、工作原理、发展历史、算法和参考资料。
导入密钥
将在图片中提取的创建一个txt
然后
在http,得到flag
蜘蛛侠呀(icmp,gif时间隐写)
ICMP协议
是网络层协议,一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。所以我们就需要一种协议来完成这样的功能–ICMP协议。
ICMP协议的功能主要有:
-
确认IP包是否成功到达目标地址
-
通知在发送过程中IP包被丢弃的原因
(ICMP协议详解-CSDN博客,ICMP 协议 | 菜鸟教程)
“Echo Request“也就是ping请求
ICMP类型8对应于“Echo Request”消息,也就是我们通常所说的“Ping请求”。当一个主机想要测试与另一个主机的连通性时,它会发送一个类型为8的ICMP消息。如果目标主机可达,它会回复一个类型为0的ICMP消息,即“Echo Reply”
筛查为“icmp.type==8”
发现icmp后跟着
使用
with open('data.txt', 'r') as file: res_list = [] lines = file.readlines() print('[+]去重之前一共{0}行'.format(len(lines))) print('[+]开始去重,请稍等.....') for i in lines: if i not in res_list: res_list.append(i) print('[+]去重后一共{0}行'.format(len(res_list))) print(res_list) with open('data1.txt', 'w') as new_file: for j in res_list: new_file.write(j)
有许多重复的,使用
with open('data.txt', 'r', encoding='utf-8') as file: res_list = [] lines = file.readlines() print('[+]去重之前一共{0}行'.format(len(lines))) print('[+]开始去重,请稍等.....') for i in lines: if i not in res_list: res_list.append(i) print('[+]去重后一共{0}行'.format(len(res_list))) print(res_list) with open('data1.txt', 'w', encoding='utf-8') as new_file: for j in res_list: new_file.write(j)
后进行解码得到一张gif图
gif时间轴隐写(基于时间的隐写。这种方式非常隐蔽,因为GIF中的每幅图像都会 有延迟时间,可以约定不同的延迟时间代表不同的含义,例如延迟100ms代表1,延迟50ms代表0,从而达到传输秘密信息的目的。)《CTF那些事儿》
在linux下
运行
identify -format "%T" flag.gif
得到一串2050的,对其用0,1替换后得到falg
greatescape(TLS,FTP,wireshark密钥导入)
打开是流量题,有ftp协议,分析
正好对应
可以看到,用户名:bob;密码,上传了key文件
和[DDCTF2018]流量分析很像,那就试一试,另存为
保存后,http多了许多搜索FLAG
荷兰宽带数据泄露(RouterPassView,路由)
打开是bin文件
.bin 文件是一种二进制文件格式,通常用于存储可执行程序、固件、驱动程序或其他二进制数据。由于 .bin 文件是二进制格式,其内容通常不能直接以文本形式阅读或编辑,而是需要通过特定的程序或工具来处理。
用RouterPassView打开,flag为username
ai解析
[GKCTF 2021]签到
打开进行协议分析,Line-based text data占比多
追踪流,发现一串可疑的,解码发现为倒置
继续分析
在文字倒序工具,在线文字倒序进行倒置后,在进行base64解码或用脚本
# 读取1.txt文件内容 with open('1.txt', 'r') as file: lines = file.readlines() # 初始化倒序结果列表 reversed_lines = [] # 遍历每一行,进行倒序处理 for line in lines: line = line.strip() # 去掉行末的换行符 reversed_line = line[::-1] # 将字符串倒序 reversed_lines.append(reversed_line) # 将倒序后的结果写入一个新的文件,或者输出到控制台 with open('output.txt', 'w') as outfile: for reversed_line in reversed_lines: outfile.write(reversed_line + '\n') # 可选:输出到控制台 for reversed_line in reversed_lines: print(reversed_line)
得到
voip(VoIP)
VoIP(Voice over Internet Protocol),中文名称为网络语音,是一种利用 IP 网进行语音传输的技术。以下是关于它的详细介绍
播放得到
或者
导出得,听音频
OPEN-BRACE对应 {
CLOSE-BRACE对应 }
flag{9001IVR}
(来自:buuctf-voip两种解题思路酷软BUZZ再现_buuctf voip-CSDN博客)
[ACTF新生赛2020]剑龙(stegosaurus)
打开题目,有一张图片,还有一个颜文字的文件
颜文字解密
看图片,属性部分发现(猜测要用Steghide?)
密钥为颜文字解密出来的
猜测是不是AES(之前遇到过以U2F开头是),但是不是是DES
提示查看stegosaurus
Stegosaurus 是一款隐写工具,它允许我们在 Python
字节码文件( pyc
或 pyo
)中嵌入任意 Payload
。由于编码密度较低,因此我们嵌入 Payload
的过程既不会改变源代码的运行行为,也不会改变源文件的文件大小。 Payload
代码会被分散嵌入到字节码之中,所以类似 strings
这样的代码工具无法查找到实际的 Payload
。 Python
的 dis
模块会返回源文件的字节码,然后我们就可以使用 Stegosaurus
来嵌入 Payload
了。
将O_O文件改后缀.pyc
后运行./stegosaurus -x O_O.pyc
下载:Release v1.0 · AngelKitty/stegosaurus
相关:一文让你完全弄懂Stegosaurus_stegosaurus-master-CSDN博客
[INSHack2019]INSAnity(markdown)
[ACTF新生赛2020]frequency(Base64,字频统计)
打开为word文档,属性
文档提示Flag有两部分,那就试着合拼base64(Base64编码转换工具,Base64加密解密)
题目为frequency,联想字频,得到flag
很好的色彩呃?(颜色隐写:颜色提取器)
打开题目为一张条纹图片,老规矩分析并没有特别的
打开ps,颜色提取
分别为8b8b61 8b8b61 8b8b70 8b8b6a 8b8b65 8b8b73
将后两位提取出来6161706a6573,得到flag
[INSHack2019]Sanity
打开文件就得flag
[INSHack2018]Self Congratulation(二进制转字符)
打开题目,为一张图片,左上角有一个黑白的格子,老规矩分析,并没有特殊的
猜测是否为01表黑白(汉字二进制转换器,字符与2-36进制相互转换 - 千千秀字)
[INSHack2017]insanity-
打开就为flag
[2022红包题]虎年大吉(文件尾隐藏)
打开为图片,老规矩,010中发现
解密,得到flag
[HDCTF2019]你能发现什么蛛丝马迹吗( Volatility,AES, 磁盘镜像文件)
打开是img文件
磁盘镜像文件:能够完整地存储一个磁盘的内容和结构不单适用于CD,DVD还适用于其他存储设备如硬盘,U盘等
常见磁盘格式:ISO,BIN,CUE,IMG(比较 ISO、BIN/CUE 和 IMG,常见磁盘映像文件解析)
img:img格式是一种文件压缩格式(archive format),主要是为了创建软盘的镜像文件(disk image),它可以用来压缩整个软盘(通常指软软盘,Floppy Disk或Diskette)或整片光盘的内容
Volatility
是一款非常流行的开源内存取证分析框架,主要用于从计算机的内存转储(memory dump)中提取关键信息,广泛应用于数字取证、恶意软件分析和系统调试等领域。Volatility 支持多种操作系统的内存映像,包括 Windows、Linux、MacOS 等,并能够提取与操作系统相关的详细信息,如进程、网络连接、文件、注册表、内核模块等。
内存转储(Memory Dump)是指将计算机内存中的数据完整地复制到一个外部存储介质(如硬盘、U盘等)的过程。
1.识别操作系统
首先要进入到vol.py这个文件所在的目录下,然后把要分析的raw文件也放在这个目录下
imageinfo 是 Volatility 中用于获取内存镜像信息的命令。它可以用于确定内存镜像的操作系统类型、版本、架构等信息,以及确定应该使用哪个插件进行内存分析 vol.py -f 文件 imageinfo
Suggested Profile(s) 显示了 Volatility 推荐的几个内存镜像分析配置文件,这些配置文件是 Volatility 用来理解和分析内存转储文件的“模板”或“蓝图”,它们包含了操作系统特定的信息,如内核结构、函数地址、对象格式等。
2.查看进程(Volatility 的 pslist 插件可以遍历内存镜像中的进程列表,显示每个进程的进程 ID、名称、父进程 ID、创建时间、退出时间和路径等信息)
vol.py -f pc.raw --profile=Win7SP1x64 pslist #Win7SP1x64为操作系统
3.并没有什么特别的,优先查看在终端里执行过的命令
vol.py -f memory.img --profile=Win2003SP1x86 cmdscan
4.cmd命令提到了DumpIt.exe,重点分析这个进程
得到一个dmp
用foremost
因为
binwalk主要用于分析和提取嵌入在固件镜像或二进制数据中的文件和数据,特别适用于固件分析和嵌入式系统。
Foremost:主要用于从磁盘镜像、内存转储等数据源中恢复丢失的文件,适用于数字取证和文件恢复
提取出来后
jfXvUoypb8p3zvmPks8kJ5Kt0vmEw0xUZyRGOicraY4=
AES加密(在线AES加密解密 - 拉米工具)
(volatility3 使用笔记 | 独奏の小屋,内存取证 - Hello CTF Volatility安装使用 - Jinx8823 - 博客园 )
[NewStarCTF 2023 公开赛道]流量!鲨鱼!
打开流量,差不多都是404
base64
[BSidesSF2019]table-tennis
打开为流量。协议分析
分析icmp,发现像写前端页面的,重要信息应该被包裹着中间,提取,然后解密
[MRCTF2020]小O的考研复试(科学计数法)
打开题目
写脚本
a=2 for i in range(19260816): a = a * 10 + 2 a=a%1000000007 print(a)
表达式 1e9+7
是科学记数法和普通数字相加的组合,1e9
是科学记数法,表示 1乘以10的9次方
大流量分析(一)(会话统计,端口统计)
打开题目题目提示为黑客ip
会话统计
端口统计
大流量分析(二)
常见的邮件协议
发邮件:SMTP(加密版本SMTPS)
收邮件:IMAP(加密版本IMAPS),POP3(加密版本POP3S)(邮件协议讲解(SMTP、POP3、IMAP)-CSDN博客)
特性 | IMAP | POP3 |
---|---|---|
邮件存储位置 | 邮件存储在服务器上,客户端只是下载副本 | 邮件通常下载到本地客户端,并从服务器上删除(可设置保留副本) |
邮件同步 | 在多个设备上操作邮件(如标记已读、删除、移动等)会实时同步到服务器和其他设备 | 不支持同步,不同设备上的邮件状态相互独立 |
多设备支持 | 支持多设备同时登录和访问邮件,所有设备看到的邮件状态一致 | 通常只支持单设备访问,不适合多设备使用 |
离线访问 | 需要网络连接才能访问邮件,但部分客户端支持缓存部分邮件实现有限的离线访问 | 下载到本地的邮件可以在离线状态下查看 |
安全性 | 通常提供更高级的安全特性,如SSL/TLS加密 | 也支持加密,但在处理大量邮件时可能不如IMAP稳定 |
用户体验 | 提供更灵活的邮件管理方式,适合现代多设备使用的需求 | 设置和使用更直观,适合对电子邮件需求不复杂的用户 |
网络资源消耗 | 由于持续的服务器连接和实时数据同步,会比POP3消耗更多的网络资源 | 相对消耗较少的网络资源 |
那我们就分析这三个
发现只有smtp
这真的是多啊
真的很杂(文件分离,Android,新工具:jadx)
打开是一张图片,并不想相信,但是还是试一试,好吧不是
那就老规矩,慢慢试
分离后得到
是APK
APK (Android application package)指 Android 应用程序包,是 Android 系统中的一种文件格式,用来对安卓应用程序的文件进行打包。
包括静态资源文件(assets)、库文件(lib)、签名文件(META-INF)、编译资源文件(res)、配置清单文件AndroidManifest.xml,核心代码文件(classes.dex)和资源映射文件(resources.arsc)等信息
assets文件夹:可能存放一些图片包括(jpg、png、gif等),还有可能存放js文件
输入指令:cd lib,进入lib目录,再输入启动指令:java -jar jadx-gui-1.4.4.jar
[GKCTF 2021]FireFox Forensics(浏览器取证)
盲区
那就看看日志吧,
浏览器取证
logins.json会有许多敏感信息
用lclevy/firepwd: firepwd.py, an open source tool to decrypt Mozilla protected passwords (github.com)
将文件放入同一目录下,运行python3 firepwd.py
得到flag
[MRCTF2020]摇滚DJ(建议大声播放)(sstv)
打开听一听,发现和之前做的sstv很像,尝试一下
[INSHack2018]INSanity(签到)
[DDCTF2018]第四扩展FS(分离,字频统计)
打开是一张图片,属性有个备注
010查看发现有东西
分离一下,密码应该是属性
字频统计
[DASCTF X 0psu3十一月挑战赛|越艰巨·越狂热]签到
签到
[INSHack2017]hiding-in-plain-sight
打开(英语太差,翻译一下)
你的智能餐盘内置了一个摄像头,它会拍摄你的饭菜并自动上传到你的Instagram上。然而,你担心它被入侵了,正在悄悄地和你所有的粉丝分享信息。以下是最近上传到网上的照片。
010里并没有看到什么有用的东西
binwalk看有
Beautiful_Side(二维码修补)(QRazyBox)
010打开发现只有一半的二维码
也是有一点小难画的
《CTF那些事儿》
[GUET-CTF2019]520的暗示(dat文件,移动电信基站位置查询)
打开为dat文件
但这个题用图片软件打不开,查看wp,要异或
具体操作在 [ACTF新生赛2020]music(音频异或加密,010异或功能)
看不懂,喂给ai
得到flag{桂林电子科技大学花江校区}
[RCTF2019]disk(vmdk文件,fat文件,挂载,VeraCrypt)
解压缩为vmdk文件
vmdk文件:VMware Virtual Machine Disk Format,即由虚拟机VMware创建的一种虚拟硬盘格式
VMDK文件的特点
虚拟磁盘映像:VMDK文件实际上是虚拟磁盘的映像,包含了分区、文件系统和数据。
动态增长和预分配:VMDK文件可以动态增长,根据虚拟机使用的实际磁盘空间自动扩展。也可以选择预分配模式,即一次性分配虚拟磁盘所需的全部空间。
快照支持:VMDK文件支持虚拟机的快照功能,允许创建虚拟机状态的备份,以便在需要时可以还原到先前的状态。
兼容性:VMDK文件可以在不同的VMware虚拟化平台之间共享和迁移,如VMware Workstation、VMware Fusion、VMware ESXi等。
用010打开,搜索ctf得到一部分
rctf{unseCure_quick_form4t_vo1ume
用7z打开
FAT是文件配置表,是一种由微软发明并拥有部分专利的文件系统,供MS-DOS使用,也是所有非NT核心的微软窗口使用的文件系统。一张表看懂NTFS、FAT、FAT32和exFAT格式是什么意思?有何区别?-『白云居』
挂载:(Mount)是指将一个文件系统(如硬盘分区、U盘、光盘等)连接到某个目录,使其可以被访问和使用
用VeraCrypt
txt里面
知识点:
【CTF入门】BUUCTF Misc刷题(持续更新) - Super_Snow_Sword - 博客园
可观察到,为隐藏
再用txt里面的password
得到另一个半flag
[XMAN2018排位赛]file(Linux挂载,extundelete进行文件恢复)
打开题目img文件,前面遇到过
img格式是一种文件压缩格式(archive format),主要是为了创建软盘的镜像文件(disk image),它可以用来压缩整个软盘(通常指软软盘,Floppy Disk或Diskette)或整片光盘的内容
要运用到挂载
全新知识
首先用7z打开,发现有一堆图片和两个文件夹
我们应该需要做的是将lost+found文件夹中的恢复
创建一个新文件夹,然后运行,若是挂载环回设备失败的问题,sudo losetup -f
,查看以下我们空闲的设备,再进行挂载
恢复原理:
ext3/ext4 文件,删除并不是直接从磁盘中抹去,就像在windows里面,删除并不是完全删除,还可以通过回收箱里面去还原,它的删除通常只会将文件的 元数据(如 inode 表中的指针)标记为“已删除”,即将文件从目录结构中移除,释放对应的 inode 和数据块,但实际存储的数据仍然存在,直到被新的数据覆盖。
之后就会发现多了个RECOVERED_FILES
再用010打开,在末尾得到flag
[GWCTF2019]huyao(频域盲水印)
有两张图,左看右看,都看不出啥
盲水印,我们之间遇见过普通的,这次是频域盲水印
普通盲水印通常指的是在图像的空间域中嵌入水印信息,这种技术不需要原始图像即可提取水印
频域盲水印则是在图像的频域中嵌入水印信息,例如通过离散傅里叶变换(DFT)或离散余弦变换(DCT)等方法
脚本附上
# coding=utf-8 import cv2 import numpy as np import random import os from argparse import ArgumentParser ALPHA = 5 def build_parser(): parser = ArgumentParser() parser.add_argument('--original', dest='ori', required=True) parser.add_argument('--image', dest='img', required=True) parser.add_argument('--result', dest='res', required=True) parser.add_argument('--alpha', dest='alpha', default=ALPHA) return parser def main(): parser = build_parser() options = parser.parse_args() ori = options.ori img = options.img res = options.res alpha = options.alpha if not os.path.isfile(ori): parser.error("original image %s does not exist." % ori) if not os.path.isfile(img): parser.error("image %s does not exist." % img) decode(ori, img, res, alpha) def decode(ori_path, img_path, res_path, alpha): ori = cv2.imread(ori_path) img = cv2.imread(img_path) ori_f = np.fft.fft2(ori) img_f = np.fft.fft2(img) height, width = ori.shape[0], ori.shape[1] watermark = (ori_f - img_f) / alpha watermark = np.real(watermark) res = np.zeros(watermark.shape) random.seed(height + width) x = range(height / 2) y = range(width) random.shuffle(x) random.shuffle(y) for i in range(height / 2): for j in range(width): res[x[i]][y[j]] = watermark[i][j] cv2.imwrite(res_path, res, [int(cv2.IMWRITE_JPEG_QUALITY), 100]) if __name__ == '__main__': main()
[INSHack2018]42.tar.xz
题目名有点小奇特
文件首先是用 .tar 将文件打包,再使用 .xz进行压缩
点开之后,有一个md
果然深啊,陷入了循环
import tarfile import os current_path = r"C:/Users/SoberJoker/Downloads/attachment/" if __name__ == "__main__": i = 0 target = "42.tar.xz" tarname = current_path + target while True: i += 1 print("当前层数:{0}".format(i)) tar = tarfile.open(tarname) filenames = tar.getnames() if target not in filenames: break tar.extract(target,current_path) tar.close() print("最后一层:{}".format(filenames),"\n正在解压……") tar.extractall(current_path) tar.close()
后面就可以得到flag了
寂静之城
点开,啥也没有
应该是这样
[WMCTF2020]行为艺术(图片转文字)
打开有一张图片和一个txt
图片用010打开
显示crc错误
那就修改,图片504B开头为压缩包,然后要一个一个打,不是吧,不是吧,ai不能再智能一点吗
9007D8000000DF01000008000000666C 61672E74787475504B0E823010DD9370 8771DDCCB0270D5BBD0371815A9148AC 6951C2ED9D271F89C62E2693D7F76BB7 DE9FC80D2E6E68E782A326D2E01F81CE 6D55E76972E9BA7BCCB3ACEF7B89F7B6 E90EA16A6EE2439D45179ECDD1C5CCFB 6B9AA489C1218C92B898779D765FCCBB 58CC920B6662C5F91749931132258F32 BBA7C288C5AE103133106608409DAC41 9F77241A3412907814AB7A922106B8DE D0D25AEC8A634929025C46A33FE5A1D3 167A100323B1ABEE4A7A0708413A19E1 7718165F5D3E73D577798E36D5144B66 315AAE315078F5E51A29246AF402504B 01021F00140009000800DB93C55086A3 9007D8000000DF010000080024000000 000000002000000000000000666C6167 2E7478740A0020000000000001001800 4A0A9A64243BD601F9D8AB39243BD601 2D00CA13223BD601504B050600000000 010001005A000000FE00000000000000
但是需要密码,伪密码,发现Brainfuck,
得到flag,不喜欢这道题
[DASCTF X BUUOJ 五月大联动]签到
小小签到题
[INSHack2018] (not) so deep( deepsound ,john对hash爆破)
最后的flag?
“我们在探索海底时捕捉到了奇怪的声音。如果你感到困惑,也许可以再深入一点。”?
给010看看,啥也没有,
频谱图发现了它,但只有一半
要密码,不知道密码
新知识DeepSound 加密使用的密码哈希是可以被破解的,在此我们使用deepsound2john得到音频文件的hash值
[INSHack2017]10-cl0v3rf13ld-lane-signal(OGG)
unk:
用010打开,这不是jpg吗
修改之后发现还有一半
分离之后出现了个
在左下角有摩斯密码
然后解密,帮帮我
还有东西
OGG,全称为Ogg Vorbis,是一种开源的、免费的、没有专利限制的、有损的音频压缩格式。与常见的MP3格式相比,OGG提供了更高的音质和更小的文件体积,尤其适合对音质有较高要求的用户。OGG格式支持多种比特率和采样率,能够在保证音质的同时实现高效的压缩。
打开听一下向摩斯
那上面的helpme迷惑我的?