Python反編譯的兩種實(shí)現(xiàn)方式
Python反編譯兩種方式
以前聽說py編譯的程序不安全,容易被反。這兩天刮臺風(fēng)了,閑著也是閑著,自己也跟著搗鼓了一番。
為了不給別人帶來不好的影響,我編譯我自己寫的代碼來做測試,代碼頭部如下圖,引用了幾個常見庫:

用pyinstaller進(jìn)行完整打包:
pyinstaller -F g.py

打包結(jié)束,在dist目錄得到目標(biāo)程序g.exe:

接下來用兩種方式進(jìn)行反編譯:
一、pyinstxtractor+uncompyle6方式
將pyinstxtractor.py和目標(biāo)exe放在同一個目錄

在目錄進(jìn)入命令行窗口,輸入命令:
python pyinstxtractor.py g.exe

會在當(dāng)前目錄生成一個目標(biāo)_extracted 的文件夾,里面有一大堆文件,其中有一個與目標(biāo)exe同名的pyc文件,我這邊就是g.pyc。
安裝uncompyle6庫,按以下命令安裝:
pip install uncompyle6
將pyc文件反編譯為py文件:
在第2步的目標(biāo)_extracted 文件夾進(jìn)入命令行窗口,輸入以下命令,后面的.py文件名隨意:
uncompyle6 g.pyc>g.py

回車后在當(dāng)前目錄生成對應(yīng)的py文件:

打開瞧一瞧,和源文件對比一下,頭部多了一些uncompyle6的信息,其余的和源文件一毛一樣。

二、pycdc方式
前面還是同上面的方式,得到pyc文件(步驟2);
將pycdc.exe和pyc文件放同一目錄,進(jìn)入命令行窗口,輸入以下命令:
pycdc.exe g.pyc > g.txt
反編譯結(jié)果被輸出到g.txt中,當(dāng)然后綴也可以改成.py啥的。

對比結(jié)果,這種方式好像代碼都變成純文本了,除了一些換行會錯亂,其他的還原度還是極好的。

總結(jié)
以上只是最基本的兩種反編譯Python打包的exe方式,也都順利拿到我們想要的py源碼。
實(shí)際反編譯的時候,可能會遇到很多情況,比如加密、magic頭變化、依賴庫、py版本等問題,只能相應(yīng)的再去找解決辦法,見招拆招了。
當(dāng)然,網(wǎng)上還有很多方法,比如pyi-archive_viewer提取pyc文件,但大體思路都是exe > pyc > py。
這些僅為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用Python實(shí)現(xiàn)簡易計算器的示例代碼
最近學(xué)習(xí)了字符串,運(yùn)算符,條件語句,循環(huán)語句,我在想可以用我最近學(xué)的東西做什么? 看到運(yùn)算我就想到了可以做一個簡易的計算器,感興趣的可以了解一下2022-11-11
Pandas實(shí)現(xiàn)數(shù)據(jù)拼接的操作方法詳解
Python處理大規(guī)模數(shù)據(jù)集的時候經(jīng)常需要使用到合并、鏈接的方式進(jìn)行數(shù)據(jù)集的整合,本文為大家主要介紹了.merge()、?.join()?和?.concat()?三種方法,感興趣的可以了解一下2022-04-04
Python實(shí)現(xiàn)電視里的5毛特效實(shí)例代碼詳解
這篇文章主要介紹了Python實(shí)現(xiàn)了電視里的5毛特效,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
詳解Python中@staticmethod和@classmethod區(qū)別及使用示例代碼
這篇文章主要介紹了詳解Python中@staticmethod和@classmethod區(qū)別及使用示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)子彈與碰撞處理篇
相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,下面開始講解子彈與碰撞處理,在本課中,我們將添加玩家與敵人之間的碰撞,以及添加供玩家射擊的子彈2022-08-08
Python利用socket實(shí)現(xiàn)多進(jìn)程的端口掃描器
作為開發(fā)人員經(jīng)常需要查看服務(wù)的端口開啟狀態(tài)判斷服務(wù)是否宕機(jī)。特別是部署的服務(wù)比較多的情況下,可能存在幾個甚至幾十個服務(wù)端口的占用。所以本文將利用socket實(shí)現(xiàn)多進(jìn)程的端口掃描器,需要的可以參考一下2022-12-12

