創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)專注于西城企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,購物商城網(wǎng)站建設(shè)。西城網(wǎng)站建設(shè)公司,為西城等地區(qū)提供建站服務(wù)。全流程按需設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)這篇文章給大家分享的是有關(guān)防止python反編譯的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
如何防止python反編譯?下面給大家具體介紹:
python學(xué)習(xí)網(wǎng),大量的免費python視頻教程,歡迎在線學(xué)習(xí)!
此處用到的工具:
exe反編譯工具:pyinstxtractor.py:點擊此處去下載
pyc反編譯工具:Easy Python Decompiler或者在線反編譯pyc。
將pyinstxtractor.py放到exe文件相同目錄,執(zhí)行以下cmd命令:
python pyinstxtractor.py main.exe
如果成功執(zhí)行,將在同目錄下生成新的反編譯文件夾——main.exe_extracted,如下圖:
同時,我們可以在下圖圈起來的路徑下,找到當時我們exe引入的mylib模塊,其為pyc格式。
pyc格式的文件,反編譯起來就非常簡單了。用前文提供的工具或者網(wǎng)上找個在線的分分鐘反編譯出來,我們看下反編譯的結(jié)果:
#!/usr/bin/env python # visit http://tool.lu/pyc/ for more information 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
可以看到,基本上完美的把源碼反編譯出來了。其中涉及到中文的地方,會因為編碼問題有所改變。但是非中文部分,幾乎一模一樣。
將腳本編譯為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 -*- 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
運行過程及生成結(jié)果如下圖,其中紅框的pyd文件即編譯好了。因為我是64位的系統(tǒng)和python,所以會生成amd64后綴,我們把這個刪掉重命名為mylib.pyd即可。
注:當同時存在mylib.pyd和mylib.py時,引入優(yōu)先級是pyd>py,所以不用移除py文件,默認引入時就是pyd。
此時,我們刪除build、disk文件夾,重復(fù)步驟二,再次編譯為exe即可。
注意:編譯需要相關(guān)的VC環(huán)境,因為python3.5是基于 VS14版本的,所以我這里安裝的也是。不安裝是無法編譯的。
可以驗證一下:
再次反編譯main.exe后,原來的路徑E:\t\dist\main.exe_extracted\out00-PYZ.pyz_extracted之下,已經(jīng)找不到mylib.pyc了。
因為他已經(jīng)不是可以直接反編譯出來的文件了。
那么他在哪呢,他是作為pyd存在于上層目錄中了。如下圖:
pyd的反編譯難度是相當高的,至此,就大功告成了!
感謝各位的閱讀!關(guān)于防止python反編譯的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
本文標題:防止python反編譯的方法-創(chuàng)新互聯(lián)
本文地址:http://muchs.cn/article26/dhihjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站維護、Google、做網(wǎng)站、網(wǎng)站設(shè)計公司、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)