对于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的反编译大概就这样