Python反編譯的兩種實(shí)現(xiàn)方式
Python反編譯兩種方式
以前聽說py編譯的程序不安全,容易被反。這兩天刮臺(tái)風(fēng)了,閑著也是閑著,自己也跟著搗鼓了一番。
為了不給別人帶來不好的影響,我編譯我自己寫的代碼來做測(cè)試,代碼頭部如下圖,引用了幾個(gè)常見庫:
用pyinstaller進(jìn)行完整打包:
pyinstaller -F g.py
打包結(jié)束,在dist目錄得到目標(biāo)程序g.exe:
接下來用兩種方式進(jìn)行反編譯:
一、pyinstxtractor+uncompyle6方式
將pyinstxtractor.py和目標(biāo)exe放在同一個(gè)目錄
在目錄進(jìn)入命令行窗口,輸入命令:
python pyinstxtractor.py g.exe
會(huì)在當(dāng)前目錄生成一個(gè)目標(biāo)_extracted 的文件夾,里面有一大堆文件,其中有一個(gè)與目標(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)前目錄生成對(duì)應(yīng)的py文件:
打開瞧一瞧,和源文件對(duì)比一下,頭部多了一些uncompyle6的信息,其余的和源文件一毛一樣。
二、pycdc方式
前面還是同上面的方式,得到pyc文件(步驟2);
將pycdc.exe和pyc文件放同一目錄,進(jìn)入命令行窗口,輸入以下命令:
pycdc.exe g.pyc > g.txt
反編譯結(jié)果被輸出到g.txt中,當(dāng)然后綴也可以改成.py啥的。
對(duì)比結(jié)果,這種方式好像代碼都變成純文本了,除了一些換行會(huì)錯(cuò)亂,其他的還原度還是極好的。
總結(jié)
以上只是最基本的兩種反編譯Python打包的exe方式,也都順利拿到我們想要的py源碼。
實(shí)際反編譯的時(shí)候,可能會(huì)遇到很多情況,比如加密、magic頭變化、依賴庫、py版本等問題,只能相應(yīng)的再去找解決辦法,見招拆招了。
當(dāng)然,網(wǎng)上還有很多方法,比如pyi-archive_viewer提取pyc文件,但大體思路都是exe > pyc > py。
這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用urllib模塊的urlopen超時(shí)問題解決方法
這篇文章主要介紹了Python使用urllib模塊的urlopen超時(shí)問題解決方法,本文使用socket模塊中的setdefaulttimeout函數(shù)解決了超時(shí)問題,需要的朋友可以參考下2014-11-11python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)
這篇文章主要介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-04-04Python調(diào)用ChatGPT的API實(shí)現(xiàn)文章生成
最近ChatGPT大火,在3.5版本后開放了接口API,所以很多人開始進(jìn)行實(shí)操,這里我就用python來為大家實(shí)現(xiàn)一下,如何調(diào)用API并提問返回文章的說明2023-03-03Win10下安裝并使用tensorflow-gpu1.8.0+python3.6全過程分析(顯卡MX250+CUDA9.
這篇文章主要介紹了Win10下安裝并使用tensorflow-gpu1.8.0+python3.6全過程(顯卡MX250+CUDA9.0+cudnn),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Python 實(shí)現(xiàn)兩個(gè)服務(wù)器之間文件的上傳方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)兩個(gè)服務(wù)器之間文件的上傳方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02python監(jiān)控nginx端口和進(jìn)程狀態(tài)
這篇文章主要為大家詳細(xì)介紹了python監(jiān)控nginx端口和進(jìn)程狀態(tài),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09python通過cookie模擬已登錄狀態(tài)的初步研究
對(duì)于那些需要在登錄環(huán)境下進(jìn)行的爬蟲操作,模擬登陸或偽裝已登錄狀態(tài)是一個(gè)剛性需求。這篇文章主要介紹了python通過cookie模擬已登錄狀態(tài)的相關(guān)資料,需要的朋友可以參考下2016-11-11使用Python實(shí)現(xiàn)遺傳算法的完整代碼
這篇文章主要介紹了使用Python實(shí)現(xiàn)遺傳算法,其本質(zhì)是一種高效、并行、全局搜索的方法,自適應(yīng)的控制搜索過程以求得最優(yōu)解,需要的朋友可以參考下2023-03-03