欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年04月15日 09:55:12   作者:猿說Python/C++  
這篇文章主要介紹了PyInstaller將Python文件打包為exe后如何反編譯(破解源碼)以及防止反編譯,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

環(huán)境:

win7+python3.5(anaconda3)

理論上,win7及以上的系統(tǒng)和python任意版本均可。

一、基礎(chǔ)腳本

首先我們構(gòu)建一個(gè)簡單的腳本,比如輸出一串?dāng)?shù)字、文本之類,這里我們輸出一串文字的同時(shí)計(jì)算一下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請輸入一個(gè)數(shù)字:')
      if num.lower() == 'q':
        break
      num = float(num)
      print(num)
    except:
      print('輸入的數(shù)字不正確!')
      continue
    
    test(num)

把這段腳本保存為mylib.py,運(yùn)行一下這個(gè)腳本:

可以看到,腳本正常運(yùn)行了。

為了演示,我們把下面的腳本新建到main.py腳本文件中,并且從mylib中引入測試函數(shù)。

# -*- coding: utf-8 -*-
from mylib import * 
 
while 1:
  try:
    num = input('提示:輸入"q"退出程序。\n請輸入一個(gè)數(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é)束了。但有時(shí)候,我們可能是把這個(gè)功能給很多人用,但如果不想開源或者被別人破解,到這一步是還不夠的。

因?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,如下圖:

同時(shí),我們可以在下圖圈起來的路徑下,找到當(dāng)時(shí)我們exe引入的mylib模塊,其為pyc格式。 

pyc格式的文件,反編譯起來就非常簡單了。用前文提供的工具或者網(wǎng)上找個(gè)在線的分分鐘反編譯出來,我們看下反編譯的結(jié)果:

#!/usr/bin/env python
# visit http://tool.lu/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后綴,我們把這個(gè)刪掉重命名為mylib.pyd即可。

注:當(dāng)同時(shí)存在mylib.pyd和mylib.py時(shí),引入優(yōu)先級是pyd>py,所以不用移除py文件,默認(rèn)引入時(shí)就是pyd。

此時(shí),我們刪除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)高的,至此,就大功告成了!

到此這篇關(guān)于PyInstaller將Python文件打包為exe后如何反編譯(破解源碼)以及防止反編譯的文章就介紹到這了,更多相關(guān)PyInstaller Python文件打包為exe內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中一些深不見底的“坑”

    Python中一些深不見底的“坑”

    這篇文章主要給大家介紹了關(guān)于Python中一些深不見底的“坑”,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python tensorflow與pytorch的浮點(diǎn)運(yùn)算數(shù)如何計(jì)算

    Python tensorflow與pytorch的浮點(diǎn)運(yùn)算數(shù)如何計(jì)算

    這篇文章主要介紹了Python tensorflow與pytorch的浮點(diǎn)運(yùn)算數(shù)如何計(jì)算,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • 70行Python代碼實(shí)現(xiàn)一個(gè)桌面自動翻譯工具

    70行Python代碼實(shí)現(xiàn)一個(gè)桌面自動翻譯工具

    PySimpleGUI是一款很棒的自動化輔助模塊,讓你更輕松的實(shí)現(xiàn)日常任務(wù)的自動化。本文將利用PySimpleGUI編寫一個(gè)桌面自動翻譯工具,感興趣的可以了解一下
    2022-07-07
  • Python3.9安裝gmpy2的步驟

    Python3.9安裝gmpy2的步驟

    gmpy2是一個(gè)Python擴(kuò)展模塊,是對GMP的封裝,它的前身是gmpy,接下來通過本文給大家講解Python3.9安裝gmpy2的步驟,安裝gmpy2之前需要提前安裝python3環(huán)境,安裝python請自行百度搜索,不同的python版本會對應(yīng)的gmpy庫也是不同的,需要的朋友可以參考下
    2023-05-05
  • django聯(lián)系人登錄界面案例詳解

    django聯(lián)系人登錄界面案例詳解

    在本案例中,將介紹如何使用Django框架創(chuàng)建一個(gè)簡單的聯(lián)系人登錄界面,案例涉及前端HTML頁面設(shè)計(jì),CSS和JS的應(yīng)用,以及后端views.py的編寫,在后端處理中,密碼將通過MD5進(jìn)行加密,保證安全性,本文給大家介紹了django聯(lián)系人登錄界面案例詳解,感興趣的朋友一起看看吧
    2024-10-10
  • python 哈希表實(shí)現(xiàn)簡單python字典代碼實(shí)例

    python 哈希表實(shí)現(xiàn)簡單python字典代碼實(shí)例

    這篇文章主要介紹了python 哈希表實(shí)現(xiàn)簡單python字典代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python3解釋器知識點(diǎn)總結(jié)

    Python3解釋器知識點(diǎn)總結(jié)

    在本篇內(nèi)容中小編給大家總結(jié)了關(guān)于Python3解釋器的用法以及相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-02-02
  • Python之tkinter組合框Combobox用法及說明

    Python之tkinter組合框Combobox用法及說明

    這篇文章主要介紹了Python之tkinter組合框Combobox用法及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 視覺直觀感受若干常用排序算法

    視覺直觀感受若干常用排序算法

    這篇文章主要利用視覺直觀的幾種若干常用排序算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • pytorch中獲取模型input/output shape實(shí)例

    pytorch中獲取模型input/output shape實(shí)例

    今天小編就為大家分享一篇pytorch中獲取模型input/output shape實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論