在PyInstaller第一弹PyInstaller打包Python代码与其不安全因素验证中验证了稍微研究下就可以获得源码,那么怎么使用Cython来提高点反编译门槛呢?
代码结构
还是以第一弹中的代码为例子,稍作修改,文件结构如下:
1 | tree |
假设我们不希望别人能通过第一弹的方式获取calc.py
的源码,想对其加密,由exec.py
进行调用,分别看一下calc.py
和exec.py
的代码内容:
1 | #!/bin/python3 |
1 | #!/bin/python3 |
Cython编译
我们现在将calc.py
编译为SO文件,新建setup.py
,写入如下内容:
1 | # cython: language_level=3 |
然后进行执行编译:
1 | python setup.py build_ext |
将生成的build/lib.linux-x86_64-3.7
目录下的calc.cpython-37m-x86_64-linux-gnu.so
文件拷贝至calc
目录:
1 | mkdir calc |
spec文件加入so
按照第二弹PyInstaller与资源文件的方式生成spec文件:
1 | pyi-makespec --onefile exec.py |
将刚编译好的so文件加入datas中:
1 | a = Analysis(['exec.py'], |
进行打包:
1 | pyinstaller exec.spec |
现在就和之前一样了,拷贝到另一台机器做测试:
1 | $ chmod +x exec |
这样就成功的将PyInstaller与Cython结合使用,能在一定程度上提高反编译门槛,保护我们的源码。顺便看一下反编译SO文件的样子吧(到这里真的就只是看看):
结束
PyInstaller连着写了三篇,到这算是告一段落了,实际工作中的情况肯定比文章中举例要复杂的多,后面会不会深入研究其他功能再说吧,比如Bootloader
等