[Linux] 使用 Decompile++ (pycdc) 反組譯 pyc 檔案
今天同事丟給我一個檔案,這檔案原本預期是 python 的 source code,
但副檔名雖然是 .py,可是內容卻不是純文字,也沒有辦法執行…
瞄了一下檔案內容… 再隨便開一個 .pyc 來比較看看…
嗯,是有點像是 .pyc…
再到這裡查了一下檔頭的四個 byte 是 03 f3 0d 0a,
果然是 python 2.7 編譯出來的 .pyc 檔案…
可是,這個是哪一個 py 編譯出來的 pyc 呢?這時只得找反組譯軟體了~
查了一下,Decompile++ (pycdc) 算是可以完成任務的囉~
參考資料:Decompile Python 2.7 .pyc
1. 下載 Decompile++ (pycdc)
可以在官網下載 zip 包,或是直接用 git 複製下來:
git clone https://github.com/zrax/pycdc.git
如果是直接下載 zip 檔的話,記得自己把它解壓縮~
注意:我是下載到 CentOS 6.2 上面,接下來的編譯步驟也都是在 CentOS 6.2 上完成的~
原本有想在 Mac 上編譯,但沒有成功,也懶得找原因囉~
2. 編譯 Decompile++ (pycdc)
在編譯之前,得先安裝 cmake,
因為 Decompile++ 的 Makefile 要用 cmake 才能產生出來:
sudo yum -y install cmake
進入在步驟 1 下載下來的 pycdc 目錄,
執行 cmake . 就可以產生在 CentOS 上使用的 Makefile:
cd pycdc
cmake .
有了 Makefile,就可以執行 make 進行編譯了:
make
編譯好之後,在 pycdc 目錄下會產生 pycdas 和 pycdc 兩隻程式,
pycdas 用來解碼成 python bytecode,
而 pycdc 則可以解碼成 python 的原始碼~
3. 使用 pycdc 反組譯 .pyc 檔案
執行 ./pycdc <pyc path> 就可以看到 python 原始碼:
./pycdc /tmp/test.pyc
不過在執行的過程當中,常常遇到 Segmentation fault 程式當掉,
但當掉前解碼出來的資訊還是可以參考一下,
比自己持有的 python 原始碼比較一下,就知道是哪一支程式,
有 CVS 系統的話,甚至是哪一個版本應該也可以比較的出來~
如果用 pycdas 的話,似乎比較不會出現當機的狀況,
只是 bytecode 是比較不好看懂的,不過也還是有提供資訊,
可以交互參考運用囉~^^