Reverse学习之exe文件转pyc文件和python的反编译
exe文件转py文件 exe - > pyc -> py 详细步骤
exe文件转pyc文件
工具:
环境:
Pycharm专业版2023
Python 3.11.4(64-bit)
步骤
1. 在pyinstxtractor-ng-main文件中找到pyinstxtractor-ng.py脚本
2. 在Pycharm的终端上换源【阿里云—下载速度嘎嘎快!!!】
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
3. 安装Python库【pycryptodome/Crypto/xdis】
4. 将pyinstxtractor-ng.py文件移动到想要解包的文件目录下
5. 输入cmd打开命令提示符,并在当前目录下运行以下操作
解包后会发现在当前目录下生成了名为reversepython.exe_extracted文件夹 即解包完成
进入该文件夹会发现和解包文件相同名称的pyc文件 1.pyc
接下来就是要将pyc文件转为可以正常阅读的py文件
pyc文件转py文件
工具:
pycdc-master(适用于Python 3.9及更高版本且兼容低版本)
环境:
Visual Studio Code【插件】
步骤
1. win11上配置C/C++环境——基于MinGW-W64 GCC-8.1.0
2. 用 IDE 打开pycdc文件夹
3. 按Ctrl+Shift+P,选择CMake:安装
4. build文件夹中会生成编译后的文件pycdas.exe(反汇编工具)和pycdc.exe(反编译工具)
5. 把pycdc.exe移动到需要反编译的文件的同级目录下
6.输入cmd打开命令提示符,并在当前目录下运行以下操作,由此获得源码
如何修改py文件并获得flag
修改1【思路:源码中的b为None,那么如何求解b呢?通过flag格式的特点,在庞大的数据中获取最可能也就是数据同样最多的即为b】
check = 'flag{'
a = []
c = [...]
for i in range(len(check)):
for b in range(1,5000):
if ord(check[i]) * 33 % b == c[i]:
print(b)
修改2【思路:在已知b和c的情况下,设定一个爆破值a,利用循环结构不断爆破获取正确的flag】
a = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()*+, -./:;<=>?@[\]^_`{|}~ "
b = 179
c = []
d = []
for i in range(42):
for d in a:
if ord(d) * 33 % b == c[i]:
print(d, end="")
结果
flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca}