亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Python/ target=_blank class=infotextkey>Python是一種解釋型語言,但是與JAVAscript這種純腳本語言不同,python提供了一種編譯成字節(jié)碼運(yùn)行的方法,編譯之后就得到pyc文件,這點(diǎn)和java編譯成class文件再用jvm解釋運(yùn)行很類似,但是與java不同的是,python編譯字節(jié)碼不是一個強(qiáng)制的操作,事實(shí)上,編譯是一個自動的過程,一般不會在意它的存在。

編譯成字節(jié)碼可以節(jié)省加載模塊的時間,提高效率。除了效率之外,字節(jié)碼的形式也增加了反向工程的難度,可以保護(hù)源代碼。這個只是一定程度上的保護(hù),反編譯還是可以的。

py pyc pyo pyd分別是什么文件

  • py: python腳本源文件。
  • pyc: python源文件經(jīng)過編譯得到的字節(jié)碼, 二進(jìn)制文件。
  • pyo: python腳本文件開啟優(yōu)化編譯(-O)得到的字節(jié)碼,二進(jìn)制文件(python -O test.py)。
  • pyd: python的動態(tài)鏈接庫,windows DLL文件。

編譯py文件生成pyc

我們編寫兩個py腳本

mylib.py:包含一個函數(shù),打印一行文字.

def keyFun():
    print("keyFun is running")

main.py:程序運(yùn)行入口,調(diào)用mylib種的keyFun函數(shù)

from mylib import keyFun

if __name__ == "__main__":
    keyFun()

編譯所有文件,在腳本目錄執(zhí)行以下命令:

python -m compileall .

可以看到生成了相對應(yīng)的兩個pyc文件

python反編譯和防破解

編譯生成pyc文件

此時執(zhí)行main.cpython-38.pyc會提示找不到mylib模塊,需要將文件名中的.cpython-38刪掉.

python反編譯和防破解

執(zhí)行pyc文件

反編譯pyc

反編譯pyc的工具很多,我用的是python3.8,這里介紹幾種可以反編譯python3.8的工具.

  • 在線反編譯網(wǎng)站: https://tool.lu/pyc/
  • python-decompile3工具: https://github.com/rocky/python-decompile3
  • Easy Python Decompiler: https://sourceforge.NET/projects/easypythondecompiler/

本文作為演示,使用在線網(wǎng)站反編譯mylib.py,可以看到下圖反編譯代碼與實(shí)際代碼一模一樣.

python反編譯和防破解

反編譯pyc結(jié)果

反編譯pyinstaller打包的exe文件

我們使用pyinstaller將main.py打包成exe文件

pyinstaller -F main.py

 

python反編譯和防破解

pyinstaller打包exe并執(zhí)行

反編譯pyinstaller打包的exe需要用到pyinstxtractor(
https://github.com/extremecoders-re/pyinstxtractor).

將main.exe復(fù)制到pyinstxtractor文件夾,執(zhí)行python pyinstxtractor.py main.exe

python pyinstxtractor.py main.exe

 

python反編譯和防破解

反編譯exe

可以看到pyinstxtractor已經(jīng)提示入口文件為main.pyc.我們反編譯main.pyc就可以看到pyc引入可哪些模塊,這個例子可以從反編譯代碼中看到引入了mylib模塊,再接著反編譯mylib.pyc就可以了.

python反編譯和防破解

 


python反編譯和防破解

 

Cython編譯pyd文件

從上面的反編譯pyc文件結(jié)果可以看出,pyc很容易就被反編譯,無法保護(hù)我們的代碼.這里我們介紹使用Cython將python文件編譯成pyd文件的方法.

首先安裝Cython(Anaconda自帶Cython的話不需要安裝)

pip install Cython

在mylib.py所在目錄新建build_pyd.py文件

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize([
        "mylib.py"
    ]),
)

#1.執(zhí)行 python build_pyd.py build_ext --inplace
#2.再把.cp38-win_amd64刪掉 python renamepyd_file.py

執(zhí)行python build_pyd.py build_ext --inplace.將會為mylib.py生成對應(yīng)的.c文件和.pyd文件

 

python反編譯和防破解

Cython生成pyd文件

與上文提到的pyc文件無法直接執(zhí)行一樣,pyd文件也需要刪除文件名中的.cp38-win_amd64.這樣main.py才能找到對應(yīng)的mylib.pyd.

import os

lists = os.listdir("./")
for item in lists:
    try:
        if ".cp38-win_amd64.pyd" in item:
            # 重命名文件
            fileName = item.replace("cp38-win_amd64.", "")
            files = os.rename(item, fileName)
    except Exception as e:
        print(e)

執(zhí)行main.py,此時main.py引用的是編譯后的mylib.pyd.如果修改了mylib.py中的代碼,需要刪除pyd文件后調(diào)試,不然不會看到改動后的效果.

python反編譯和防破解

 

編譯成pyd后再用pyinstaller打包

使用上文中的方法將python文件編譯為pyd文件后,再用pynstaller打包,這時候我們反編譯就只能看到pyd文件了,要想破解pyd文件就需要使用匯編級別的破解技術(shù),如果你的代碼需要別人這樣去破解的話,那恭喜你了,哈哈.

需要注意的是,編譯為pyd再用pyinstaller打包,可能會出現(xiàn)模塊無法被打包進(jìn)去的情況,這時候需要編輯spec文件,將mylib模塊添加到hiddenimports中.

a = Analysis(['main.py'],
             pathex=['E:\playground\decompiletest'],
             binaries=[],
             datas=[],
             //這里引入mylib模塊
             hiddenimports=['mylib'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

 

分享到:
標(biāo)簽:反編譯
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定