下载下来得到一个数据逆置的压缩包,直接用逆置脚本
input = open('fuck.zip', 'rb')
input_all = input.read()
ss = input_all[::-1]
output = open('flag.zip', 'wb')
output.write(ss)
input.close()
output.close()
然后解压得到一个缺少png文件头的png文件,补上文件头:89 50 4e 47
打开得到一张CRC有问题的图片,直接上脚本爆破即可拿到flag
import binascii
import struct
import sys
file = input("图片的地址")
fr = open(file,'rb').read()
data = bytearray(fr[0x0c:0x1d])
crc32key = eval('0x'+str(binascii.b2a_hex(fr[0x1d:0x21]))[2:-1])
#原来的代码: crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
n = 4095
for w in range(n):
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = binascii.crc32(data) & 0xffffffff
if crc32result == crc32key:
print(width,height)
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')
fw.write(newpic)
fw.close
sys.exit()
下载解压得到一张棋盘图片和一段棋盘加密后的密码:
这段密码是古典密码中的Polybius密码,直接去除逗号拉入随波逐流解密
得到密文:agaxxdaggvggvdvadavxdgadvgdvaaddddfxafafdgdvxxdggdggdxddfddxvgxadgvdfxvvaaddxdxxaddvgggxgxxxxgxxggxgdvvvgggagaaaagaaggagdddagagggaggagagaaavaaaxgxgggxggxgxgxxxv
然后用zsteg跑那个board的图片,得到一串base32,解密得到位移key:
JRQXG5CLMV4XWWLVONQXS6LEON6Q====
LastKey{Yusayyds}
然后直接输入棋盘中的字符开始解密:
然后得到一串十六进制字符串 ,直接十六进制转字符串得到flag
【因为省赛不能联网,只能用本地的工具,然后这个Hex好像有点问题】
后来发现最新版的CyberChef_v9.46.5可以解出来
下载后得到一个压缩包,里面有一个流量文件和七个4字节的文本文件
使用Github上的CRC爆破脚本进行爆破每个文本文件的CRC值,得到解压密码
用tshark导出数据
tshark -r segmentFlow.pcapng -Y "http.request" -T fields -e http.file_data > data1.txt
f = open('data.txt','r')
data=f.read()
data=data.split('&sa066b32bfb3e7=')
#print(data.split('&sa066b32bfb3e7='))
#以这个字符串为分隔符,后面八位就是我们要的数据
for i in range(1,len(data)):
#从第一个到最后一个列表
print(data[i][:8],end='')
#一个列表元素的前八位
打开压缩包得到flag
三层验证,前两层拉入ida看或者直接用计算器算出结果:77、55、49
第三层根据ida里的算法,直接写个for循环就出来了:1198089844
#include
using namespace std;
int main()
{
for (int v1 = 0; v1 <= 1718896489; v1++)
{
int v2 = 16;
int v3 = (v1 >> (32 - v2)) | (v1 << v2);
if (v3 == 1718896489)
printf("%d", v1);
}
return 0;
}
1.扫出 /api/record/文件 里面有个发送get请求功能的php,利用hackbar发送get请求即可得到flag
不知道是不是非预期,直接注册然后登录即可得到flag
进入web开发者工具,找到game的源码,在index.js中有对生命值和分数的定义,修改分数为10000000,再次请求页面,直接弹出flag