0x1 给大黑阔们跪了

本来准备出去玩的,结果到家后发现要过两天才有人回来,就趁机做了把XDCTF的线上,结果被虐的北都找不到了,看着6星和Sigma一路突突突,只能膜了。。有思路的一共三题,结果最后只做出来1题。。。另外两题做到一大半怎么也进行不下去了。 总体来说虽然没做出来多少,但是感觉XDCTF水平是很高的了,题目也都很虐人(Pia!<(=o ‵-′)ノ☆ 这里写个备忘,毕竟是一次经历。

0x2 没写出来但有思路的的

Reverse 01

一个linux 的elf x64程序,还是挺有意思的,可惜没做出来,逆向功力不够,大概思路:

  • 入口函数是函数0x4008e1,里面会有ptrace反调试,然后获取输入
    • 这里的输入从分析看应该是要解密后面说到的加密方法的
  • 后面的坑就来了,如果顺着0x4008e1走,最后会打印出来"Congratulations? Key is XDCTF{Input}",一看就不对
  • 继续看,发现有个函数在0x400787,最后也会打印出来一个flag,而且会吧上面的string的“?”换成“!”,所以这个函数才是真正会吐出flag的过程
  • 解体思路应该是修改执行流到这里,但是问题有三个:
    • 逆向出加密算法
    • 给出能通过的输入
    • 在什么时刻强制从0x4008e1跳到0x400787
  • 因为没搞定上面三个问题,所以没写出来

最后说下里面加密会用到字符串ZzAwZF9DcjRrM3JfZzBfb24=,不过加密算法,我就真不想看了。

Misc 01

这题后来给了tips,也就是org原图。

  • 先用stegsolv打开zzzzzzyu.png,跳几个plane后可以看到顶部有个条,原图org.png是没的
  • 用stegsolve两张combine一下,然后sub后发现顶部会出现两像素宽的条状区,里面零星分布一些黑色像素点
  • 导出成bmp,去色成黑白
  • 用python 的PIL库把顶部两行的按照像素输出,白色是0,黑色是1,可以得到如下字符串:
11111111111111111111111111111110111111111111111111101011111111111111110111111111111111111011111111111111111111111110111111111111111101011111111111111111111111111111110111111110101110111111111111111111111111111011101110111111111111111111111111110111111111111111111111011111110111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111110101111111011111010111111011111111111111111111111111111111111111111110111111111111111111010111111101111101011111101111111111111111111111111111111101110111111111111111

但是接下来用jpk处理的时候,4bit格式format,然后处理完实在找不到什么特征了。。作罢。。。(o«(≧口≦)»o

0x3 解出来的

嘛,怎么着还是做出来一题的,至少不是鸭蛋,咩哈哈哈哈<(= ̄_ ̄)σ…<( _ _)ノ|

给了一个数据文件,file一下识别不了格式,strings也没啥有用信息,bless看的时候发现开头几个字符是VIMG….fat12….VMWare Visual什么的,搜了下,唯独fat12有点信息,但是挂载的话还是会失败。

换用binwalk,可以看到里面有很多东西,但是有两个zip文件,而且最后那个里面有flag.txt,于是把两个都dd出来 不过要说的是dd中间那个的时候,如何能精确的dd出来还是听麻烦的,试了好久,dd出来了一个没有多余附加尾部的zip,如果有更好的方法还希望有人留言说下哈

dd出来后有flag的那个,姑且命名为flag.zip有密码,试着去掉密码位后一样不行,说明不是伪加密,再看没加密的那个,姑且命名为x.zip,发现两个都有个readme.txt

用unzip -v查看了下两个的内容,结果两个readme.txt相同诶,于是想到明文破解,把x.zip里除readme.txt外的文件全部删掉,然后用pkcrack大法,大概用法是

pkcrack -c “readme.txt” -p raedme.txt -C flag.zip -P x.zip -d ok.zip

  • -c是指出加密zip里readme.txt的文件结构,从顶层文件夹开始
1
2
3
flag.zip
	|---readme.txt
	|---flag.txt

这里flag.zip文件结构如图

  • -p是明文的readme.txt所在位置,防止麻烦都放一块,当前目录下
  • -C是待破解加密包flag.zip
  • -P是包含明文readme.txt的无密码zip包x.zip
  • -d指明破解成功后的明文包输出为ok.zip

然后后开跑,大概10分钟搞定,得到无密码包,拿到flag

如图:

misc02.0 misc02.1