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 | def checkflag(s): |
1 | from setuptools import setup |
之后就需要在terminal里运行
1 | python setup.py build_ext --inplace |
就会生成一个pyd文件在目录下了
这样之后我们就可以新建一个文件来调用这个pyd文件
1 | from checkflag import checkflag as check |
好像直接import不行
ok,到了这里已经大概完成一二两步了
第三步就是把pyd文件和py文件打包成一个exe
一开始我直接在terminal里
1 | pyinstaller .\pyx.py |
这样创建了一个dist并且里面还有文件夹,文件夹里有许多pyd文件
这样显然是没有打包成功的,并且这样的exe脱离了当前目录运行就会报找不到库的错误
为此我也是头疼了好久
直到我翻pyinstaller的官方文档我才发现打包成一个exe需要加上命令-F
于是就是
1 | pyinstaller -F .\pyx.py |
然后就完事哩
生成了一个包含pyd文件的exe
其实这样的文件仍然可以用pyinstxtractor解包
pyc文件用pycdc反编译
但是可能由于我的版本问题pycdc反编译的时候出现了bad magic
pyc文件的魔数出问题了
但是我check了一下magic number没有问题
上github上搜了一下pycdc的源码
为啥pyc文件的魔数对的上pycdc却报bad magic的错呢
然后反应过来可能是pycdc版本太低了
于是重装了pycdc
结果还是有错,唉,暂时研究不动了
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !