两个是当时没做出来的,直接拿出题人官方WP贴上了(

原地址

考点:GIF分离、时间戳序列观察、base隐写

(有的考点与0xGame\Newstar相同)

Coding In Time

出题人:WDLJT

考点:

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

出题人:WDLJT

考点:

零宽字符

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

截图

醉后不知天在水,满船清梦压星河