Ⅰ 反編譯是什麼意思
計算機軟體反向工程(Reverse engineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(比如可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,
某些特定情況下可能推導出源代碼。反編譯作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
(1)python3反編譯擴展閱讀
反編譯是一個復雜的過程,反編譯軟體有:
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源碼,並可以將反編譯後的源碼再次生成位元組碼文件。
參考資料來源:網路-反向編譯
Ⅱ 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()#
Ⅲ 反編譯python編寫的exe文件的詳細方法
接下來具體說一下步驟:
這個文件在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庫
反編譯
Ⅳ python文件後綴是什麼
python文件後綴總結:
(1).py:這通常是您編寫的輸入源代碼。
(2).py3:Python3腳本(Python3腳本通常以.py而不是.py3結尾,很少使用)。
(3).pyc:這是編譯好的位元組碼。如果導入一個模塊,python將生成一個*.pyc包含位元組碼的文件,以便再次導入它更容易(也更快)。
.pyc二進制文件可以反編譯成.py文件,反編譯軟體叫Easy Python Decompiler。
(4).pyo:這是在優化(-O)時創建的*.pyc文件,從Python3.5開始,Python將只使用.pyc而不是.pyo和.pyc。
(5).pyd:這基本上是一個Windows DLL文件。
(6).pyi:MyPy存根,存根文件(PEP 484)。
(7).pyw:用pythonw.exe執行的Windows的Python腳本。
(8).pyx:將Cython src轉換為C/C++。
(9).pyz:Python腳本歸檔(PEP 441)(這是一個包含標准Python腳本頭之後的二進制形式的壓縮Python腳本(ZIP)的腳本)。
(10).pywz:用於MS-Windows的Python腳本歸檔(PEP 441)(這是一個包含標准Python腳本頭之後的二進制形式的壓縮 Python腳本(ZIP)的腳本)。
(11).py [cod]:.gitignore中的通配符表示該文件可能是.pyc,.pyo或.pyd。
(12).rpy:包含應用程序或框架特定功能的RPython腳本或Python腳本。
(13).pyde:處理使用的Python腳本。
(14).pyp:Py4D Python插件。
(15).pyt:Python聲明文件。
眾多python培訓視頻,盡在python學習網,歡迎在線學習!
Ⅳ Python的while 1跟while True到底有什麼區別
定義兩個方法,分別使用while循環
defw():
while1:
pass
defw2():
whileTrue:
pass
單從功能上說,兩種無任何區別,那麼,來看看位元組碼上的區別:
importdis#載入反編譯模塊,Python內置的
dis.dis(w)#對應的是while1,下面是輸出
20SETUP_LOOP3(to6)
3>>3JUMP_ABSOLUTE3
>>6LOAD_CONST0(None)
9RETURN_VALUE
dis.dis(w2)#對應的是whileTrue,下面是輸出
20SETUP_LOOP10(to13)
>>3LOAD_GLOBAL0(True)
6POP_JUMP_IF_FALSE12
39JUMP_ABSOLUTE3
>>12POP_BLOCK
>>13LOAD_CONST0(None)
16RETURN_VALUE
很明顯, while 1的位元組碼只有while True的一半.
為什麼呢? 因為Python2.x中True不是關鍵字,只是一個全局變數而已
Python3中,True、False是關鍵字,就沒有什麼區別了。
更詳細,更專業的分析,請看
http://stackoverflow.com/questions/3815359/while-1-vs-for-whiletrue-why-is-there-a-difference
Ⅵ python寫的程序,轉成了exe文件,怎麼進行反編譯為python源碼
1、電腦桌面,輸入「win+R」組合鍵,在彈出窗口中輸入「cmd」,點擊確定。