RE套路 - 關於pyinstaller打包文件的復原


因為見到好多re題都是這個圖標 ↓ 的exe,於是決定總結一下這種python題目的套路(其實是怕太久沒遇到就忘了怎么做了。

P.S. 前幾天XCTF遇到一道極其少見的pyinstaller打包elf的逆向題,於是對本文進行了更新,添加解包elf內容,並更名為"關於pyinstaller打包文件的復原",記錄pyinstaller打包后的exe和elf如何解包->反編譯->獲得py源碼的過程。

image-20201205132623712

BTW:此篇blog主要是為了方便自己復制粘貼,所以命令里也直接放上路徑了,把對應路徑替換成自己的就好。

環境和工具:win10 + wsl2 + 010Editor

pyinstxtractor項目地址:extremecoders-re/pyinstxtractor: PyInstaller Extractor

uncompyle6安裝方法見:uncompyle6安裝使用方法

pyinstxtractor

兩種格式的解包方式只有這一part不一樣,下面的操作流程都相同。

exe

在cmd運行(easyRE.exe當前目錄下打開:

cp D:\_CTF_\_Tools_\pyinstxtractor.py .
python2 pyinstxtractor.py easyRE.exe

其中第一行是將pyinstxtractor.py復制到當前目錄下,然后第二行是使用pyinstxtractor(注意是python2)。

會在當前目錄生成easyRE.exe_extracted文件夾,其中有用的是easyRE(一般是解包提示是entry point的名字)和struct兩個沒有后綴名的文件

elf

pyinstxtractor官方項目的wiki中有提到如何解壓elf,在此把第一種簡單的方法記錄下來(親測有效。

在wsl運行(同樣是當前目錄,這里文件名是main

cp /mnt/d/_CTF_/_Tools_/pyinstxtractor.py .
objcopy --dump-section pydata=easyRE.dump easyRE
python2 pyinstxtractor.py easyRE.dump

就多了第二行,這里是把elf里pydata段分離開,具體看官方解釋。

然后會在當前目錄下生成easyRE.dump_extracted文件夾,同樣easyRE(一般是解包提示是entry point的名字)和struct有用

補頭,將無后綴文件改為.pyc

原easyRE文件的開頭。

struct文件的開頭。

image-20201102002058477

ctrl+shift+i -> 寫下要增加的字節數size,右邊value填0 -> 在struct文件里ctrl+c -> 回來光標在最開始時ctrl+v。

image-20201102003044827

得到

image-20201102003412300

這一步是將前面少了的文件頭部分插入到easyRE的開頭,形成新的二進制文件(不然會報錯Invalid pyc/pyo file - Magic value mismatch!),並增加后綴名.pyc

(補充二進制數據的目的是為了保證Magic value能match上,具體原理自行搜索。

uncompyle6

最后在cmd輸入

uncompyle6 easyRE.pyc > easyRE.py

即可獲取easyRE.py,有源代碼就能逆啦0v0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM