[Linux] 使用 Decompile++ (pycdc) 反組譯 pyc 檔案

[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 是比較不好看懂的,不過也還是有提供資訊,

可以交互參考運用囉~^^

 

(本頁面已被瀏覽過 2,633 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料