驅動人生樣本爲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
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**
直接使用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提取便可。這裏也須要和以前同樣修復頭部數據,方法和上面同樣。