Pages - Menu

2020年6月10日 星期三

[逆向工程]PYTHON執行檔之反組譯

前言

來源於某人給我一個自動搶網站物品的程式,
於是很好奇是怎麼寫的。簡單記錄一下過程,雖然最後一步沒拆出來。
還不確定原因是什麼,但至少先留個底吧


正文

1.分析
一開始拿到的是一個執行檔,但不知道他是用什麼寫的。
先用16進制編輯器看一下資料吧。
從(Fig.1)可以看到幾個關鍵字,Python3.7以及selenium

(Fig.1)

2.反組譯
既然知道了是python做出來的,
那就好辦了。
a.解開執行檔
python-exe-unpacker 下載pyinstxtractory.py

python pyinstxtractor.py exapmle.exe

至此在同一層目錄底下會出現 example.exe_extracted 這個資料夾(Fig.2)


(Fig.2)

b.尋找要分析的檔案
再來就是進去裡面找.pyc的檔案了,
如果沒有的話,會有一個跟執行檔名稱一樣且無副檔名的檔案(Fig.3)。

(Fig.3)
再來修改該檔案的副檔名,加上.pyc,
會變成 example.pyc

c.加上標頭
用剛剛的16進制編輯器打開exmple.pyc(Fig.4),
此時要去尋找你電腦所擁有的pyc檔案,沒有的話就自己產生一個吧。
不知道怎麼產生,可以看一下 Python 的 .py 和 .pyc 檔有什麼不同 ?
python3.7之後會在__pycache__ 的資料夾底下出現。

這邊開啟的檔案為 datetime.cpython-36.pyc
取 datetime.cpython-36.pyc 的 第一行資料至 b 欄位,
然後直接貼到example.pyc的前面(請注意不是覆蓋)(Fig.5),這些代表檔案編輯的時間,
如果需要知道原理請看 python程式反編譯


(Fig.4)

(Fig.5)

d.pyc還原
有些檔案不用c的步驟,但有些要。
再來安裝 uncompile6
或下指令安裝

pip install uncompile6
最後 將example.pyc轉成a.py
uncompyle6 example.pyc > a.py
或是將example.pyc轉成 pyc_dis 的原文件
uncompyle6 -o . example.pyc

上面的兩種我都失敗,因為卡關了(Fig.6),如果有前輩知道怎麼解還請告知。

(Fig.6)

BTW 其實目前也有許多線上工具可將pyc或pyo轉成 py
Python反編譯
pyc反編譯
改天再更深入的探討怎麼解決了吧,
應該會看 強大的pyc,有寫到手動逆向工程。
目前也就知道別人寫程式去搶東西,也是使用爬蟲的方式,
selenium 真是強大阿。

ref.
[數據恢復] 如何把遺失的python source code 從執行檔中找回來?
Day8 Python 基礎 - pyc 是什麼
pyc文件反編譯到Python源碼
python中pyc和pyo的作用

沒有留言:

張貼留言