本文最后更新于 371 天前,其中的信息可能已经有所发展或是发生改变。
[Week 3] 画画的baby
vol.py -f painting.raw imageinfo查看镜像信息- 得到系统
Win10x64_19041 vol.py -f painting.raw --profile=Win10x64_19041 pslist查看进程信息- 查找mspaint.exe进程得到PID5372
vol.py -f painting.raw --profile=Win10x64_19041 memdump -p 5372 -D output提取内存数据- 参考资料1,资料2
- 将bmp文件后缀改为data,用GIMP打开-GIMP下载链接
- 图像类型改为RGB Alpha
- 调整高为合适高度,我是1070
- 综合调节位移和宽(我的理解是位移是不同时间状态下的屏幕快照,而宽可以用来改变倾斜状况

- (这参数调得真tm操蛋
- 0xGame{Tr33_AnD_F1ow3r}
[Week 3] 重生之我在南邮当CTF大王
- RPG小游戏
- 查看save文件夹能发现是由RMMZ制作的RPG游戏,寻找适用于RMMZ的修改器
- 我使用的修改器
- 用修改器打开可以在发现第五个名字是Base64编码,flag1:0xGame{NJUPT_(这个对应的就是许愿树的名字
- 在地图左下角樱花林处进去回答问题(答案4,3),能拿到flag2:Has_
- 进入图书馆发现等待时间太久,所以还是打开修改器
- 进入对应地图选择NPC2>事件解释器
- 或者寻找代码,打开data>Map009.json
- 得到flag3:VerY_v3Ry_V3ry_
- 进入南一食堂,就是右下角那个,和小狗对话,对话内容是兽语加密,但文字不好提取
- 所以进入文件夹,打开data>Map007.json,得到四段密文
- ~呜嗷嗷嗷嗷呜呜~~嗷呜嗷呜呜~呜~嗷啊嗷啊呜嗷嗷啊
- 嗷~嗷~呜呜嗷~嗷嗷嗷嗷呜呜~~嗷呜嗷呜呜啊~呜啊啊
- 嗷啊呜~啊嗷呜~嗷~呜呜嗷~啊嗷嗷嗷呜啊嗷嗷啊呜嗷
- 呜呜啊啊啊~啊嗷啊呜嗷呜啊嗷啊
- 合并后解密-工具
- 得到flag4:YummY_FooD}
- 0xGame{NJUPT_Has_VerY_v3Ry_V3ry_YummY_FooD}
[Week 3] 神秘电波
- 拿到grc和wav文件
- wav文件用windows自带播放器打开没声音,用专业音频处理软件打开听到杂音
- 搜索grc格式找到GNU Radio
- 用GNU打开grc文件发现是对txt文件进行了BPSK调制,并将输出混入随机数,形成了wav文件
- 需要手搓BPSK解调器
- 参考官方文档–示例grc文件,grc打开如图

- 可以观察到第一行是调制,将结果关联到流Stream
- 再通过第二行解调流,输出结果,并通过另一条流输入,来在GUI上展示比较结果
- 在此示例上修改,将所有与流和GUI有关的模块删去,将比较结果的分支删去
- 回头重新分析调制的过程,发现调制缺少了Polyphase Clock Sync模块,因而在解调中要用上
- 调制中还乘上了随机数,解调中要除去
- 最终梳理好数据类型,手搓解调器,如下图,获取grc文件

- 最上面的参数直接复制调制的就行
- P.S.在运行前先generate生成py文件,另外我自己win下无法正常运行,遂换kali
- 有窗口弹出后即可中止
- 检查生成文件发现无法打开,010打开发现全是00和01组成
- 手写脚本处理
def count(n: list):
'''用来统计出现次数最多的字符,以此来排除乱码'''
res = ""
for i in range(0,len(n[0]),2):
tmp = {}
for j in n:
if j[i:i+2] in tmp:
tmp[j[i:i+2]] += 1
else:
tmp[j[i:i+2]] = 1
counts = 0
hexs = ""
for key, value in tmp.items():
if value > counts:
hexs,counts = key,value
res += chr(int(hexs,16))
return res
def read_file_in_hex(file_path):
with open(file_path, 'rb') as file:
content = file.read()
hex_output = content.hex()[:18000] # 截取一段恰当长度,后面都是乱码+重复
ans = ""
for i in range(0,len(hex_output),2):
ans += str(hex_output[i+1])
result=""
while int(ans[0:8],2) != 0x30: # 第一次输出时发现是乱码,要处理移位,根据flag猜测第一位是0
ans = ans[1:]
for i in range(0,len(ans),8):
result += str(hex(int(ans[i:i+8],2))[2:])
result = result[:-(len(result)%88)]
uuid = []
for i in range(0,len(result),88):
uuid += [result[i:i+88]]
print(count(uuid))
file_path = 'flag.txt'
read_file_in_hex(file_path)- 0xGame{38df7992-6c53-11ef-b522-c8348e2c93c6}
[Week 3] Happy 1024!
- 来个脑筋急转弯
- 代码里有酒,梦,星,河,直接百度搜索

- 0xGame{醉后不知天在水,满船清梦压星河。}
