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

python代碼反編譯

編輯:Python

反編譯代碼

1、找到相應得程序文件

如果有exe或者elf格式得文件,那就直接反編譯。

如果沒有找到,就找下拉去的文件夾中dist文件夾下熟悉的文件名,有可能是文件格式的,沒有後綴 。

2、提取文件

首先需要准備pyinstxtractor.py ,下載地址:https://github.com/extremecoders-re/pyinstxtractor

然後把下載的文件復制到需要反編譯的文件夾中,在命令行輸入python pyinstxtractor.py (要編譯的文件名)


這時候會得到一個後綴為_extracted的文件夾,這裡面就是需要的文件。
打開之後發現裡面都是pyc文件格式的,這時候我們就需要把pyc格式的文件轉換為py格式的文件。

3、轉換格式

3.1 修改文件頭

如果你報錯了,那麼就繼續。

這種錯誤就是需要修改文件頭,因為在壓縮和解壓的時候會存在文件頭的丟失。

  • 因為pyc文件都是16進制,所以我們需要一些工具打開進行觀察,這方面的可以進行百度,工具一抓一大把,我使用的是Notepad++ 裝了一個插件HEX-Editor.

這時候我們選擇打開struct.pyc(其他的也可以,主要是用來比較,從而找到正確的文件頭)

  • 通過對比發現前11個字節是不一樣的,這時候我們就把struct.pyc的前11字節替換需要編譯的文件開頭。(如果復制後發現後面兩個字節是變化的,不用管,那是代表時間的。)
  • 這時候會有個問題,有些文件的開頭是從e3開始的,這時候就直接把前11字節復制到文件頭就可以了。

3.2 編譯

完成後使用命令uncompyle6 當前文件名.pyc > 保存的文件名.py
這時候文件夾中就會有文件了,這時候就可以看到代碼的原始樣貌了。
但是這只是一個文件,如果是大項目的話,可能會有很多依賴包,就包括你寫的函數。

3.3 尋找依賴包

相關依賴包都在PYZ-00.pyz文件裡面。

這時候我們需要使用到 pyi-archive_viewer.py
這個文件在(python環境)\Scripts裡,是需要安裝pyinstaller的,沒有安裝的需要安裝一下(已經安裝的跳過安裝)pip install pyinstaller

安裝完成後在將(python環境)\Scripts添加到環境變量path裡面,這樣就可以直接在命令行使用了。
使用命令 pyi-archive_viewer.py PYZ-00.pyz然後就會進入到

然後找到自己想要編譯的文件名,在?後輸入x 文件名 ,然後回在下一步輸入保存的文件名,後綴這裡就先寫上.pyc,回車之後返回文件夾就會看到相應的文件。

3.4 轉換格式

我們需要安裝uncompyle6,是一個python庫,pip conda都可以。

安裝完成後,這在當前目錄下使用cmd命令行 輸入 uncompyle6 當前文件名.pyc > 轉換完成保存的文件名.py

PS:在反編譯中發現一個嚴重的問題,如果在PYZ-00.pyz的需要編譯的依賴包非常多,那只能一個個的取出來,非常的SB,開頭的文件提取,以及後面的修改文件頭、轉換格式都是可以編程快速進行的,但是在修改文件頭的時候還是出了點問題,後續如果完成了自動化的過程,會再添加到文章中。


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