程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python代碼打包編譯與python代碼反編譯,一文帶你了解

編輯:Python

本文最後會附加所有腳本和程序的獲取方式;

PS:在我的測試過程中,python3.9版本不支持反編譯,其他的使用的暫時沒發現問題,都可以反編譯成功。

情景對話一:

A:給我寫個程序,我要實現什麼什麼

B:寫好了,給你

A:運行失敗了啊。。。

B:我看看

B:你這裡沒有安裝xxx\xxx\xxx模塊,你安裝下就好了

A:這麼麻煩?我這是內網,下載老麻煩了

B:那我不管,我給你實現了哈

A:你這技術不行啊~~~

B:???

情景對話二:

A:哇塞,你這個代碼好厲害啊,直接運行就好了;

B:哎呀,一般般了;

A:你是怎麼實現的啊,源代碼發我一下我看看吧;

B:要什麼源代碼,很簡單了,不是不給你看,主要是我代碼丟了;

A:~~~

以上兩種情況,不知道你遇到過沒有,如果有的話,看完這個文章,再遇到這樣的問題,分分鐘搞定了就。

1、python代碼打包編譯

python打包成各種平台上的可執行文件,其實用到了pyinstaller模塊;

他可以讓你的python代碼打包成各種類型的,比如運行在windows上的.exe格式文件,亦或者運行在linux上的可執行文件;這樣子做有什麼好處呢?

我們都知道,寫python代碼的時候往往需要安裝很多模塊,那麼後期運行的服務器上經常會出現缺少模塊的事情發生,但是我們通過pyinstaller模塊打包之後,就可以在沒有安裝這些模塊的機器上運行了,那麼看下如何操作吧。

1.1、安裝

pip install pyinstaller

1.2、python代碼打包成可執行文件

想打包成可以在windows下運行的.exe文件的話,就在windows平台下打包;linux亦然;也就是說後期你想在什麼平台執行,那就需要在什麼平台打包;

例如我們的源代碼如下:

#!/usr/bin/python
#coding:utf-8
from datetime import datetime
now_date = datetime.now()
print('現在的時間為:' + str(now_date))

打包命令:

PS C:\Users\22768\Desktop\yunwei_ceshi> ls
目錄: C:\Users\22768\Desktop\yunwei_ceshi
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022-06-15 21:43 138 ceshi.py
PS C:\Users\22768\Desktop\yunwei_ceshi> pyinstaller -F .\ceshi.py # 命令在這裡哈
PS C:\Users\22768\Desktop\yunwei_ceshi> ls
目錄: C:\Users\22768\Desktop\yunwei_ceshi
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022-06-15 21:44 build
d----- 2022-06-15 21:44 dist
-a---- 2022-06-15 21:43 138 ceshi.py
-a---- 2022-06-15 21:44 854 ceshi.spec
PS C:\Users\22768\Desktop\yunwei_ceshi>

執行完之後可以看到輸出了幾個目錄,那麼我們打包的內容在哪裡呢?在dist目錄下,我們進去看一下;

PS C:\Users\22768\Desktop\yunwei_ceshi> cd .\dist\
PS C:\Users\22768\Desktop\yunwei_ceshi\dist> ls
目錄: C:\Users\22768\Desktop\yunwei_ceshi\dist
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022-06-15 21:44 7864211 ceshi.exe
PS C:\Users\22768\Desktop\yunwei_ceshi\dist>

由於我是在windows平台上運行的,所以就是一個ceshi.exe文件,你如果想讓後面的程序在linux平台上運行,那麼你就需要在linux平台上進行打包;

1.3、運行

windows平台上打包的python代碼,雙擊即可運行;

linux平台上打包的python代碼,只能使用./來執行,例如:

./ceshi

2、python代碼反編譯

如果我們拿到了python打包後的代碼,想看下源代碼,亦或者是提供程序包的人離職了,沒人有源代碼,這種情況下我們該如何查看源代碼呢?且往下看;

例如我們拿到的就是上一步打包之後的ceshi.exe文件,如何看到源代碼呢?

2.1、第一步

這裡需要使用到一個腳本pyinstxtractor.py,本文最後會附加所有腳本和程序的獲取方式;

PS C:\Users\22768\Desktop\yunwei_ceshi\dist> python pyinstxtractor.py .\ceshi.exe
[+] Processing .\ceshi.exe
[+] Pyinstaller version: 2.1+
[+] Python version: 3.9
[+] Length of package: 7548819 bytes
[+] Found 71 files in CArchive
[+] Beginning extraction...please standby
[+] Possible entry point: pyiboot01_bootstrap.pyc
[+] Possible entry point: pyi_rth_subprocess.pyc
[+] Possible entry point: pyi_rth_pkgutil.pyc
[+] Possible entry point: pyi_rth_multiprocessing.pyc
[+] Possible entry point: pyi_rth_inspect.pyc
[+] Possible entry point: ceshi.pyc
[+] Found 227 files in PYZ archive
[+] Successfully extracted pyinstaller archive: .\ceshi.exe
You can now use a python decompiler on the pyc files within the extracted directory
PS C:\Users\22768\Desktop\yunwei_ceshi\dist> ls
目錄: C:\Users\22768\Desktop\yunwei_ceshi\dist
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022-06-15 21:53 ceshi.exe_extracted
-a---- 2022-06-15 21:44 7864211 ceshi.exe
-a---- 2022-06-13 19:19 15336 pyinstxtractor.py
PS C:\Users\22768\Desktop\yunwei_ceshi\dist>

可以看到多了一個ceshi.exe_extracted目錄,進去看一下:

PS C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted> ls
目錄: C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022-06-15 21:53 PYZ-00.pyz_extracted
-a---- 2022-06-15 21:53 19864 api-ms-win-core-console-l1-1-0.dll
-a---- 2022-06-15 21:53 19352 api-ms-win-core-datetime-l1-1-0.dll
-a---- 2022-06-15 21:53 19352 api-ms-win-core-debug-l1-1-0.dll
-a---- 2022-06-15 21:53 19376 api-ms-win-core-errorhandling-l1-1-0.dll
-a---- 2022-06-15 21:53 22928 api-ms-win-core-file-l1-1-0.dll
-a---- 2022-06-15 21:53 19344 api-ms-win-core-file-l1-2-0.dll
-a---- 2022-06-15 21:53 19336 api-ms-win-core-file-l2-1-0.dll
-a---- 2022-06-15 21:53 19352 api-ms-win-core-handle-l1-1-0.dll
-a---- 2022-06-15 21:53 19856 api-ms-win-core-heap-l1-1-0.dll
-a---- 2022-06-15 21:53 19368 api-ms-win-core-interlocked-l1-1-0.dll
-a---- 2022-06-15 21:53 19888 api-ms-win-core-libraryloader-l1-1-0.dll
-a---- 2022-06-15 21:53 21936 api-ms-win-core-localization-l1-2-0.dll
-a---- 2022-06-15 21:53 19856 api-ms-win-core-memory-l1-1-0.dll
-a---- 2022-06-15 21:53 19360 api-ms-win-core-namedpipe-l1-1-0.dll
-a---- 2022-06-15 21:53 20424 api-ms-win-core-processenvironment-l1-1-0.dll
-a---- 2022-06-15 21:53 21432 api-ms-win-core-processthreads-l1-1-0.dll
-a---- 2022-06-15 21:53 19896 api-ms-win-core-processthreads-l1-1-1.dll
-a---- 2022-06-15 21:53 18840 api-ms-win-core-profile-l1-1-0.dll
-a---- 2022-06-15 21:53 19880 api-ms-win-core-rtlsupport-l1-1-0.dll
-a---- 2022-06-15 21:53 19352 api-ms-win-core-string-l1-1-0.dll
-a---- 2022-06-15 21:53 21392 api-ms-win-core-synch-l1-1-0.dll
-a---- 2022-06-15 21:53 19856 api-ms-win-core-synch-l1-2-0.dll
-a---- 2022-06-15 21:53 20376 api-ms-win-core-sysinfo-l1-1-0.dll
-a---- 2022-06-15 21:53 19360 api-ms-win-core-timezone-l1-1-0.dll
-a---- 2022-06-15 21:53 19336 api-ms-win-core-util-l1-1-0.dll
-a---- 2022-06-15 21:53 20368 api-ms-win-crt-conio-l1-1-0.dll
-a---- 2022-06-15 21:53 23448 api-ms-win-crt-convert-l1-1-0.dll
-a---- 2022-06-15 21:53 19872 api-ms-win-crt-environment-l1-1-0.dll
-a---- 2022-06-15 21:53 21408 api-ms-win-crt-filesystem-l1-1-0.dll
-a---- 2022-06-15 21:53 20360 api-ms-win-crt-heap-l1-1-0.dll
-a---- 2022-06-15 21:53 19856 api-ms-win-crt-locale-l1-1-0.dll
-a---- 2022-06-15 21:53 28552 api-ms-win-crt-math-l1-1-0.dll
-a---- 2022-06-15 21:53 20376 api-ms-win-crt-process-l1-1-0.dll
-a---- 2022-06-15 21:53 23960 api-ms-win-crt-runtime-l1-1-0.dll
-a---- 2022-06-15 21:53 25480 api-ms-win-crt-stdio-l1-1-0.dll
-a---- 2022-06-15 21:53 25496 api-ms-win-crt-string-l1-1-0.dll
-a---- 2022-06-15 21:53 21896 api-ms-win-crt-time-l1-1-0.dll
-a---- 2022-06-15 21:53 19864 api-ms-win-crt-utility-l1-1-0.dll
-a---- 2022-06-15 21:53 794260 base_library.zip
-a---- 2022-06-15 21:53 211 ceshi.pyc
-a---- 2022-06-15 21:53 3399200 libcrypto-1_1.dll
-a---- 2022-06-15 21:53 32792 libffi-7.dll
-a---- 2022-06-15 21:53 689184 libssl-1_1.dll
-a---- 2022-06-15 21:53 190008 pyexpat.pyd
-a---- 2022-06-15 21:53 1386 pyiboot01_bootstrap.pyc
-a---- 2022-06-15 21:53 1728 pyimod01_os_path.pyc
-a---- 2022-06-15 21:53 8809 pyimod02_archive.pyc
-a---- 2022-06-15 21:53 17668 pyimod03_importers.pyc
-a---- 2022-06-15 21:53 3495 pyimod04_ctypes.pyc
-a---- 2022-06-15 21:53 712 pyi_rth_inspect.pyc
-a---- 2022-06-15 21:53 2163 pyi_rth_multiprocessing.pyc
-a---- 2022-06-15 21:53 1101 pyi_rth_pkgutil.pyc
-a---- 2022-06-15 21:53 851 pyi_rth_subprocess.pyc
-a---- 2022-06-15 21:53 4451896 python39.dll
-a---- 2022-06-15 21:53 1735486 PYZ-00.pyz
-a---- 2022-06-15 21:53 28216 select.pyd
-a---- 2022-06-15 21:53 285 struct.pyc
-a---- 2022-06-15 21:53 1144936 ucrtbase.dll
-a---- 2022-06-15 21:53 1120824 unicodedata.pyd
-a---- 2022-06-15 21:53 94088 VCRUNTIME140.dll
-a---- 2022-06-15 21:53 64568 _asyncio.pyd
-a---- 2022-06-15 21:53 86072 _bz2.pyd
-a---- 2022-06-15 21:53 126520 _ctypes.pyd
-a---- 2022-06-15 21:53 271416 _decimal.pyd
-a---- 2022-06-15 21:53 65592 _hashlib.pyd
-a---- 2022-06-15 21:53 162360 _lzma.pyd
-a---- 2022-06-15 21:53 29752 _multiprocessing.pyd
-a---- 2022-06-15 21:53 46136 _overlapped.pyd
-a---- 2022-06-15 21:53 29240 _queue.pyd
-a---- 2022-06-15 21:53 79928 _socket.pyd
-a---- 2022-06-15 21:53 154168 _ssl.pyd
PS C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted>

可以看到裡面有生成了很多軟件包;

2.2、第二步

在第一步新生成的諸多文件中,我們需要用到兩個文件,一個是struct.pyc,另一個是ceshi.pyc;

PS C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted> ls .\struct.pyc
目錄: C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022-06-15 21:53 285 struct.pyc
PS C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted> ls .\ceshi.pyc
目錄: C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022-06-15 21:53 211 ceshi.pyc
PS C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted>

2.3、第三步

使用imhex軟件,這個軟件是十六進制編譯器,該軟件安裝就很簡單了,直接依次下一步即可,並不需要什麼特殊操作;安裝好之後打開struct.pyc文件,如下圖:

我們需要記錄下第一行的值,如下圖:

然後關閉該文件,打開另一個ceshi.pyc文件,如下圖:

修改第一行的值和struct.pyc文件的第一行的值相同,如下圖:

然後保存文件內容;

2.4、第四步

這裡我們需要使用到另一個模塊了,即uncompyle6,從該問末尾獲取該軟件,解壓之後使用如下命令進行安裝;

PS C:\Users\22768\Desktop\python-uncompyle6-master> python .\setup.py install

安裝完畢之後,我們重新回到有ceshi.pyc這個文件的目錄下;

PS C:\Users\22768\Desktop\yunwei_ceshi\dist\ceshi.exe_extracted> uncompyle6 .\ceshi.pyc > nihao.txt

這個nihao.txt就是我們的源代碼了。

3、軟件下載

本文一共用到了一個腳本pyinstxtractor.py,一個軟件imhex,一個pythonuncompyle6,我都打包好了,微信公眾號後台回復:python反編譯,即可獲取下載地址;

至此,本文結束。

更多內容請轉至VX公眾號 “運維家” ,獲取最新文章。

------ “運維家” ------
------ “運維家” ------
------ “運維家” ------

linux系統下,mknodlinux,linux目錄寫權限,大白菜能安裝linux嗎,linux系統創建文件的方法,領克linux系統怎麼裝軟件,linux文本定位;
ocr識別linux,linux錨定詞尾,linux系統使用記錄,u盤有linux鏡像文件,應屆生不會Linux,linux內核64位,linux自啟動管理服務;
linux計算文件夾大小,linux設備名稱有哪些,linux能用的虛擬機嗎,linux系統進入不了命令行,如何創建kalilinux,linux跟so文件一樣嗎。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved