python反編譯源碼
接下來具體說一下步驟:
這個文件在pyinstaller庫里,還沒有安裝的需要安裝一下(已經安裝的跳過安裝)
安裝完成後在python安裝路徑下的\Lib\site-packages文件夾搜索archive_viewer.py文件
找到文件後可以復制到你想要放置的位置(不復制也行)
這一步會把編譯出的文件都羅列出來,像這樣
但是我們只需要找到我們exe對應的名字的文件就好了,確認存在之後滑到最下面,會發現有個?號用於輸入接下來的命令,在這邊我們輸入
會顯示 to filename? 讓你輸入需要輸出的pyc文件名稱,這邊輸入 your_app.pyc 回車就好了
接下來又會顯示?號,接著輸入 x struct 回車,輸入struct文件名稱 struct 回車
由於用PyInstaller打包後,pyc文件的前8個位元組會被抹掉,所以最後要自己添加回去。前四個位元組為python編譯的版本,後四個位元組為時間戳。
這邊使用Hex Editor Neo軟體同時打開.pyc文件和struct文件,復制struct文件前面8個位元組插入到.pyc文件的前面:
這樣我們就得到了完整的pyc文件
安裝uncompyle庫
反編譯
2. python 反編譯 源碼還原py後,怎麼把它再編譯成pyc
不用編譯
Python每次執行的時候,都會檢查py是否有同名的pyc
如果沒有或者pyc比py生成時間更早,就會自動把py翻譯成位元組碼的pyc
然後由pyc解釋執行
3. python源碼編程成pyc後,怎麼防止反編譯
無法防止反編譯,但可以混淆,讓你即使反編譯了,也看不懂語法
下面一段源碼
sd=1
defseed(s):
globalsd
sd=s
defrandn(n):
globalsd
sd=(sd*1103515245+12345)&0x7fffffff
returnsd%n
defmain():
seed(11)
foriinxrange(4):
printrandn(313)
if__name__=='__main__':
main()
混淆後
oo000=1
if9-9:Ii.o0o00Oo0O-iI11I1II1I1I
defoooo(s):
globaloo000
oo000=s
if11-11:ii1I-ooO0OO000o
defii11i(n):
globaloo000
oo000=(oo000*1103515245+12345)&0x7fffffff
returnoo000%n
if66-66:iIiI*iIiiiI1IiI1I1*o0OoOoOO00
defI11i():
oooo(11)
forO0Oinxrange(4):
printii11i(313)
if78-78:i11ii11iIi11i.oOoO0oo0OOOo+IiiI/Iii1ii1II11i
if__name__=='__main__':
I11i()#
4. 有什麼工具可以將python編譯好的代碼.pyc反編譯為.py
depython是用來反編譯經過python編譯的後綴名為pyc或pyo的位元組碼文件的.
如果你找不到你寫的python源代碼,depython可以幫助你通過pyc/pyo文件來找回這些源代碼。
經depython反編譯得出的python源代碼,和你原來的代碼文件幾乎完全一樣。
http://www.depython.net/?lang=zh
5. 用Python2.7.1寫的小程序可以反編譯得到它的源代碼嗎
可以,網上有很多在線的反編譯工具,給你發幾個鏈接:
1、http://depython.com/index.php
2、https://github.com/eble/pyc2py
3、http://tool.lu/pyc/
不過好像第一個只適用於Python2.0-2.6,第二個適用於Python2.6,第三個應該可以反編譯2.7,你可以都試一下。
6. python-uncompyle反編譯
python的編譯後文件pyc,可以將pyc文件反編譯為py文件。
相應的工具: uncompyle
github地址: https://github.com/rocky/python-uncompyle6/
安裝: pip install uncompyle
安裝好後,注意執行的命令為 uncompyle6 ,而不是 uncompyle 。
查看幫助命令: uncompyle6 --help 、 uncompyle6 -h
反編譯單個文件 : uncompyle6 foo.pyc > foo.py
反編譯多個文件: uncompyle6 -o . *.pyc
例子:
7. 問一下,如何用python的decompile批量反編譯pyc 是批量
先將需要反編譯pyc,放在指定的路徑下,然後os.system.pat一個for
循環就可以批量編譯了。
>>>
import
os
>>>
file_list=[]
>>>loc_path='/hadoop/hadoop/'
>>>
file_list=os.listdir(loc_path)
>>>
for
f
in
file_list:
執行反編譯
8. PyInstaller打包、解包與反編譯.pyc文件
PyInstaller官網: https://www.pyinstaller.org/
假設有一個demo.py文件,在同目錄下啟動命令行或從命令行進入當前文件夾,使用如下命令打包
打包後同目錄下會產生兩個文件夾build和dist(distribution),dist文件夾內就是目標程序。
解包使用pyinstxtractor工具
Github地址: https://github.com/extremecoders-re/pyinstxtractor
假設在第1步中,使用-F參數將demo.py打包為獨立可執行文件demo.exe,進入dist文件夾,將pyinstxtractor.py放在該目錄下,在該目錄下啟動命令行或從命令行進入該文件夾,使用如下命令解包
解包得到的內容將放入同目錄下的demo.exe_extracted文件夾
找到目標.pyc文件,比如demo.pyc
反編譯.pyc文件使用uncompyle6工具
Github地址: https://github.com/rocky/python-uncompyle6
可以直接通過pip安裝uncompyle6
由於pyinstaller在打包可執行文件時會將.pyc文件頭部的16位元組magic head去掉,因此需要對需要反編譯的.pyc文件進行預處理,將文件頭部的16位元組magic head補充完整。這里使用一個開源的16進制編輯器ImHex。
Github地址: https://github.com/WerWolv/ImHex
進入demo.exe_extracted文件夾,用16進制編輯器打開struct.pyc文件復制頭部的16位元組magic head,再用16進制編輯器打開demo.pyc文件,將頭部的16位元組改為magic head,即將圖2中的部分更改為圖1中的值即可。
使用前一個命令,反編譯後的源碼內容會顯示在命令行窗口內;使用後一個命令,源碼會列印到指定文件中,如demo.py。
到此為止可以
Invalid pyc/pyo file - Magic value mismatch!
補充magic head後即可正常反編譯。
如果不是項目成員給所謂的程序而不肯給源碼,而我又繞不過這個程序的問題,我才不想折騰這些有的沒的。
9. 反編譯是什麼意思
計算機軟體反向工程(Reverse engineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(比如可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,
某些特定情況下可能推導出源代碼。反編譯作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
(9)python反編譯源碼擴展閱讀
反編譯是一個復雜的過程,反編譯軟體有:
1、SWF相關的反編譯程序
Action Script Viewer
第一個也是最強大的商業SWF反編譯工具,同類產品中,它的AS代碼反編譯效果最好,SWF轉Fla工程重建成功率最高。
2、Android相關的反編譯程序
SMALI/BAKSMAL
SMALI/BAKSMALI是一個強大的apk文件編輯工具,用於Dalvik虛擬機(Google公司自己設計用於Android平台的虛擬機)來反編譯和回編譯classes.dex。其語法是一種寬松式的Jasmin/dedexer語法,而且它實現了.dex格式所有功能(註解,調試信息,線路信息等)。
3、Python相關的反編譯程序
uncompyle2
uncompyle2可以直接轉化為十分完美的python源碼,並可以將反編譯後的源碼再次生成位元組碼文件。
參考資料來源:網路-反向編譯
10. 用Python2.7.1寫的小程序可以反編譯得到它的源代碼嗎
python是不能反編譯的,因為得到了一個python的程序,就是得到了它的源代碼。
python是解釋性語言,沒有編譯這一步驟,和c語言和java語言是不一樣的