2022网刃杯CTF - REVERSE - squid
附件下载
squid 密码: ubgs
一、信息搜集
1. 基本信息
2. 字符串信息
根据字符串信息,初步可以判断是pyinstaller打包的ELF程序。
3. 运行
注意:运行时千万不要和其他文件放在同一个文件夹!!!
注意:运行时千万不要和其他文件放在同一个文件夹!!!
注意:运行时千万不要和其他文件放在同一个文件夹!!!
3.1 第一次运行
查看生成的Readme.txt文件内容
说是勒索病毒,让我们不要再运行了。
没关系,打好快照,不怕,再次运行。
3.2 第二次运行
可以看到文件的后缀名被改为了.WNCRY
,如果当前目录存在其他文件和文件夹的话,后缀名也会被修改(血的教训)。
但好在它只是改了文件的后缀,并非真的勒索病毒,虚晃一枪。
3.3 第三次运行
可以看到,即使被修改了后缀名的文件,依然是可以运行的,文件内容没变。
二、解题思路
1. 解包
首先使用pyinstxtractor进行解包。
解出的内容如下:
2. 修复pyc文件头
使用struct.pyc
的文件头修复squid.pyc
的文件头
修复后:
3. pyc反编译
使用python的uncompyle6
模块对pyc文件进行反编译。
不难发现重点在于squid_game
这个模块的get_delbat
方法,但在目录中并不存在squid_game.pyc
或相关文件。
使用grep搜索一下:
发现除了squid.py引用了这个字符串,PYZ-00.pyz也包含这个字符串,猜测squid_game模块是被打包在了PYZ-00.pyz中。
根据以前的经验,猜测出题人肯定使用了带-key
参数的pyinstaller进行打包,因此找了半天的pyiboot00_crypto_key.pyc
文件。
最后发现这道题并没有使用-key
参数。
4. 分析PYZ-00.pyz
根据看雪论坛的一篇文章,可以使用pyinstaller模块自带的一个工具分析pyz文件。
首先使用archive_viewer分析文件内容,分析结果和之前解包的内容大致相同。
这个工具也提供了三个选项,分别用于U:展示列表
、O:打开文件
、X:解包文件
:
使用O选项查看PYZ-00.pyz包含的内容:
在列表中成功找到了squid_game模块:
尝试使用X选项将它提取出来:
然后修复squid_game.pyc的文件头:
再使用uncompyle6进行反编译:
成功读到了源码:
发现关键在于get_time函数,对四个flag进行了切片重组,重组后的内容就是flag。
将关键代码复制出来稍加修改,执行一遍就能得到flag:
a = 'flag{c4ca4238a0b923820dcc509a6f75849b}'
b = 'flag{c81e728s9d4c2f636f0f7f89cc14862c}'
c = 'flag{eccbc87e4b5ce2fe28308fd9fsa7baf3}'
d = 'flag{a87ff679a2f3e71d9181a67b7542122c}'
flag = a[0:8] + b[9:14] + c[6:20] + d[-1:]
print(flag)