对于python源码编译的exe及pyc的逆向
对于python源码编译的exe及pyc的逆向
以2024SCTF中的ez_cython为例
ez_cython提供了一个python源码编译的exe


用这个exe在直接IDA中看 会发现得不到什么有效的信息 基本都是fail
需要用到三个工具
- pyinstxtractor.py 
- 任意一个Hex编辑器 
- uncompyle库 
pyinstxtractor.py 工具的下载地址:
https://sourceforge.net/projects/pyinstallerextractor/
或
https://download.csdn.net/download/qq_63585949/86509791
Hex编辑器wxMEdit下载地址:
https://wxmedit.github.io/downloads.html
或
https://download.csdn.net/download/qq_63585949/86509705
uncompyle库为第三方库,可以使用pip命令安装:
| 1 | pip install uncompyle6 | 

将pyinstxtractor.py与exe置于同一个目录下
然后在当前目录打开终端,输入python pyinstxtractor.py 文件名.exe:
运行后会生成一个ez_cython.exe_extracted

在这个文件中会存在struct和ez_cython两个文件 需要自己添加文件后缀pyc

同时获得的ez_cython.pyc是没有magic number的 一般可以通过strcut. pyc来获取 但是本题中两个都没有 这个时候就需要去获取对应python版本的magic number
本题中为3.8版本的python
E3之前即为magic number

然后回到目录下,打开控制台,输入命令uncompyle6 文件名.pyc > 文件名.py回车执行,就可以看到目录下生成了.py文件了:

3.8以下可以使用uncompyle6 3.9及以上的使用pycdc
pycdc的使用参考:
ez_cython源码:
| 1 | import cy | 
但是获取到源码对于我们帮助并不是非常的大(原本以为获取到源码 就距离flag不远了 ,没想到只是刚开始)
在这个源码中我们缺少了sub14514 和 py.cy库
这两个存在于cy.pyd中

将这个dll直接扔进IDA

F12可以看到很多是我们需要的字符串 、

主要的加密过程(没看懂 就只看出一个hash哈希)

来自大佬的分析

注重偏向观察导入表number的函数

这些字符串就是密文(从wp推出来的)
接着用xxtea解一下就可以获得flag
pyc的反编译大概就这样
