NewStartCTF2023-Week2-Reverse
目录
PZthon
首先放到Die里面查壳:
壳没查到,但是发现使用PyInstaller打包的,于是这题就是Python逆向的思路。由于网上所提供的大部分工具都对python3.9无效,我这里提供一个通杀的办法。
0x01 exe解包
这里使用的工具是pyinstxtractor,下载方法是:
|
|
将待解包的exe放入同一个文件夹,然后运行:
|
|
完成后,文件夹下面会有一个test.exe_extracted的文件夹(名字可能不同)
我们需要的文件是:(文件名).pyc和struct.pyc
注意,这里可能没有pyc的后缀名,那么很可能是你使用的pyinstxtractor的版本过低,如果确认版本的话,请自行添加.pyc后缀。
0x02 补充magic number
magic number是在pyc文件开头的一段表示python版本的数,解包出来的pyc文件很可能会magic number缺失,需要手动补全。有很多方法可以查到magic number,但是最简单的还是将struct.pyc文件开头的内容和PZthon.pyc对比下,将开头保证一致即可。
这题的magic number并没有确实,所以不需要补充。
E3字节前面的内容就是要补充的内容。
0x03 反编译为py
这里使用的工具是pycdc。需要从github上clone下使用cmake编译:
zrax/pycdc: C++ python bytecode disassembler and decompiler (github.com)
这里提供一个编译好的版本:
cw2k/pycdc_withExe: C++ python bytecode disassembler and decompiler (github.com)
使用方法就是
|
|
即可反编译。
这题的反编译源码是:
|
|
这里发现,将env的每个值异或21后打印即可。
EXP如下:
|
|
输出如下:
|
|