pyx文件探索

Posted by Humb1e on 2023-03-21
Estimated Reading Time 2 Minutes
Words 745 In Total
Viewed Times

pyx文件探索

起因是第五空间的一道逆向题:strange_language

那里有一个pyd文件知识的考点,比较有意思

先在看雪看大佬的博客,明白了一点前置知识

py、pyc、pyo、pyd

py: python 脚本文件(source code)

pyc: 脚本文件编译得到的字节码, 二进制文件,python文件经过编译器编译之后的文件。可以提高文件加载速度

pyo: 脚本文件开启优化编译选项(-O)编译得到的字节码,二进制文件,优化编译后的文件。可以通过python -O file.py生成。

pyd: 基本的Windows DLL文件, python的动态链接库。

strange_language就是把关键的逻辑放在了一个pyd文件里

然后pyinstxtractor也会把那个pyd文件解析出来

pyd文件直接用ida看就行了,毕竟是dll文件

于是乎我对以下几个问题产生了一点兴趣:

1.如何生成pyd文件

2.如何引用pyd文件

3.如何把py文件和pyd文件打包到一个exe里(用pyinstaller)

实验过程如下

首先是pyd文件的生成

这个有些麻烦

首先你需要自己编写一个func放在一个.py文件下

比如我在checkflag.py文件里放了一个checkflag函数

1
2
3
4
5
def checkflag(s):
if s=="flag":
print("yes!")
else:
print("no!")

然后还需要编写一个setup.py

1
2
3
4
5
6
from setuptools import setup
from Cython.Build import cythonize##pip install cython 即可
setup(
name='test',
ext_modules=cythonize('checkflag.py')
)

之后就需要在terminal里运行

1
python setup.py build_ext --inplace  

就会生成一个pyd文件在目录下了

这样之后我们就可以新建一个文件来调用这个pyd文件

1
2
3
from checkflag import checkflag as check
s=input()
check(s)

好像直接import不行

ok,到了这里已经大概完成一二两步了

第三步就是把pyd文件和py文件打包成一个exe

一开始我直接在terminal里

1
pyinstaller .\pyx.py

这样创建了一个dist并且里面还有文件夹,文件夹里有许多pyd文件

image-20230321175521236

这样显然是没有打包成功的,并且这样的exe脱离了当前目录运行就会报找不到库的错误

为此我也是头疼了好久

直到我翻pyinstaller的官方文档我才发现打包成一个exe需要加上命令-F

于是就是

1
pyinstaller -F .\pyx.py

然后就完事哩

生成了一个包含pyd文件的exe

其实这样的文件仍然可以用pyinstxtractor解包

pyc文件用pycdc反编译

但是可能由于我的版本问题pycdc反编译的时候出现了bad magic

pyc文件的魔数出问题了

但是我check了一下magic number没有问题

上github上搜了一下pycdc的源码

image-20230321185554870

image-20230321185748400

为啥pyc文件的魔数对的上pycdc却报bad magic的错呢

然后反应过来可能是pycdc版本太低了

于是重装了pycdc

image-20230321184910872

结果还是有错,唉,暂时研究不动了


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !