import base64
s='666C61677B45333342374644384133423834314341393639394544444241323442363041417D'
flag=base64.b16decode(s)
print flag
-tile是拼接时每行和每列的图片数,这里用x1,就是只一行php
-geometry是首选每一个图和边框尺寸,咱们边框为0,图照原始尺寸便可html
import os
from PIL import Image
def seoaration_gif(gif_file):
png_dir = gif_file[:-4] + '/'
os.mkdir(png_dir)
img = Image.open(gif_file)
try:
while True:
current = img.tell()
img.save(png_dir+str(current)+'.png')
img.seek(current+1)
except:
pass
if __name__=='__main__':
gif_file = 'flag.gif'
seoaration_gif(gif_file)
# coding=utf-8
# Data: 2021/7/7 16:13
# File : hebin.py
from PIL import Image
path = "C:\\Users\\backlion\\Desktop\\flag\\flag\\"
save_path = 'C:\\Users\\backlion\\Desktop\\flag\\'
im = Image.new('RGBA', (2 * 201, 600)) # 建立新照片
imagefile = [] # 存储全部的图像的名称
width = 0
for i in range(0, 201):
imagefile.append(Image.open(path + str(i) + '.png')) # 遍历,将图像名称存入imagfile
for image in imagefile:
im.paste(image, (width, 0, 2 + width, 600)) # 将图片张贴到另外一张图片上
width = width + 2
im.save(save_path + 'result.png')
im.show()
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
def flag():
str = [65, 108, 112, 104, 97, 76, 97, 98]
flag = ""
for i in str:
flag += chr(i)
print flag
flag()
# coding=utf8
from PIL import Image
import bitstring
im = Image.open('flag.png')
width = im.size[0]
height = im.size[1]
pim = im.load() # 读取图片的像素信息
bin_result = ''
for h in range(height):
for w in range(width):
if pim[w,h][0] == 255: # 判断是不是红色(R,G,B)[0]表示第一通道
bin_result += '1'
else:
bin_result += '0'
# print bitstring.BitArray(bin=bin_result).bytes.encode('hex')
with open('result.jpg','wb') as f:
f.write(bitstring.BitArray(bin=bin_result).bytes)
这个很明显了看起来像栅栏加密,下面是CTFcrack工具对其直接解密获得解密:qwlr{ddneq_@dpnwzgpc%nzqqpp_*}java
1.GPX(GPS Exchange Format, GPS交换格式)是一个XML格式,为应用软件设计的通用GPS数据格式。python
2.它能够用来描述路点、轨迹、路程。这个格式是免费的,能够在不须要付任何许可费用的前提下使用。它的标签保存位置,海拔和时间,能够用来在不一样的GPS设备和软件之间交换数据。如查看轨迹、在照片的exif数据中嵌入地理数据linux
放大发现每一个点都有序号,一共17个点,而后每一个点都对应一个国家的名称,按照顺序记录下来git
发现前面7国家城市的首字母组合BITSCTF就是flag提交的格式首字母。那么组合构成flag:BITSCTF{MAPTHEHACK},提交发现错误github
再次查看文件中有一段注释是:Use appropriate brackets and underscores to separate words if you succeed(若是成功,请使用适当的括号和下划线分隔字符)web
那么从新用括号和下划线分割符号组合flag.sql
最终flag为:shell
BITSCTF{MAP_THE_HACK}
import PIL.Image as Image
img = Image.open('low.bmp')
img_tmp = img.copy()
pix = img_tmp.load()
width,height = img_tmp.size
for w in range(width):
for h in range(height):
if pix[w,h]&1 == 0:
pix[w,h] = 0
else:
pix[w,h] = 255
img_tmp.show()
def flag():
str = [102,108,97,103,123,51,56,97,53,55,48,51,50,48,56,53,52,52,49,101,55,125]
flag = ''
for i in str:
flag += chr(i)
print flag
flag()
最终flag为:flag{38a57032085441e7}
payload = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd"
s = ""
for i in range(0,len(payload),2):
s += "0x"
s += payload[i:i+2]
s += ","
print s
# encoding:utf-8
s = [0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xe1,0xe6,0xb3,0xe3,0xb9,0xe4,0xb3,0xb7,0xb7,0xe2,0xb6,0xb1,0xe4,0xb2,0xb6,0xb9,0xe2,0xb1,0xb1,0xb3,0xb3,0xb7,0xe6,0xb3,0xb3,0xb0,0xe3,0xb9,0xb3,0xb5,0xe6,0xfd]
for i in range(135):
flag = ""
for j in range(len(s)):
flag += chr(s[j]-i)
print("第%s移位:%s")%(i,flag)
import re
s = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'
num = re.findall('\w{2}' ,s)
flag = ''
for i in num:
ch = chr(int(i,16)-128)
flag += ch
print(flag)
最终获得flag:DDCTF{9af3c9d377b61d269b11337f330c935f}
数字像素隐写题目名称:Miscellaneous-200题目描述:[Flag在这里!](flag.txt)题目附件:https://adworld.xctf.org.cn/media/task/attachments/62f4ea780ecf4e6bbef5f40d674ec073.txt题目writeup:方法一:下载附件获得一个flag.txt文件,里面有61366行,每行包含三个逗号分隔值的元组,大部分为 255,255,255 。这看起来像具备给定 RGB 值的图像。因而可推断以此txt文件可绘制一幅图片
图像的尺寸多是:一、二、6一、12二、50三、100六、3068三、61366。最可能的图像大小是 122×503px 或 503×112px。那么图像的宽度和高度为:122*503或者503*122经过python脚本将其文本(像素点)转换成图片:# coding=utf8
from PIL import Image
x = 503
y = 122
img = Image.new('RGB',(503,122),"black")
f = open('flag.txt','r')
pix=[]
for i in range(61366):
a = f.readline()
a = a.replace('\n','')
pix.append(a)
#print pix
im = []
for i in range(len(pix)):
im.append(pix[i].split(','))
#print im
for i in range(x):#x = 503
for j in range(y):#y = 122
pix = (int(im[i*122+j][0]),int(im[i*122+j][1]),int(im[i*122+j][2]))
img.putpixel((i,j),pix)#写某个像素位置的值
img.show()![]()
方法二:这里咱们能够将文本内容转换成ppm格式,PPM格式详见下面连接:转换后的flag.ppm格式说明:第一行:p3表示文件格式类型为ascii第二行:122 503 表示图像的宽度和高度用ascii表示第三行:最大像素值为255字节表示,范围为0-255第4行开始到6139行表示图像数据:按RGB的顺序排列,RGB中间用空格隔开,图片每一行用回车隔开。https://github.com/g0tmk/write-ups/blob/master/defkthon-ctf/misc-200/flag.ppm![]()
咱们经过命令 convert 将falg.ppm转换为 PNG,而后翻转 + 旋转》convert -flip -rotate 90 flag.ppm flag.png
可得到图片,图片中含有flag内容
最终获得flag:flag{ youc@n'tseeme }
端口隐写题目名称:Hidden-Message题目描述:藏的什么信息?题目附件:https://adworld.xctf.org.cn/media/task/attachments/8868f595665740159650d6e654aadc93.pcap题目writeup:下载附件,获得一个流量数据包flag.pcap,此数据包用wireshark打开发现都是UDP协议,其中源端口末尾号一直变化(发现只有红框位置0和1不断变换 ),考虑到为二进制,结合kali的tshark(wireshark命令版)和perl语法,将二进制数据转化以后的到flag
tshark -r flag.pcap -Tfields -e udp.srcport #打印数据包UDP协议源端口tshark -r flag.pcap -Tfields -e udp.srcport | while read port; do echo -n ${port: -1}; done | tr 01 10 | perl -lpe '$_=pack"B*",$_'
最终获得flag:Heisenberg
题目名称:Recover-Deleted-File题目描述:恢复磁盘而且找到FLAG.题目附件:https://adworld.xctf.org.cn/media/task/attachments/c297795634cb4f6e8e1d88be044ec0c4.gz题目writeup:下载附件,并对附件解压,得到一个disk-image文件
经过binwalk命令查看文件包含的属性,发现是一个linux磁盘文件binwalk disk-image
经过fls列出linux磁盘文件有哪些文件和操做记录,能够看到有一个目录lost+found以及被删除操做flagfls disk-image
根据flag描述,须要磁盘数据还原,可经过 extundelete命令对其进行恢复,这里能够恢复出flag目录extundelete disk-image --restore-file /flag
或者extundelete disk-image --restore-all进入到恢复数据目录,发现有一个flag文件, 修改flag执行程序,并执行flag,可得到flag内容cd RECOVERED_FILES/chmod +x flag./flag
最终得到flag:de6838252f95d3b9e803b28df33b4baa
下载附件,获得一个flag.mkv文件,打开听到一段奇怪的声音,可能有flag有关,须要将视频中的音频文件提取出来。
这里使用 MKVToolnixPortable对音频进行提取,能够看到2个mp3音频文件,先导出第二个音频文件,并保存为flag.mp3(第一个mp3音频文件,经过后面的音频文件分析没有包含flag内容)
经过音频分析工具a udacity进行分析,查看频谱图,能够看到有包含falg的内容,并非很清晰,须要视图放大查看。![]()
最终得到flag为:flag{fun_v1d30_mu51c}
题目名称:很普通的数独题目附件:https://adworld.xctf.org.cn/media/task/attachments/dee83d60aeda4a8cae93c5aac8f8a2ff.zip题目writeup:下载附件,解压附件获得25张图片, 把25张重合到一块儿去,获得一个完整的数组,可是没有什么用,想到25张数独能够组成5x5,是否是一张二维码呢?仔细观察,若是把有数字的方格涂黑,下面三张图片就是二维码的三个定位码,再注意到图片数量为25张,是5的平方,因此,这25张图片组合起来就是一张二维码
观察发现,一、五、21这三张图片是定位块,可是顺序不对,将顺序换为五、2一、1
因而把有数字的转换成1,没有数字的地方转换成0,再按顺序转换成01,获得下述数据将其保存为f lag.txt:111111101010101000101000001111110000101111111
100000101100111101010011101100011001001000001
101110101110011111010011111101000101001011101
101110101101100010001010000011110001101011101
101110100011100100001111101111111011101011101
100000101100100000011000100001110100001000001
111111101010101010101010101010101011101111111
000000000011001101001000110100110011100000000
110011100100100001111111100100101000000101111
101001001011111111101110101011110101101001100
100000111100100100000110001101001101010001010
001100010011010001010011000100000010110010000
010110101010001111110100011101001110101101111
100011000100011100111011101101100101101110001
001100110100000000010010000111100101101011010
101000001011010111110011011111101001110100011
110111110111011001101100010100001110000100000
110101000010101000011101101101110101101001100
010011111110001011111010001000011011101101100
011001011001010101100011110101001100001010010
010111111111101011111111101101101111111111100
011110001100000100001000101000100100100011110
111110101110011100111010110100110100101010010
110010001011101011101000111100000011100010000
101011111011100111101111111100001010111110010
110100011000111000100111101101111101000100010
111101111110001001000011010110001111110111110
011001010101000110010100010001000101101010001
011101110101101101100100001101101000111101001
110110001001101100010101101111110100101100110
000011100111000000000100001010101111100010010
111010010011110011101110010100001011111010010
101001100010111111110100000100001010101010100
000010011001001101110101001111100101111101101
000010111101110001101011000001000101110100110
011110011010100010100000011011000001110010000
100110100100001101111111101100101110111110011
000000001111110101101000101011100100100011010
111111100011111011011010101101110011101011110
100000101110101101101000111110010001100010001
101110101011100001111111101101001000111111011
101110100110111101101000001001101100011101101
101110100000011101100001101010110010010010001
100000101011001011111011001011000011010110000
111111101010101001111011110101101110000101101使用python脚本转换成图片:from PIL import Image
x = 45
y = 45
im = Image.new('RGB', (x, y))
with open('flag.txt') as f:
for i in range(x):
ff = f.readline()
for j in range(y):
if(ff[j] == '1'):
im.putpixel((i, j), (255,255,255))
else:
im.putpixel((i, j), (0,0,0))
im.save("flag.jpg")
生成一张二维码图片
经过二维码QR Research扫描图片可得到一串base64的字符串
Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs97 次 base64 解码获得https://base64.us/
最终获得flag:flag{y0ud1any1s1}
题目名称:很普通的Disco题目附件:https://adworld.xctf.org.cn/media/task/attachments/48dd5a182fcc477a9a83200d800e26db.zip题目writeup:下载附件,解压附件获得一个Disco.wav音频文件,因而联想和音频隐写有关先用audacity打开,发现开头有杂音,放大查看开头
仔细的查了查,恰好有105个峰值频率高低起伏的点。峰值高的点为1,峰值低的点为0。输出出来是105个二进制数,每7个数为一组,恰好15组,也就是15个字母。
输出的二进制文件:110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101二进制位,8个二进制转成一个字符。这里只有105个,前七位1100110,是f的二进制形式。因此须要取出凑够8位,将步长设置成7,而后 + 0,再转成字符串
使用如下python脚本进行转换成ascii:
s = '110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101'
flag = ''
for i in range(0,len(s),7):
flag += chr(int('0'+s[i:i + 7],2))
print(flag)
最终flag:flag{W0W*funny}
题目名称:miscmisc题目附件:https://adworld.xctf.org.cn/media/task/attachments/d037429cf055493b879ef09d9b59bd41.zip题目writeup:1.下载附件,对其进行解压,获得一张bugoucuci.png图片,并经过binwalk对图片文件进行查看文件包含属性,发现图片文件隐藏了zip和PN两种文件。
经过foremost命令对 bugoucuci.png图片进行分离,获得2个压缩文件和一个PNG图片文件。其中2个压缩文件的内容是同样的,只须要分析其中一个压缩文件就好了。![]()
![]()
这里对其中的一个压缩文件00000090进行解压,获得一个chadiand.zip压缩文件和一张chayidian.jpg图片文件
直接解压 chadiand.zip文件,提示须要输入密码。首先猜想多是爆破,可是爆破了十多分钟也没出密码。说明密码和爆破无关。
接着分析 chayidian.jpg图片文件,经过binwalk命令发现图片文件包含了一个压缩文件和1张PNG图片
经过foremost对 chayidian.jpg图片文件进行分离,获得一个00000318.zip压缩文件。
对 00000318.zip压缩文件进行解压,获得一个flag.txt文件,查看文件内容并非flag
根据解压出来的flag.txt文件以及须要密码解压的chadiand.zip文件中也包含了一个flag.txt文件,猜想是须要用到明文攻击才能解压出 chadiand.zip文件
首先经过winrar压缩软件对flag.txt进行打包压缩成flag.zip,而后对比其中CRC32的值,发现chadian.zip和flag.zip的 CRC32值是同样的。那么就能够经过明文攻击能够解压出 chadian.zip
这里经过ARCHRP对 chadian.zip文件进行明文攻击
等待十分钟后,显示加密密钥已恢复成功
而后点肯定而后保存chadiand_decrypted.zip
对 chadiand_decrypted.zip进行解压,获得如下三个文件
解压whoami.zip文件,提示须要输入密码,既然解压获得三个文件,那么解压的密码必定和另外两个文件有关。
打开world.png图片文件,图片内容中 发现有提示: pass in world. 此时想到密码可能与此图片还有world.doc文件有关,在kali下经过binwalk分析无果。‘
那么考虑多是图片的隐写,因而打开stegsolve打开world.png文件,而后试探各类通道,在LSB BGR条件下发现pass,因此这是LSB信息隐写。获得pass:z^ea,去解压文件 发现不行![]()
![]()
打开world.doc文件,显示是一段提示内容:除了这个就差一点点了,并 根据提示 pass in world 猜测 world.doc 文件 可能还会有隐藏文字
勾选word选项中的隐藏的文字,就会显示出几行像密码的 隐藏字符
到目前为止,咱们从world1.png中获得 pass:z^ea 在world.doc文件中获得几行隐藏的字符串。测试了z^ea+world.do每行中隐藏的字符串都不能解压压缩文件。出题人真的是脑洞大开,谁会想到最后的密码是 pass内容+world里每行字符串的最后一个字符,
因而解压密码就是 :z^ea4zaa3azf8经过该密码解压出whoami压缩包,打卡压缩包中的whoami.txt就获得了flag内容。
最终flag为:flag{12sad7eaf46a84fe9q4fasf48e6q4f6as4f864q9e48f9q4fa6sf6f48}
题目名称:flag_universe题目描述:please find the flag in our universe!题目附件:https://adworld.xctf.org.cn/media/task/attachments/d2ced53c4a2e476995845c72bc39939d.zip题目wirteup:打开流量包,使用筛选器筛出ftp数据流,能够看到经过ftp命令操做了universe.png和flag.txt以及new_universe.png图片
其中对比较显眼的 new_universe.png图片进行TCP数据流追踪![]()
![]()
追踪数据流在到TCP流为10时,出现了一段base64字符串![]()
对base64解密后获得:flag{This is fake flag hahaha},提交显示错误,该flag是假的flag![]()
继续追踪TCP数据流,universe.png中也没有flag,当追踪到第14个TCP数据流时,有一个new_universe.png![]()
经过原始数据格式保存为flag.png
能够看到成功导出了一张PNG图片
经过stegsolve图片隐写工具进行查看,发现存在LSB隐写,可得到flag内容
最终flag为:flag{Pla te_err_klaus_Mai l_Life}
题目名称:奇怪的TTL字段题目描述:咱们截获了一些IP数据报,发现报文头中的TTL值特别可疑,怀疑是通讯方嵌入了数据到TTL,咱们将这些TTL值提取了出来,你能看出什么端倪吗?题目附件:https://adworld.xctf.org.cn/media/task/attachments/0bf565e00b864f4ba06efc858056c7e9.zip题目writeup:下载附件,对其解压获得一个ttl.txt文件,其内容就是一组ttl的值![]()
该文本文件中的TTL值只有4种值:,而且根据题目的介绍咱们知道数据隐藏在这些值里,那么就比较容易想到的是信息隐藏在二进制中。
将这四个数值都转换成二进制获得 :111111、11111十一、11111十一、10111111。 TTL 值为一个 8 位整数,不足 8 位的二进制数开头补 0,变为 8 位。
即:00111111、111111十一、01111十一、10111111
变的只有前面两位,后面6位1不变,只有前面两位藏了数据,也就是说一组TTL值能够隐藏一个字节,提取开头两位为:00、11、01、10,刚好为全排列,能够用于数据的存储:
值(D) 二进制 63 255 127 191
TTL=127--》01
TTL=191--》10
TTL=127--》01
TTL=191--》10
获得一个字母对应的8位即:01100110,即字母为:f
若是传输4个就是一字节,取前面的2位组成8位,对照二进制字母表,能够发现前面是ffd8,jpg图片标志
经过python脚本将ttl.txt提取转换后的数据并保存为图片,是由于二进制转成ASCII时发现是 jpg 文件格式。
f = open('ttl.txt','r')
TTL = f.readlines()
p = []
for i in TTL:
p.append(int(i[4:]))
s = ''
for i in p:
if i == 63:
a = '00'
elif i == 127:
a = '01'
elif i == 191:
a = '10'
elif i == 255:
a = '11'
s += a
print(type(s))
print(s)
import binascii
flag = ''
for i in range(0,len(s),8):
flag += chr(int(s[i:i+8],2))
flag = binascii.unhexlify(flag)
wp = open('res1.jpg','wb')
wp.write(flag)
wp.close()
获得一张resq.jpg二维码图片:
经过binwalk命令查看二维码图片包含有6张图片
并经过foremost分离出res1.jpg图片
最终获得6张残缺的图片,可拼图为一张二维码图片![]()
用ps拼接成二维码图片
经过 QR resarch二维码扫描工具读取出内容出来:
其内容为:key:AutomaticKey cipher:fftu{2028mb39927wn1f96o6e12z03j58002p}根据key的信息,能够联想到一种经常使用的加密,Automatic加密经过在线 解密网站:https://www.wishingstarmoye.com/ctf/autokey
最终flag为:flag{2028ab39927df1d96e6a12b03e58002e}
题目名称:2-1题目附件:63/255/127/19100111111111111110111111110111111基础知识:
89 50 4E 47 0D 0A 1A 0A 是PNG头部署名域,表示这是一个PNG图片00 00 00 0D 描述IHDR头部的大小49 48 44 52 是Chunk Type Code, 这里Chunk Type Code=IHDR00 00 00 CE 00 00 00 CE 08 02 00 00 00 描述了Chunk Data,它是可变长度数据, 前四个字节(前8位)是宽度,后四个字节(后8位)节是高度。F9 7D AA 93 是IHDR的CRC校验
题目writeup:
下载附件,对其进行解压获得一张misc4.png图片,可是没法打开文件
经过winhex打开misc4.png图片,发现PNG图片文件头开头的 前 4位(80 59) 不对。
PNG (png),文件头:89504E47 文件尾:AE 42 60 82
将其修改成89 50 并保存为flag.png
依然打不开文件
经过tweakPNG工具查看png图片
IHDR的CRC值,发现CRC值不对
把图片文件IHDR 的crc校验值 修改成 55 d5 f6 4f 后发现 仍是打不开
发现图片的宽度为0,须要
根据 crc校验值 算出图片的宽度(前8位为图像宽度,后八位为图像高度)
下面经过python 脚本算出图片的宽度:
import os
import binascii
import struct
misc = open("misc4.png","rb").read()
for i in range(1024):
data = misc[12:16] + struct.pack('>i',i)+ misc[20:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x932f8a6b:
print (i)
获得
709
,十六进制转换后获得,
0x2c5
接下来咱们在winhex中将宽度字节改成
02
C5
保存为falg2.png,打开图片发现包含flag内容:
最终flag为:
wdflag{Png_C2c_u_kn0W}
题目名称:3-11
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/d0430db27b8c4d3694292d9ac5a55634.png
题目writeup:
用 Stegsolve 打开,发现是 LSB 隐写,开头 PK是 zip 的文件头
将其另存为flag.zip,打开压缩文件,发现文件已损坏
因而用winrar自带的修复压缩文件的功能进行修复压缩文件
将修复好的文件保存为
rebuilt.flag.zip,对其进行解压,获得一个flag.txt文件,文件内容为base64
将base64经过在线工具进行解密,发现是一张PNG图片
将其保存为flag1.png图片,发现没法打开该文件
如何变成图片呢,尝试直接改后缀名根本不行,这时候想到能不能base64转图片呢,百度一下找到了在线网站,直接转换获得了答案
网站:https://tool.jisuapi.com/base642pic.html
最终flag:
FLAG{LSB_i5_SO_EASY}
题目名称:互相伤害!!!
题目描述:flag 为flag{XXX}内的XXX内容
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/0fb3ac2f54b7497cb35e04265c478b76.zip
题目writeup:
下载附件,解压附件获得一个文件flag
经过file命令查看flag文件属性为pcapng流量包文件
将其后缀名改成.pcapng
用Wireshark打开流量包,过滤http协议,发现存在多个jpg文件请求
经过导出http对象,将jpg文件所有提取出来
提取出共21个jpg文件,能够看出所有为斗图素材
首先分析图15,发现其中包含了二维码图:
经过在线二维码扫描(这里使用QR Rearch扫描不起)可得到一串加密的字符串:
https://cli.im/deqr
U2FsdGVkX1+VpmdLwwhbyNU80MDlK+8t61sewce2qCVztitDMKpQ4fUl5nsAZOI7 bE9uL8lW/KLfbs33aC1XXw==
根据图片文字提示“本发布会由AES独家赞助”那么上面二维码获取的字符串为AES加密的字符串。其中图片上的文字“CTF"可能和AES解密的密钥有关。可将CTF试做为解密的密码。
http://www.jsons.cn/aesencrypt/
获得解密后的字符串:668b13e0b0fc0944daf4c223b9831e49
以
668b13e0b0fc0944daf4c223b9831e49 提交flag,发现提交失败,显然不是flag.
继续经过binwalk对其余文件进行依次分析,发现其余图片文件都包含有zip文件。
对其中任意一个图片文件10.jpg进行分离获得一个压缩文件
解压缩文件获得一张二维码图片,并经过QR Rearch二维码扫描工具,发现扫描出来的内容几乎都是“扔下内衣真有一线生机???交出内裤才有活路”
仔细观察,图5文字内容能够简单理解为“扔下内衣,交出内裤”,观察斗图素材发现图11符合上述描述“来呀,互相伤害”这张图也与题目名称“互相伤害”有相同有关联。 那么就继续对图11重点分析
图 5
图11
经过foremost命令对其进行分离,获得一个压缩文件
可是解压缩提取出来的压缩文件,提示须要密码
输入上面解出来的字符串,可正常解开压缩文件
可得到一张画中画的二维码图片
扫描图二维码获得字符串:“扔下内衣真有一线生机????交出内裤才有活路!!!!“。
发现二维码中心还有一个二维码,将小二维码截取出来,扫码获得flag内容:
获得flag:
flag{97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758}
可是根据题目描述,flag 为flag{XXX}内的XXX内容
最终flag为:
97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758
题目名称:签到题
题目描述:
SSCTF线上选举美男大赛开始了,泰迪拿着他的密码去解密了,提交花括号内内容(Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==)
题目writeup:
根据描述,那么falg提交的格式为ssctf{}或者flag{},
根据flag提交格式,所以最终的
字符串必然是被栅栏密码加密过的
提交花括号内容:
Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==
经过ctfcarckt00ls对其进行base64解密:
获得base64解密字符串:
ggQ@gQ1fqh0ohtjpt_sw{gfhgs#}
上段密文的开头是g因此必然还要通过以此凯撒密码加密的
经过对其凯撒解密,移位14获得看起来像FLAG格式的开头的SSC
获得
位移14的凯撒解密为:
ssC@sC1rct0atfvbf_ei{srtse#}
再栅栏密码解密,每组字数8,第二栏就是ctf内容:
最终ctf结果为:
ssctf{ssCtf_seC10ver#@rabit}
题目名称:隐藏的信息
题目描述:
这是一个被混淆的文件,可是我忘记了这个文件的密码。你可以帮助我还原明文吗?
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/2eb44acfc89d4f0f9fa221d21ab96033.zip
wireup:
方法一:
1.下载附件,解压附件获得一个message.txt文本文件,打开文件发现内容是一串八进制的数字,须要将其转换成ascii
2.经过 python脚本将八进制数字转换成ascii
import re
import sys
s='0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113 '
a=re.findall('\d{3,}',s)
for i in a:
sys.stdout.write(chr(int(i,8)))
获得ascii:V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K,该字符串看起来像base64加密
经过ctfcarckt00ls工具的base64解密功能对其解密,获得flag
方法二:
使用“八进制 十进制 ASCII相互转换【支持多个字符串】”工具解—>输入内容—>八进制转换ASCII
获得asccii:
V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K
base64解密:
https://base64.us/
最终获得flag:
ISCC{N0_0ne_can_st0p_y0u}
题目名称:saleae
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/5621c80acfbc445d9eb252b2660070b5.zip
题目writeup:
下载附件,对其进行解压获得一个
saleae.logicdata
文件,该文件为逻辑分析仪数据文件。经过谷歌搜索是须要用Logic软件打开,打开文件发现有4个channel,其中channel 0和channel 2有波形。
Logic 软件下载地址:https://downloads.saleae.com/logic/1.2.18/Logic+1.2.18+Win+64+Standalone.zip
在analyzers新建一个SPI项目
参数设置以下,其中MOSI是主输出从输入,MISO是主输入从输出:
channel 0:规律性,等宽,是 CLK
channel 1:无波形,是主输出端 MOSI
channel 2:波形宽度不一,携带数据,为主输入端 MISO
channel 3:数据传输是低电平,为CS偏选端
直接竖着查看,可得到flag
flag最终为:
flag{12071397-19d1-48e6-be8c-784b89a95e07}
题目名称:intoU
题目描述:
I'm so into you I can barely breath.And all I wanna do is to fall in deep (IntoU歌曲歌词)
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/d7351710703a49cda273d3284e7a3df1.zip
题目writeup:
下载附件,对其进行解压获得一个音频文件,经过Audacity打开音频文件进行分析,首先选择频谱图,看了大半天也没发现有flag.
经过谷歌搜索,发现须要调整到较小的采样率,才有可能显示音频隐写,下面将其采样率设置为8000 HZ
Ariana Grande---->频谱图—>采样率—>8000 HZ
拖动滚动条到最右边,并视图--放大,可查看到flag内容
最终得到flag:
RCTF{bmp_file_in_wav}
题目名称:Excaliflag
题目描述:
只有一个真正的黑客能够从这个地方获得flag
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/f3f30930116f4b168e132db45907d0ee.png
题目wireup:
首先下载附件,解压得到一张图片,经过stegsolve图片隐写工具打开,而后切换色块,终得到flag内容:
最终获得flag:
3DS{Gr4b_Only_th1s_B1ts}
题目名称:Just-No-One
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/7932f0a447b74cfc8b6820aa706e9446.exe
题目writeup:
下载附件,得到一个exe可执行程序,点击安装,进入下一步,须要输入密码,猜想可能须要逆向破解密码
尝试经过winhex和IDA分析无果
仔细观察,在安装软件协议的条款里面发现了一些关于和flag有关的信息:YOU MAY SUBMIT THIS TO GET TEN POINTS(你能够提交这段字符串得到标识)。
YOU MAY SUBMIT THIS TO GET TEN POINTS:
ILOVEREADINGEULAS.
那么最终flag为:
ILOVEREADINGEULAS
题目名称:信号很差先挂了
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/b90a71f6e04b427dba2f8d307de79145.zip
题目writeup:
下载附件,对其进行解压,得到一张apple.png图片,经过stegsolev图片隐写工具的analyse---data extract功能对图片的LSB进行查看分析
发现图片的LSB隐写中包含了PK,该PK为压缩数据包头。
将其保存为flag.zip
对flag.zip进行解压,发现压缩文件已损坏
经过winrar的修复压缩文件功能对已损坏的flag.zip压缩文件进行修复
保存为rebuilt.flag.zip,并对其进行解压,得到一张pen.png图片
再次经过stegsolve对pen.png图片进行通道查看,发现好几个通道中都有一些条纹
而后两张图片长得同样,因此很容易想到多是藏有盲水印,因而用opencv处理盲水印获得flag。
合成盲水印图,盲水印用到的py脚本能够在github上下载,https://github.com/chishaxie/BlindWaterMark,使用时须要安装前置opencv-python库
python bwm.py decode pen.png apple.png flag.png
打开合成的盲水印图片flag.png,可看到flag内容:
最终flag为:
unctf{9d0649505b702643}
题目名称:黄金六年
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/b6c6823cbfc246249941630e647bf7b6.zip
题目writeup:
下载附件,对其解压获得一个mp4视频文件,经过winhex打开,发如今末尾隐藏的base64加密字符串
也能够经过strings命令查看文件中包含的字符串
strings hj6.mp4
获得base64加密字符串:
UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQAD
Dx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEf
JkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA==
经过在线解密工具,解密得到看起来像rar文件
https://base64.us
这里经过python脚本将base64转换成rar压缩包:
import base64
code = "UmFyIRoHAQAzkrXlCgEFBgAFAQGAgADh7ek5VQIDPLAABKEAIEvsUpGAAwAIZmxhZy50eHQwAQADDx43HyOdLMGWfCE9WEsBZprAJQoBSVlWkJNS9TP5du2kyJ275JzsNo29BnSZCgMC3h+UFV9p1QEfJkBPPR6MrYwXmsMCMz67DN/k5u1NYw9ga53a83/B/t2G9FkG/IITuR+9gIvr/LEdd1ZRAwUEAA=="
r = base64.b64decode(code)
file = open("flag.rar", "wb")
file.write(r)
file.close()
打开压缩包,发现须要输入密码,经过爆破也没解密出来,解密密码可能和视频中的图片有关。
经过free video to jpg converter,将视频中的图片提取出来
下载地址:https://secure-sc-dvdvideosoft.netdna-ssl.com/FreeVideoToJPGConverter_5.0.101.201_o.exe
获得316张图片,经过仔细查看,发现有4张图片里面包含了二维码
下面是提取出含有二维码的4张图片,并对4张图片中的二维码单独截图出来,经过QR Rearch进行扫描,并得到4个KEY的密码字符串。
作这种题目着实应该把屏幕调亮一点,最后一张二维码找了很久死活找不到,调亮了屏幕以后就立马找到了。
将二维码扫描得到的4个KEY的字符串按照属性
拼接获得解压密码key:iwantplayctf
输入iwantplayctf密码对flag.zip进行解压缩,得到flag.txt
打开flag.txt得到flag
最终flag为:
roarctf{CTF-from-RuMen-to-RuYuan}
题目名称:打开电动车
题目描述:
截获了一台电动车的钥匙发射出的锁车信号,3分钟以内,我要得到它地址位的所有信息。flag内容二进制表示便可
题目附件:
https://adworld.xctf.org.cn/media/uploads/task/3d93f0c47ad94e31882e0a670eb6f5cf.zip
题目writeup:
下载附件,对其解压,获得一个音频文件,经过Audacity打开音频文件,而后经过视图---放大查看波形图。
能够看到短波和长波
短波为0,长波为1,转换获得 01 字符串:
0 011101001010101001100010
根据题目信息说须要地址位的所有信息
查资料获得:信号是由同步引导码,地址位和数据位构成
固定码遥控信号的构成:
一个是PT226x的,前面4bit表示同步码,中间的8bit表示地址码,后面的4bit表示功能码,后面最后一个是中止码
一个是PT224x的,前面8bit表示同步码,中间的20bit表示地址码,后面的4bit表示功能码,后面最后一个是中止码
PT226X和PT224X不一样之处,PT226X 中不可能出现10这种状况
,这道题就是PT224X.
钥匙信号(PT224X) = 同步引导码(8bit) + 地址位(20bit) + 数据位(4bit) + 中止码(1bit)
仔细查看波形图获得以下:

因此去掉前面的同步码0和后面的数据位0010获得所有20bit地址位以下:
01110100101010100110
最终flag:
flag{
01110100101010100110}
题目名称:hong
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/3fce1ffa2af0438f82c38e321d3d3032.rar
题目writeup:
下载附件,对其解压,获得一个hong.mp3的音频文件,经过binwalk分析音频文件包含的文件,能够看到包含有jpeg图片文件
binwalk hong.mp3
经过foremost命令对hong.mp3文件进行分离,获得2个图片文件
foremost hong.mp3
首先查看0000161.jpg文件,发现是一张二维码图片
经过QR Rearch二维码识别工具对
0000161.jpg文件进行扫描识别,获得一串十六进制字符串
经过在线网站https://ab126.com,对十六进制字符串进行转换为ascii,解密出来是乱码,无用。
03f30d0ad41db4576300000000000000000100000040000000730d0000006400008400005a00006401005328020000006300000000030000000700000043000000734b0000006401006402006403006404006405006406006407006707007d00006408007d0100781e007c0000445d16007d02007c01007400007c0200830100377d0100712800577c010047486400005328090000004e694d0000006972000000692e0000006948000000696f000000696e0000006967000000740000000028010000007403000000636872280300000074030000007374727404000000666c6167740100000069280000000028000000007304000000612e7079520300000001000000730a00000000011b0106010d0114024e280100000052030000002800000000280000000028000000007304000000612e707974080000003c6d6f64756c653e010000007300000000
最后查看另外一张00000269.jpg图片,发现图片中包含有flag内容
最终flag为:
BCTF{cute&fat_cats_does_not_like_drinking}
题目名称:3-1
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/e395d6e5b79b4cc49ee4e5c704f872ae
题目writeup:
下载附件,对其进行解压,获得一个二进制文件flag,经过file命令查看二进制文件flag,发现文件格式为rar压缩包
file flag
将其二进制文件flag 重命名为flag.rar,并对压缩文件进行解压,获得一个文件flag1
再次经过file命令查看falg1的文件格式为pcapng
file flag1
将flag1重命名为flag1.pcapng,并经过wireshark打开。搜索关键字falg,发如今http协议中有flag.zip和flag.txt进行get 请求。猜想flag和这2个文件有关。
经过wireshark的导出对象---http功能可导出http请求全部的文件内容。
这里导出http请求的全部对象保存到flag文件夹下
导出来2个文件分别为receiver和flag.zip,并对flag.zip进行解压缩,发现须要密码,解压密码须要在流量包中分析得到。
接下继续分析流量包,对flag.rar http get 请求处进行追踪流--tcp流分析
追踪 TCP 流 6 时,发现一些linux操做命令和一段 python 代码。
Linux 系统帐户为 root,密码为 jfm,尝试用 jfm 解压失败,接下来执行 ls,cd tf/ cd wireshark/,ls 命令。 执行 cat 1 时获得 rar 文件内容, 执行 cat 2,获得 base64 编码,解码发现乱码,尝试直接用于解压,失败 执行 cat 3,获得 一段 python 代码,代码中有 AES,猜想是须要解密 其中,那个base64应该就是密文base64加密以后的字符串。
该python是一个经过AES的CBC模式将字符串进行加密或解密的脚本,其中IV是密钥也是偏移量
# coding:utf-8
from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64
IV = 'QWERTYUIOPASDFGH'
def decrypt(encrypted):
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.decrypt(encrypted)
def encrypt(message):
length = 16
count = len(message)
padding = length - (count % length)
message = message + '\0' * padding
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.encrypt(message)
str = 'this is a test'
example = encrypt(str)
print(decrypt(example))
对上面python 代码进行修改 ,并对其编 码 用 base64 解 码 后 解 密 ((注意要先用base64解码才能进行AES-CBC解密):
# coding:utf-8
__author__ = 'YFP'
from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64
IV = 'QWERTYUIOPASDFGH'
def decrypt(encrypted):
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.decrypt(encrypted)
def encrypt(message):
length = 16
count = len(message)
padding = length - (count % length)
message = message + '\0' * padding
aes = AES.new(IV, AES.MODE_CBC, IV)
return aes.encrypt(message)
str = 'this is a test'
example = encrypt(str)
print(decrypt(example))
#增长以下两行
a='19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo='
print(decrypt(base64.b64decode(a)))
执行修改后的python 脚本,获得base64的AES解密字符串为:
No_One_Can_Decrypt_Me,并将该字符串做为密码对flag.zip进行解压缩
成功解压出flag.txt,打开flag.txt,得到flag
最终flag为:
WDCTF{Seclab_CTF_2017}
wdflag{My_c4t_Ho}
题目名称:4-2
题目描述:
格式为flag{xxxxxxxx}
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/1ddbc89c20c845928498c22cd3faf1c4.txt
题目writeup:
下载附件 ,获得一个.txt文件,打开文件发现下面几个标红的字母具备必定频率数
经过词频分析获得flag,附在线分析网站:https://quipqiup.com
获得flag:
classical-cipher_is_not_security_hs
根据题目描述,提交的flag格式,最终flag为:
flag{classical-cipher_is_not_security_hs}
题目名称:5-1
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/badd3e0621ff43de8cf802545bbd3ed0
题目writeup:
下载附件,对其进行解压,获得一个二进制文件flag,经过命令file查看文件类型,并无发现文件类型
file flag
经过winhex打开flag文件,发现字符是加了密,猜想可能xor加密
这里经过xortool(
https://github.com/hellman/xortool)对flag文件进行分析.
xortool.py是基于python的脚本,用于完成一些xor分析,包括:1.
猜测key的长度;2.
猜测key的值;3.
解密一些通过xoe加密的文件.
下面查看flag的xor加密的密钥长度,能够看到占比最大的百分百就是密钥长度为13
xortool flag
xortool flag -l 13 -c 20
参数解释:
其中-l就是指定密钥长度,-c表示出现频率最高的字符。字符出现的最高频率通常为20
尝试出了key:GoodLuckToYou(根据经验将试出来的),经过如下python脚本对原文件进行异或解密:
import os
c = open("flag",'rb').read()
key = "GoodLuckToYou"
def xor(c,k):
keylen = len(k)
res = ""
for pos,c in enumerate(c):
res +=chr(ord(c) ^ ord(k[pos % keylen]))
return res
print xor(c,key)
运行python脚本获得一串字符串,其中字符串中就包含有flag内容
最终 flag为:
wdflag{You Are Very Smart}
连环套娃压缩包破解之音频隐写
题目名称:Miscellaneous-300
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/f932f55b83fa493ab024390071020088.zip
题目writeup:
下载附件对其解压,获得一个压缩文件flag.zip,对其进行解压,提示须要输入密码,猜想须要对其压缩包进行密码爆破
经过ziperello对压缩包进行爆破
发现爆破出来的密码是46783,密码正好是里面压缩包名称。
经过该密码对压缩包进行解压,可成功解密
解压完了,又出现了一个新的压缩包,解压压缩包,又提示须要输入密码
接着,按照上面的爆破压缩包密码的方法进行爆破
结果发现密码就是压缩包内文件名。发现的规律是:解压里面又是个压缩包,解压一波,发现又是一个压缩包,后一个文件名的名字是前一个压缩包的解压密码。
让咱们编写一个sh 脚本,并调用fcrackzip命令递归地破解和提取zip文件:
crack_zip.sh:
#!/usr/bin/env bash
while [ -e *.zip ]; do
files=*.zip;
for file in $files; do
echo -n "Cracking ${file}… ";
output="$(fcrackzip -u -l 1-6 -c '1' *.zip | tr -d '\n')";
password="${output/PASSWORD FOUND\!\!\!\!: pw == /}";
if [ -z "${password}" ]; then
echo "Failed to find password";
break 2;
fi;
echo "Found password: \`${password}\`";
unzip -q -P "${password}" "$file";
rm "${file}";
done;
done;
执行sh脚本:
bash crack_zip.sh
让它执行一段时间后,最后会获得一个12475.zip,发现纯数字密码爆破失败,这个一个复杂的密码加密的压缩包
经过fackzip的复杂密码对其进行爆破,发现爆破出来的密码为:boyzz
./fcrackzip -u -c a1 -l 1-6 12475.zip
经过unzip对12475.zip进行解压,获得一个音频文件mess.wav
unzip -q -P b0yzz 12475.zip
经过音频隐写工具Audacity打开音频文件mess.wav,并选择频谱图,就能够查看到flag的内容。


最终 falg为:
BallsRealBolls
题目名称:双色块
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/45663022307c456897d30639f56da759.zip
题目writeup:
方法一:
下载附件,对其解压,获得一个out.gif的动态图片,且只存在绿色和紫色两个颜色,分布不均匀
经过binwalk命令查看图片隐藏的文件,能够看到隐藏了png图片
binwalk out.gif
经过foremost命令对out.gif进行分离,可到一个00001436.png图片
foremost out.gif
查看分离的图片,发现图片的内容为key:ctfer2333,猜想和flag有关,且
分析这张图片无异常。
经过GifSplitter将out.gif文件进行分帧处理
获得576张图片,全部图片中只有紫色和绿色两种颜色,应该对应的是1和0或者0和1,可转换成01二进制数据
按照紫色1,绿色0的规则按照前后顺序排列出了如下数据:
011011110011100001000100011011000111100001001011001010110100100000111000011101110111001101101001010110000110010100101111010001010101001001000110011100000100000101001101011000010100001001010000011010010100100101100011011010100011000101110011010010000111100101000111010011110100110101101101010100010100010001101011010010110010101101110101010110000111001101010110010110100110011101110010011001010011010101000100010100110101100001110111001111010011110101101000011010000110100001101000011010000110100001101000011010000110100001101000011010000110100001101000011010000110100001101000
每八个一组转换成ascii字符。那么经过在线工具二进制转asciii,
http://www.txttool.com/wenben_binarystr.asp,可获得ascii为:o8DlxK+H8wsiXe/ERFpAMaBPiIcj1sHyGOMmQDkK+uXsVZgre5DSXw==hhhhhhhhhhhhhhhh
按照紫色0,绿色1的规则排列出如下数据:
100100001100011110111011100100111000011110110100110101001011011111000111100010001000110010010110101001111001101011010000101110101010110110111001100011111011111010110010100111101011110110101111100101101011011010011100100101011100111010001100101101111000011010111000101100001011001010010010101011101011101110010100101101001101010010001010101001111000110010101001101001011001100010001101100110101100101010111011101011001010011110001000110000101100001010010111100101111001011110010111100101111001011110010111100101111001011110010111100101111001011110010111100101111001011110010111
同理,按照上面方面,获得一些乱码字符,显然不是咱们想要的加密字符串。
获得的加密字符串:
o8DlxK+H8wsiXe/ERFpAMaBPiIcj1sHyGOMmQDkK+uXsVZgre5DSXw==hhhhhhhhhhhhhhhh
这应该是des加密或者base64,可是有提示key,因此应该是des加密,key是上面的图片内容ctfer2333,正常来讲des结尾是=,最后一串h去掉就行了。
而后到http://tool.chacuo.net/cryptdes解密
方法二:
gif轮播以后发现是⼀个24*
24的像素点,每一个像素为10
10,每一个点颜⾊为00ff00或是ff00ff 先把gif分离成单帧,那么能够经过 python脚本对其进行分割成不一样的单帧图像。
# ! /usr/bin/env python2
# -*- coding: utf-8 -*-
import os
from PIL import Image
def main(gif_file):
png_dir = 'C:\\Users\\backlion\\Desktop\\flag\\'
img = Image.open(gif_file)
while True:
current = img.tell()
img.save(png_dir + str(current + 1) + '.png')
img.seek(current + 1)
if __name__ == '__main__':
gif_file = 'out.gif'
main(gif_file)
而后读取每一个png中的对应点的信息,并按照8bit转换为ascii
#! /usr/bin/env python2
# -*- coding: utf-8 -*-
import os
from PIL import Image
def main():
png_dir = 'C:\\Users\\backlion\\Desktop\\flag\\'
ret = ""
for i in range(0, 24):
line = ""
for j in range(0, 24):
file_name = "C:\\Users\\backlion\\Desktop\\flag\\" + str(i * 24 + j + 1) + ".png"
x = j * 10 + 5
y = i * 10 + 5
img = Image.open(file_name)
img = img.convert("RGB")
img_array = img.load()
r, g, b = p = img_array[x, y]
if g == 255:
line += "0"
if r == 255 and b == 255:
line += "1"
if len(line) == 8:
ret += chr(int(line, 2))
line = ""
print ret
if __name__ == '__main__':
main()
最终flag为:
flag{2ce3b416457d4380dc9a6149858f71db}
题目名称:Py-Py-Py
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/58cadd8d8269455ebc94690fd777c34a.pyc
题目writeup:
下载附件,获得一个pyc文件,经过uncompyle6命令将其反编译成python脚本
uncompyle6 flag.pyc>flag.py
其中flag.py是一个rc4的加密解密python脚本:
# uncompyle6 version 3.7.4
# Python bytecode 3.6 (3379)
# Decompiled from: Python 2.7.18 (default, Feb 27 2021, 08:40:44)
# [GCC 10.2.1 20210110]
# Warning: this version of Python has problems handling the Python 3 "byte" type in constants properly.
# Embedded file name: pystego.py
# Compiled at: 2017-08-01 00:44:47
# Size of source mod 2**32: 1961 bytes
import sys, os, hashlib, time, base64
fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='
def crypto(string, op='encode', public_key='ddd', expirytime=0):
ckey_lenth = 4
public_key = public_key and public_key or ''
key = hashlib.md5(public_key).hexdigest() ##将public_key以MD5方式加密,再转化成十六进制
keya = hashlib.md5(key[0:16]).hexdigest()
keyb = hashlib.md5(key[16:32]).hexdigest()
keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''
cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()
key_lenth = len(cryptkey)
string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string
string_lenth = len(string)
result = ''
box = list(range(256))
randkey = []
for i in xrange(255):
randkey.append(ord(cryptkey[(i % key_lenth)]))
for i in xrange(255):
j = 0
j = (j + box[i] + randkey[i]) % 256
tmp = box[i]
box[i] = box[j]
box[j] = tmp
for i in xrange(string_lenth):
a = j = 0
a = (a + 1) % 256
j = (j + box[a]) % 256
tmp = box[a]
box[a] = box[j]
box[j] = tmp
result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])
if op == 'decode':
if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0:
if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:
return result[26:]
return
else:
return keyc + base64.b64encode(result)
if __name__ == '__main__':
while True:
flag = raw_input('Please input your flag:')
if fllag == crypto(fllag, 'decode'):
print('Success')
print crypto(fllag, 'decode')
break
else:
continue
# okay decompiling flag.pyc
根据脚本分析,在原flag.py脚本基础上,直接把下面这段代码删除了,再添加一句 print crypto(fllag,'decode')就能够修改为解密脚本。
if __name__ == '__main__':
while True:
flag = raw_input('Please input your flag:')
if flag == crypto(fllag, 'decode'):
print('Success')
break
else:
continue
最终修改后的解密脚本为:
# uncompyle6 version 3.7.4
# Python bytecode 3.6 (3379)
# Decompiled from: Python 2.7.18 (default, Feb 27 2021, 08:40:44)
# [GCC 10.2.1 20210110]
# Warning: this version of Python has problems handling the Python 3 "byte" type in constants properly.
# Embedded file name: pystego.py
# Compiled at: 2017-08-01 00:44:47
# Size of source mod 2**32: 1961 bytes
import sys, os, hashlib, time, base64
fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='
def crypto(string, op='encode', public_key='ddd', expirytime=0):
ckey_lenth = 4
public_key = public_key and public_key or ''
key = hashlib.md5(public_key).hexdigest()
keya = hashlib.md5(key[0:16]).hexdigest()
keyb = hashlib.md5(key[16:32]).hexdigest()
keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''
cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()
key_lenth = len(cryptkey)
string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string
string_lenth = len(string)
result = ''
box = list(range(256))
randkey = []
for i in xrange(255):
randkey.append(ord(cryptkey[(i % key_lenth)]))
for i in xrange(255):
j = 0
j = (j + box[i] + randkey[i]) % 256
tmp = box[i]
box[i] = box[j]
box[j] = tmp
for i in xrange(string_lenth):
a = j = 0
a = (a + 1) % 256
j = (j + box[a]) % 256
tmp = box[a]
box[a] = box[j]
box[j] = tmp
result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])
if op == 'decode':
if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0:
if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:
return result[26:]
return
else:
return keyc + base64.b64encode(result)
print crypto(fllag,'decode')
执行脚本,获得 flag 的值:The challenge is Steganography, 直接提交不对,加flag{}提交仍然也不对。
根据脚本解密获得The challenge is Steganography,是pyc的隐写,百度到在pyc中隐藏payload的工具为stegosaurus。
经过 stegosaurus脚本查看隐藏在flag.pyc中的字符串
./stegosaurus -x flag.pyc
最终 flag:
Flag{HiD3_Pal0ad_1n_Python}
题目名称:warmup
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/b7b7e994d7fb4316b03f446295cfd03b.zip
题目writeup:
下载附件,对其进行解压,获得一个png图片以及一个压缩包文件
对压缩包进行解压提示须要输入密码,这里猜想可能须要爆破压缩包密码或者明文攻击、
打开压缩包预览,发现其中包含的图片文件和附件解压获得的图片文件名称是一致的。猜想须要用到明文攻击。
这里首先对open_forum.png图片经过winrar对其压缩成文件open_forum.zip
同时查看到
open_forum.zip文件的CRC232值和须要密码解密的压缩包文件warmup.zip的CRC232的值同样。那么warmup.zip压缩包解压存在明文攻击。
经过ARCHRP攻击对
warmup.zip进行明文攻击
这里可能彻底解密成功须要一夜,实际须要不了那么多少,在10分钟左右就能够终止。
终止压缩包爆破后,可肯定直接保存为warmup_decrypted.zip文件。
对
warmup_decrypted.zip文件进行解压缩,成功解压出三张图片,其中fuli.png和fuli2.png图片显示是同样的。
经过stegsolve对其fuli.png图片进行通道查看,并无发现啥。
再次经过
stegsolve对其fuli2.png进行通道查看,发现出现一些
根据以上判断,2张图片存在盲水印。
合成盲水印图,盲水印用到的py脚本能够在github上下载,https://github.com/chishaxie/BlindWaterMark,使用时须要安装前置opencv-python库
经过bwm.py脚本能够将2张图片合成一张图片flag.png
python bwm.py decode pen.png apple.png flag.png
打卡flag.png图片,能够看到flag内容
最终flag为:
flag{bWm_Are_W0nderfu1}
题目名称:传感器1
题目描述:
已知ID为0x8893CA58的温度传感器的未解码报文为:3EAAAAA56A69AA55A95995A569AA95565556 此时有另外一个相同型号的传感器,其未解码报文为:3EAAAAA56A69AA556A965A5999596AA95656 请解出其ID,提交格式为flag{xxx}
题目writeup:
基础知识:
曼彻斯特编码(Manchester Encoding),也叫作相位编码( Phase Encode,简写PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。
它在以太网媒介系统中的应用属于数据通讯中的两种
位同步方法里的自同步法(另外一种是外同步法),即接收方利用包含有同步信号的特殊编码从信号自身提取同步
信号来锁定本身的时钟脉冲频率,达到同步目的。
IEEE 802.4(令牌总线)和低速版的IEEE 802.3(以太网)中规定, 按照这样的说法, 01电平跳变表示1, 10的电平跳变表示0。
方法一:
先把16进制3EAAAAA56A69AA55A95995A569AA95565556都转成2进制,获得:
1111101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110
又得知曼切斯特是从低到高跳变表示“1”,从高到低跳变表示“0”,即01->1,10->0。能够看到二进制除了前4位,后面都是10,01,差分曼切斯特有跳变为"0",无跳变为"1
那么实际上转换成的二进制为(去掉前面最前面1111):
101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110
所以将编码进行曼切斯特解码:
00000000001001001101100010001001001111001010010110000100000110000001
转成16进制获得:
24d8893ca584181
又得知第一个ID为0x8893CA58的温度传感器就在第一个曼切斯特解码24d8893ca584181中,是第4位到11位为:8893ca58,转换成大写为8893CA58
根据上面原理,可将3EAAAAA56A69AA556A965A5999596AA95656,转换成曼切斯特解码为24d8845abf34119,取第4位到11位,最终为:8845ABF3
那么flag为:
flag{8845ABF3}
方法二:
python脚本(这里须要将3E前缀去掉,由于转换成二进制为1111,不存在曼切斯特解码特性)
char = "AAAAA56A69AA556A965A5999596AA95656"
result = char.replace("5","0101").replace("6","0110").replace("9","1001").replace("A","1010")
num = len(result)
flag = ""
flag_final = ""
result = "0"+result
for i in range(1,num,2):
if result[i:i+2][0] !=result[i-1]:
flag += "0"
if result[i:i+2][0] ==result[i-1]:
flag += "1"
print hex(int(flag,2)).upper()[2:]
或者:
id1 = 0x8893CA58
msg1 = 0x3EAAAAA56A69AA55A95995A569AA95565556
msg2 = 0x3EAAAAA56A69AA556A965A5999596AA95656
def calc(msg):
id=''
s = bin(msg)[6:]
for i in range(2, len(s), 2):
if s[i-2:i] == s[i:i+2]:
id += '0'
else:
id += '1'
return hex(int(id, 2)).upper()
print(calc(msg1))
print(calc(msg2))
能够看到id是取结果的4到11位,ID为:
8845ABF3
最终flag为:
flag{8845ABF3}
题目名称:halo
题目描述:
答案的格式为flag{XXXX}
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/56afc3a6c8d04cde8b1354b77fe91731.zip
题目writeup:
下载附件,对其进行解压获得一个txt文件,文件内容看来像base64加密
经过在线base64解密网站对其进行base64解密,获得特殊的字符串:igq4;441R;1ikR51ibOOp,提交flag显示不对
尝试多种后状况后,该加密字符串为base64和异或的加密,经过如下脚本对其进行解密:
import string
from base64 import *
b=b64decode("aWdxNDs1NDFSOzFpa1I1MWliT08w")
data=list(b)
for k in range(0,200):
key=""
for i in range(len(data)):
key+=chr(ord(data[i])^k)
print (key)
获得的结果,发现惟一一个没有特殊字符为:jdr78672Q82jhQ62jaLL3
最终flag为:
flag{jdr78672Q82jhQ62jaLL3}
题目名称:picture3
题目描述:
flag提交形式为flag{XXXX}
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/7128eb78f49242d39b71e0496c3b52ab.jpg
题目writeup:
下载附件,获得一张图片,经过binwalk对其进行解压。获得149EC.zip 和stego.txt文件
binwalk -e flag.jpg
查看压缩包149EC. zip文件里面包含一个stego.txt文件且CRC32值为0CF2D018,同时对其解压,提示须要输入密码,该文件名和图片解压出来的stego.txt是相同的。须要解压该压缩包文件,猜想是须要用到明文攻击
、、
经过winrar对
stego.txt文件进行压缩成stego.txt,查看CRC32值和149EC. zip压缩包中值相同
这里经过ARCHPR对压缩包
149EC. zip进行明文攻击,可是明文攻击并不能恢复
经过winrar的自带修复功能对
149EC. zip进行修复
修复后的文件保存为rebuilt.149EC.zip,对其进行解压,发现不须要输入密码,直接解压获得一个stego.txt文件
打开文件发现是不少行base64加密字符串
b2Q5dU==
aDk5Ni==
ZG8wOW==
ZzYxYh==
ZjU4NT==
aXBjNF==
Q3dTM2==
d1Y5c1==
dFA3WV==
ZDNQUP==
ejhBMT==
dUowaW==
OVQ2ZD==
aUM5ZU==
NnFFek==
ZGc0T/==
NGpWNE==
NVZpUW==
ejZDTm==
a1VEN5==
azNMUX==
TXlhNW==
bjZwWm==
Q2Q0b1==
猜想多是base64隐写:
依次读取每行,从中提取出隐写位。
若是最后没有‘=’,说明没有隐写位,跳过。
若是最后是一个‘=’,说明有两位隐写位,将倒数第二个字符转化为对应的二进制索引,而后取后两位。
若是最后是两个‘=’,说明有四位隐写位,将倒数第三个字符转化为对应的二进制索引,而后取后四位。
将每行提取出的隐写位依次链接起来,每8位为一组转换为ASCII字符,最后不足8位的丢弃。
经过脚本跑出隐写,得到flag:
def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s1)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res
def solve_stego():
with open('stego.txt', 'rb') as f:
file_lines = f.readlines()
bin_str = ''
for line in file_lines:
steg_line = line.replace('\n', '')
norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
diff = get_base64_diff_value(steg_line, norm_line)
pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2)
else:
bin_str += '0' * pads_num * 2
res_str = ''
for i in xrange(0, len(bin_str), 8):
res_str += chr(int(bin_str[i:i + 8], 2))
print res_str
solve_stego()
根据falg提交格式,最终flag为:
flag{Ba5e_64OFive}
题目名称:7-2
题目描述:
提交格式为wdflag{......}
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/118956c97c7c4a3e9b1508c1f5ea44be.zip
题目writeup:
下载附件,对其进行解压,获得不少文件,文件的名称都是base64加密字符串
同时,打开其中任意文件,发现都是一串十进制加密字符串
经过脚本对解压的全部文件夹的文件名进行将base64解密
# coding=utf-8
import os
import base64
for name in os.listdir("C:\\Users\\backlion\\Desktop\\flag\\problem\\"):
print name
# 因为文件名不是4的倍数,须要在后面补‘=’
missing_padding = 4 - len(name) % 4
if missing_padding:
name += '=' * missing_padding
print str(base64.b64decode(name.encode()))
执行脚本获得只有文件名YWluaWRleGluZ3podWFuZw base64解密出来的字符串ainidexingzhuang是正常显示无乱码。
打开
YWluaWRleGluZ3podWFuZw文件,发现一串数字,其中包括了{和}中的数字。那么颇有可能这些数字解码后就是flag
获得{和}中的数字为:82 42 82 52 63 21 42 22 73 21
该数字使用的是手机9键加密,第一个数字表明9键键盘下的数字,第二个数字表明该数字下的第几个字母。
获得9键盘加密的字符为:
uhukoahbra
经过凯撒解密获得一个有意义的字符ylyoselfve就是ctf的内容。
根据flag提交格式,最终flag为:
wdflag{ylyoselfve}
题目名称:4433
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/3f8b0f935fa74f3c9cea382bf3687569.rar
题目writeup:
下载附件,对其解压获得一张图片,经过stegsolve图片隐写工具打开,查看通道,在橙色通道中出现了一张二维码图片。
经过QR Reach二维码图片扫描工具识别出内容是一串摩尔斯字符。
获得内容:
...--.----...--..
想要解码可是不知道怎么分割,因而想到题目名称 4433,表示 4 个 4 个 3 个 3 个分隔开。
那么摩尔斯密码加密密文为:
...-/-.--/--./..-/-..
经过在线工具工具对其解密获得:VYGUD
https://www.bejson.com/enc/morse/
将VYGUD进行flag提交,发现不对
由搜索引擎搜索摩斯密码可知摩斯密码经常使用的缩写中:VY表明VERY,GUD表明GOOD,那么flag为内容为:VERYGOOD
可参考:https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81#%E5%B8%B8%E7%94%A8%E7%BC%A9%E5%86%99
最终flag为:
flag{
VERYGOOD}
题目名称:Run
题目描述:
Run away! nc **.**.**.** XXXX
题目场景:
111.200.241.244:64579
题目writeup:
nc连上发现是一个python沙盒逃逸,一些能引起命令执行的python库所有被禁用了。
最后在网上发现这么一个文章
http://www.javashuo.com/article/p-uwtotpaa-p.html
经过().class.bases[0].subclasses()获取当前加载的类
发现func_globals被过滤了,咱们使用__getattribute__绕过
最终payload:
w = ().__class__.__bases__[
0].__subclasses__() o = w[
59].__enter__.__func__.__getattribute__(
'__global' +
's__')[
's'+
'ys'].modules[
'o'+
's'] s = o.__getattribute__(
'sy' +
'stem') s(
'/bin/sh')
执行payload获得当前sh脚本运行权限
经过cat命令查看文件5c72a1d444cf3121a5d25f2db4147ebb,获得falg
最终flag:
flag{eee93c33d97aa55f785a7d10ba4ae3ce}
题目名称:流量分析
题目描述:sql注入
题目附件:
https://adworld.xctf.org.cn/media/task/attachments/4d7c14206a5c4b74a0af595992bbf439.pcapng
题目writeup:
下载附件,获得一个
pcapng流量包文件,经过wrireshark打开该文件,根据题目描述SQL注入,那么过滤HTTP协议,对其进行分析
看到不少注入语句,sql注入语句都是字符32开始的,第一波语句结束字符是102,刚好对应的ascii为f
第二波语句结束字符是108,对应的ascii为l

第三波语句结束字符是97,对应的ascii为a
第四波语句结束字符是103,对应的ascii为g
第六波语句结束字符是123,对应的ascii为{
以此类推获得flag: flag{c2bbf9cecdaf656cf524d014c5bf046c}
也能够经过python脚本获取
import re
import os
def getflag(contents):
req_reg = re.compile(r'0,1\),(\d+),1\)\)=(\d+)%23')
results = req_reg.findall(contents)
flag_map = {}
for result in results:
if result[0] in flag_map:
if int(result[1]) > flag_map[result[0]]:
flag_map[result[0]] = int(result[1])
else:
flag_map[result[0]] = int(result[1])
flag = ""
for i in range(1,39):
flag += chr(flag_map[str(i)])
print(flag)
if __name__ == "__main__":
basedir = os.path.dirname(__file__)
filename = "misc.pcapng"
file_path = os.path.join(basedir, filename)
print(filename)
with open(file_path, 'rb') as f:
getflag(f.read())
最终获得falg:
flag{c2bbf9cecdaf656cf524d014c5bf046c}
题目名称:传感器2
题目描述:
已知ID为0x8893CA58的温度传感器未解码报文为:3EAAAAA56A69AA55A95995A569AA95565556 为伪造该类型传感器的报文ID(其余报文内容不变),
请给出ID为0xDEADBEEF的传感器1的报文校验位(解码后hex),以及ID为0xBAADA555的传感器2的报文校验位(解码后hex),并组合做为flag提交。
例如,若传感器1的校验位为0x123456,传感器2的校验位为0xABCDEF,则flag为flag{123456ABCDEF}。
题目writeup:
方法一:
先把16进制3EAAAAA56A69AA55A95995A569AA95565556都转成2进制,获得:
1111101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110
又得知曼切斯特是从低到高跳变表示“1”,从高到低跳变表示“0”,即01->1,10->0。能够看到二进制除了前4位,后面都是10,01,差分曼切斯特有跳变为"0",无跳变为"1
那么实际上转换成的二进制为(去掉前面最前面1111):
101010101010101010101001010110101001101001101010100101010110101001010110011001010110100101011010011010101010010101010101100101010101010110
所以将编码进行曼切斯特解码:
00000000001001001101100010001001001111001010010110000100000110000001
转成16进制获得:
24d8893ca584181
又得知第一个ID为0x8893CA58的温度传感器就在第一个曼切斯特解码24d8893ca584181中,是第4位到11位为:8893ca58,ID转换成大写为:8893CA58
根据上面原理,可将3EAAAAA56A69AA556A965A5999596AA95656,转换成曼切斯特解码为24d8845abf34119,取第4位到11位,ID转换成大写为:8845ABF3
或者
id1 = 0x8893CA58
msg1 = 0x3EAAAAA56A69AA55A95995A569AA95565556
msg2 = 0x3EAAAAA56A69AA556A965A5999596AA95656
def calc(msg):
id=''
s = bin(msg)[6:]
for i in range(2, len(s), 2):
if s[i-2:i] == s[i:i+2]:
id += '0'
else:
id += '1'
return hex(int(id, 2)).upper()
print(calc(msg1))
print(calc(msg2))
根据计算机网络报文首部的一些学习,这里我进行了类比,可能校验位应该是最后几位,依次尝试过都无果,但想到,除了最后2位不一样,中间ID不一样,其余均相同,可见校验位就是最后2位,那么校验位的计算应该是用CRC进行计算,而前面的位数是7位,尝试计算,可是得出的值并非预计的。
后来想到可能缺位了,故又往前算了一位:
获得:024D 8893CA58 41 81和024D 8845ABF3 41 19
对024D 8893CA58 41和024D 8845ABF3 41进行CRC8运算
能够获得81和19,与猜测一致
下面就能够用这个方法解出flag
带入ID:DEADBEEF和BAADA555
获得:024D DEADBEEF 41
https://www.23bei.com/tool-233.html
024D BAADA555 41
计算CRC8,分别获得:B5和15
方法二:
也能够经过脚本获取:
#!/usr/bin/python
def crc(x,y):
while(x>y):
l = len(bin(x)) - len(bin(y))
t = int(bin(y)[2:]+'0'*l,2)
x ^= t
return x
m = 0
for i in range(0x200):
if i < 100:
continue
if crc(0x24d8893ca584100,i) == 0x81 and crc(0x24d8845abf34100,i) == 0x19:
m = i
print i
break
print hex(crc(0x00024ddeadbeef4100,m))
print hex(crc(0x00024dbaada5554100,m))
最终获得flag:
flag{B515}