考点:GIF分离、时间戳序列观察、base隐写
(有的考点与0xGame\Newstar相同)
Coding In Time
考点:
GIF 帧分离
GIF 时间间隔提取
因为这道题做题方法实在是太多了,索性偷个懒,偷一手其他人的 Writeup(,下次感觉我得把 Coding In Time 加到第一部分的密码后面,不然的话得懵逼一批人,明明方法直接写题面了,但是还是想不到,可能确实是我的问题,下次一定不改(
拿到gif,拆个帧先,推荐在线网站
是一个二维码,把所有帧下载下来后利用PPT(?)拼接
得到二维码,扫描得到前半段flag,在线网站
Tick tock, tick tock, you found it,结合题目,似乎和时间有关?
扔010,看到最后一行貌似有工具?
下载下来这个工具,打开gif
这个时间排布怎么看上去有点无序,或者暗藏玄机?
以UUID的格式,flag还差9位,其中最后一位肯定是大括号,二维码刚好被拆成九个部分
取“}”的ASCII码,发现刚好等于125,由此得到flag
Convert Something
考点:
零宽字符
base64 隐写
原本想说出零宽塞得散一点,后来觉得太容易被发现了,后面还是在末尾摁塞的,算是这次比较简单的题了,贴个选手 Writeup:
零宽字符:真实存在,但是肉眼不可见的字符 零宽度空格符 (zero-width space) U+200B 零宽度非断空格符 (zero width no-break space) U+FEFF 零宽度连字符 (zero-width joiner) U+200D 零宽度断字符 (zero-width non-joiner) U+200C 左至右符 (left-to-right mark) U+200E 右至左符 (right-to-left mark) U+200F
- base隐写:不同于base编码,显著特征是
- 一行几个字符,等号时有时无
一眼base隐写,贴(抄)个脚本:
import base64
def Base64Stego_Decrypt(LineList):
Base64Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" #Base64字符集 已按照规范排列
BinaryText = ""
for line in LineList:
if line.find("==") > 0: #如果文本中有2个=符号
temp = bin(Base64Char.find(line[-3]) & 15)[2:] #通过按位与&15运算取出二进制数后4位 [2:]的作用是将0b过滤掉
BinaryText = BinaryText+"0"*(4-len(temp))+temp #高位补0
elif line.find("=") > 0: #如果文本中有1个=符号
temp = bin(Base64Char.find(line[-2]) & 3)[2:] #通过按位与&3运算取出二进制数后2位
BinaryText = BinaryText+"0"*(2-len(temp))+temp #高位补0
Text = ""
if(len(BinaryText) % 8 != 0): #最终得到的隐写数据二进制位数不一定都是8的倍数,为了避免数组越界,加上一个判断
print("警告:二进制文本位数有误,将进行不完整解析。")
for i in range(0, len(BinaryText), 8):
if(i+8 > len(BinaryText)):
Text = Text+"-"+BinaryText[i:]
return Text
else:
Text = Text+chr(int(BinaryText[i:i+8], 2))
else:
for i in range(0, len(BinaryText), 8):
Text = Text+chr(int(BinaryText[i:i+8], 2)) #将得到的二进制数每8位一组对照ASCII码转化字符
return Text
def Base64_ForString_Decrypt(Text): #Base64解密
try:
DecryptedText = str(Text).encode("utf-8")
DecryptedText = base64.b64decode(DecryptedText)
DecryptedText = DecryptedText.decode("utf-8")
except:
return 0
return DecryptedText
if __name__ == "__main__":
Course = input("base64文件绝对路径")
File = open(Course, "r")
LineList = File.read().splitlines()
print("显式内容为:")
for line in LineList:
print(Base64_ForString_Decrypt(line),end="")
print("隐写内容为:")
print(Base64Stego_Decrypt(LineList))
发现执行报错,猜测还有其他隐写
扔010,文本一般都不是什么好东西
在倒数几行发现异常,由于记事本内不可见,故尝试零宽字符隐写,在线解密
好像复制不出来(?)扔vscode试试:
复制,解密,得到后半段flag
删除零宽字符隐写,利用脚本解密base隐写,得到前半段flag
Comments | NOTHING