python的exe反編譯

python的exe反編譯

驅動人生樣本爲python打包的exe文件,嘗試反編譯爲py文件。編輯器

使用pyinstxtractor.py生成pyc文件。工具

實際嘗試發現,直接反編譯會報錯ui

看到前面利用pyinstxtractor.py反編譯的錯誤裏有個提示「not a pyinstaller archive」,而用來提取的py腳本叫archive_viewer.py(使用archive_viewer.py要安裝PyInstaller,經過pip install pyinstaller便可安裝)3d

方法1、使用archive_viewer.py提取pyc

archive_viewer.py命令code

#這裏是archive_viewer.py可使用的命令,這裏咱們用「X」提取文件
    U: go Up one level
    O <name>: open embedded archive name
    X <name>: extract name
    Q: quit

因爲用PyInstaller打包後,pyc文件的前8個字節會被抹掉,因此最後要本身添加回去。blog

前四個字節爲python編譯的版本,後四個字節爲時間戳。(四個字節的magic number、四個字節的timestamp)ip

想要得到編譯版本能夠查看打包文件裏struct的信息,so這裏仍是提取出struct這個文件源碼

用16進制編輯器打開struct文件,複製其前8個字節it

添加到ii.pyc中

而後使用工具反編譯pyc便可獲得py。

**可用uncompyle *.pyc反編譯pyc文件獲得py**

方法2、使用pyinstxtractor.py提取pyc

直接使用pyinstxtractor.py去提取exe文件中的pyc會報錯,須要去掉簽名信息後再使用pyinstxtractor.py解開

首先去掉exe文件的簽名

查看pyinstaller源碼得知,PyInstaller首先會經過讀取程序最後的數據進行識別,若是是符合格式的纔會進行解析(c/Program Files/Python/Python37/Lib/site-packages/PyInstaller/archive/reader.py)

MAGIC是文件末尾開始識別的地方。

pyinstaller2.0是包括MAGIC在內的24個字節長度

pyinstaller2.1是包括MAGIC在內的88個字節長度

\014\013\012\013\016 是8進制,可轉換爲16進制查看

使用16進制編輯器打開svchost.exe,從最後向前搜索MEI,找到匹配MAGIC的整個結構。

從MEI開始,選中向後88個字節長度爲止,剩下後面部分全都刪掉(刪除格式以後的數據)。

而後就完成了去簽名。

最後直接用pyinstxtractor.py提取便可。這裏也須要和以前同樣修復頭部數據,方法和上面同樣。

相關文章
相關標籤/搜索