6) 用cython編譯打包成防破譯加密exe
之前打包的python程序exe文件都可以通過第三方工具反破譯為pyd文件稼钩,然后就可以反向看到源代碼。這樣的exe文件缺乏保密性博肋,無法作為正式的發(fā)布版本低斋。一種通用簡單的解決方法是把python程序先用cython編譯后,再進(jìn)行打包匪凡,這樣中間代碼為二進(jìn)制文件膊畴,相當(dāng)于進(jìn)行了加密,無法被反破譯病游,提高了保密性唇跨,適合當(dāng)作發(fā)布版本。以下仍以windows10系統(tǒng)里打包為例衬衬。
第一步买猖,安裝Cython庫
可以直接用pycharm進(jìn)行安裝,或是用pip 安裝
第二步滋尉,安裝vs2015
第三步政勃,編寫一個(gè)setup.py程序用來調(diào)用cython,把用到的py文件都進(jìn)行轉(zhuǎn)編譯為c兼砖。
繼續(xù)使用之前的例子奸远, 假設(shè)我們有XXX.py,YYY.py,ZZZ.py三個(gè)程序讽挟,編寫setup.py如下:
from distutils.coreimport setup,Extension
from Cython.Buildimport cythonize
extensions =[]
extensions.append(Extension('XXX',['XXX.py']))
extensions.append(Extension('YYY',['YYY.py']))
extensions.append(Extension('ZZZ',['ZZZ.py']))
setup(ext_modules = cythonize(extensions,compiler_directives={'language_level':3}),)
第四步懒叛,編寫main.py程序,這個(gè)程序是個(gè)入口程序耽梅。它會導(dǎo)入所有程序所需要的庫包薛窥,然后調(diào)用原先入口程序的主函數(shù)啟動整個(gè)程序。我們例子中原先的入口程序是XXX.py眼姐,我們編寫main.py如下:
import XXX
import YYY
import ZZZ
if __name__ =='__main__':
XXX.show()
預(yù)期的運(yùn)行結(jié)果如下:
第五步诅迷,把程序轉(zhuǎn)成pyd和c:
使用命令:python setup.py build_ext --inplace
結(jié)果會生成c文件和pyd文件,這時(shí)要對pyd文件進(jìn)行改名众旗,把XXX.cp36-win_amd64.pyd改成XXX.pyd罢杉。YYY和ZZZ同樣進(jìn)行修改。
最后程序集如下:
第六步贡歧,用pyinstaller打包成exe:
pyinstaller -F main.spec
運(yùn)行結(jié)果如下:
這樣我們的程序通過Cython轉(zhuǎn)成c語言再編譯成中間代碼滩租,最后打包成exe,提高了保密性利朵。