一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

PyInstaller將Python文件打包為exe后如何反編譯(破解源碼)以及防止反編譯 – Python量化投資

 大傻子的文淵閣 2020-03-27
kingmo888 @ Python量化投資 2018/8/29

PyInstaller將Python文件打包為exe后如何反編譯(破解源碼)以及防止反編譯

在這里分享一些技巧和經(jīng)驗(yàn)給大家。辛苦撰文分享,轉(zhuǎn)載或引用請保留本文作者信息及文章鏈接。 作者的環(huán)境: win7+python3.5(anaconda3) 理論上,win7及以上的系統(tǒng)和python任意版本均可。 目錄 一、基礎(chǔ)腳本 二、使用PyInstaller打包為exe 三、反編譯Pyinstaller打包的exe 四、將腳本編譯為pyd以防止反編譯 一、基礎(chǔ)腳本 首先我們構(gòu)建一個簡單的腳本,比如輸出一串?dāng)?shù)字、文本之類,這里我們輸出一串文字的同時計算一下3次方好了。 # -*- coding: utf-8 -*- """ Created on Wed Aug 29 09:18:13 2018 @author: Li Zeng hai """ def test(num): print('num={n}, {n}^3={n2}'.format(n=num, n2=num**3)) if __name__ == '__main__': while 1: try: num = input('提示:輸入"q"退出程序。\n請輸入一個數(shù)字:') if num.lower() == 'q': break num = float(num) print(num) except: print('輸入的數(shù)字不正確!') continue test(num) 把這段腳本保存為mylib.py,運(yùn)行一下這個腳本: 可以看到,腳本正常運(yùn)行了。 為了演示,我們把下面的腳本新建到main.py腳本文件中,并且從mylib中引入測試函數(shù)。 # -*- coding: utf-8 -*- from mylib import * while 1: try: num = input('提示:輸入"q"退出程序。\n請輸入一個數(shù)字:') if num.lower() == 'q': break num = float(num) print(num) except: print('輸入的數(shù)字不正確!') continue test(num) 二、使用PyInstaller打包為exe 使用如下命令,將其打包為單一exe(去掉-F則不是單一exe) pyinstaller -F main.py 打包過程如下: E:\t>pyinstaller -F main.py 505 INFO: PyInstaller: 3.3.1 505 INFO: Python: 3.5.5 505 INFO: Platform: Windows-7-6.1.7601-SP1 505 INFO: wrote E:\t\main.spec 505 INFO: UPX is not available. 505 INFO: Extending PYTHONPATH with paths ['E:\\t', 'E:\\t'] 505 INFO: checking Analysis 505 INFO: Building Analysis because out00-Analysis.toc is non existent 505 INFO: Initializing module dependency graph... 521 INFO: Initializing module graph hooks... 521 INFO: Analyzing base_library.zip ... 6269 INFO: running Analysis out00-Analysis.toc 6269 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable required by d:\anaconda3\python.exe 6956 INFO: Caching module hooks... 6956 INFO: Analyzing E:\t\main.py 6956 INFO: Loading module hooks... 6956 INFO: Loading module hook "hook-pydoc.py"... 6956 INFO: Loading module hook "hook-xml.py"... 7283 INFO: Loading module hook "hook-encodings.py"... 7533 INFO: Looking for ctypes DLLs 7549 INFO: Analyzing run-time hooks ... 7549 INFO: Looking for dynamic libraries 7720 INFO: Looking for eggs 7720 INFO: Using Python library d:\anaconda3\python35.dll 7720 INFO: Found binding redirects: [] 7720 INFO: Warnings written to E:\t\build\main\warnmain.txt 7751 INFO: Graph cross-reference written to E:\t\build\main\xref-main.html 7767 INFO: checking PYZ 7767 INFO: Building PYZ because out00-PYZ.toc is non existent 7767 INFO: Building PYZ (ZlibArchive) E:\t\build\main\out00-PYZ.pyz 8345 INFO: Building PYZ (ZlibArchive) E:\t\build\main\out00-PYZ.pyz completed successfully. 8345 INFO: checking PKG 8345 INFO: Building PKG because out00-PKG.toc is non existent 8345 INFO: Building PKG (CArchive) out00-PKG.pkg 9954 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully. 9954 INFO: Bootloader d:\anaconda3\lib\site-packages\PyInstaller\bootloader\Windows-64bit\run.exe 9954 INFO: checking EXE 9954 INFO: Building EXE because out00-EXE.toc is non existent 9954 INFO: Building EXE from out00-EXE.toc 9954 INFO: Appending archive to EXE E:\t\dist\main.exe 9954 INFO: Building EXE from out00-EXE.toc completed successfully. E:\t>     最終在目錄下生成build、disk文件夾。其中exe文件在disk中。運(yùn)行正常。如下圖: 三、反編譯Pyinstaller打包的exe 這樣的exe已經(jīng)可以被遷移到別的電腦上使用了,如果是為了方便其他電腦使用,到這一步就已經(jīng)結(jié)束了。但有時候,我們可能是把這個功能給很多人用,但如果不想開源或者被別人破解,到這一步是還不夠的。 因?yàn)榈竭@一步的exe是可以被別人反編譯出源碼的。 此處用到的工具: exe反編譯工具:pyinstxtractor.py:點(diǎn)擊此處去下載 pyc反編譯工具:Easy Python Decompiler 或者在線反編譯pyc。 將pyinstxtractor.py放到exe文件相同目錄,執(zhí)行以下cmd命令: python pyinstxtractor.py main.exe 如果成功執(zhí)行,將在同目錄下生成新的反編譯文件夾——main.exe_extracted,如下圖:   同時,我們可以在下圖圈起來的路徑下,找到當(dāng)時我們exe引入的mylib模塊,其為pyc格式。     pyc格式的文件,反編譯起來就非常簡單了。用前文提供的工具或者網(wǎng)上找個在線的分分鐘反編譯出來,我們看下反編譯的結(jié)果: #!/usr/bin/env python # visit http:///pyc/ for more information ''' Created on Wed Aug 29 09:18:13 2018 @author: Li Zeng hai ''' def test(num): print('num={n}, {n}^3={n2}'.format(n=num, n2=num ** 3)) if __name__ == '__main__': while None: try: num = input( '\xe6\x8f\x90\xe7\xa4\xba\xef\xbc\x9a\xe8\xbe\x93\xe5\x85\xa5"q"\xe9\x80\x80\xe5\x87\xba\xe7\xa8\x8b\xe5\xba\x8f\xe3\x80\x82\n\xe8\xaf\xb7\xe8\xbe\x93\xe5\x85\xa5\xe4\xb8\x80\xe4\xb8\xaa\xe6\x95\xb0\xe5\xad\x97\xef\xbc\x9a') if num.lower() == 'q': break num = float(num) print(num) except: None None None print( '\xe8\xbe\x93\xe5\x85\xa5\xe7\x9a\x84\xe6\x95\xb0\xe5\xad\x97\xe4\xb8\x8d\xe6\xad\xa3\xe7\xa1\xae\xef\xbc\x81') continue 可以看到,基本上完美的把源碼反編譯出來了。其中涉及到中文的地方,會因?yàn)榫幋a問題有所改變。但是非中文部分,幾乎一模一樣。 就問你怕不怕?。?! 四、將腳本編譯為pyd以防止反編譯 好怕怕 ,哈哈。 如何解決呢,可以考慮將模塊py文件編譯為動態(tài)鏈接庫,這樣破解難度將大大增加。其中,在python里,pyd格式即動態(tài)鏈接庫。使用cython即可編譯,如果是anaconda是自帶,python有的可能不帶cython,安裝即可: pip install Cython 我們在main.py所在的文件夾新建py文件,在此處我命名為build_pyd.py,其內(nèi)容如下: # -*- coding: utf-8 -*- """ Created on Wed Aug 29 13:33:20 2018 @author: Li Zeng hai """ from distutils.core import setup from Cython.Build import cythonize setup( name = 'any words.....', ext_modules = cythonize(["mylib.py", ] ), ) 然后執(zhí)行以下cmd命令: python build_pyd.py build_ext --inplace 運(yùn)行過程及生成結(jié)果如下圖,其中紅框的pyd文件即編譯好了。因?yàn)槲沂?4位的系統(tǒng)和python,所以會生成amd64后綴,我們把這個刪掉重命名為mylib.pyd即可。 注:當(dāng)同時存在mylib.pyd和mylib.py時,引入優(yōu)先級是pyd>py,所以不用移除py文件,默認(rèn)引入時就是pyd。   此時,我們刪除build、disk文件夾,重復(fù)步驟二,再次編譯為exe即可。 注意:編譯需要相關(guān)的VC環(huán)境,因?yàn)閜ython3.5是基于 VS14版本的,所以我這里安裝的也是。不安裝是無法編譯的。 可以驗(yàn)證一下: 再次反編譯main.exe后,原來的路徑E:\t\dist\main.exe_extracted\out00-PYZ.pyz_extracted之下,已經(jīng)找不到mylib.pyc了。 因?yàn)樗呀?jīng)不是可以直接反編譯出來的文件了。 那么他在哪呢,他是作為pyd存在于上層目錄中了。如下圖:   pyd的反編譯難度是相當(dāng)高的,至此,就大功告成了! 托拉姆物語下載 0 收藏
掃描二維碼繼續(xù)閱讀

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    精品精品国产自在久久高清| 在线免费国产一区二区三区| 国产又猛又黄又粗又爽无遮挡| 国产老女人性生活视频| 中文字幕一区久久综合| 亚洲最大的中文字幕在线视频| 国产精品白丝久久av| 亚洲中文字幕免费人妻| 日本一区二区三区黄色| 日本精品理论在线观看| 欧美一区二区口爆吞精| 日韩一区二区三区在线日| 日本女优一区二区三区免费| 男女午夜在线免费观看视频| 国产一区二区不卡在线视频| 国产日产欧美精品视频| 免费在线成人午夜视频| 91欧美日韩国产在线观看| 日韩成人动作片在线观看| 老司机精品视频在线免费| 国产水滴盗摄一区二区| 偷拍洗澡一区二区三区| 欧美亚洲美女资源国产| 美国欧洲日本韩国二本道| 亚洲中文字幕在线观看四区| 日本少妇中文字幕不卡视频| 好骚国产99在线中文| 久久99精品日韩人妻| 国产精品日韩精品一区| 国产免费一区二区三区不卡| 清纯少妇被捅到高潮免费观看| 国产av精品一区二区| 亚洲精品福利入口在线| 内射精品欧美一区二区三区久久久| 日韩精品你懂的在线观看| 欧美精品中文字幕亚洲| 国产人妻熟女高跟丝袜| 国产精品一区二区视频| 久草热视频这里只有精品| 日韩精品人妻少妇一区二区| 免费黄片视频美女一区|