從Python Installer打包程式拖出Python程式碼

卡關T__T

登愣,之前卡關很久的FireEye的Python題目
根據Icon可以大概推知這支Python程式透過Python Installer來打包(畢竟Python能打包成.exe的工具不多XD)後來得知有個開源工具可以替我們撈出Source Code: PyInstaller Extractor(後來查了一下這套工具在國外好像蠻有名的 可以看此篇 Unpacking Pyinstaller Packed Python Malware
那麼工具載點在這裡:PyInstaller Extractor Source,載回來後可以得到一個PyInstxtractor.py
底下紀錄如何操作這套.py工具


手術台

今天你獲得了一個Python Installer包裝好的程式(這邊拿的是Fire Eye的flare-on題目第三題 elfie.exe)那要怎麼透過PyInstxtractor.py替我們撈出Source呢?

只要看到以上字串就表示解析成功了,接著回到你的執行目錄之下可以看到:

會看到在目錄之下會產生很多從這個elfie.exe解析出來的區段文件,其他基本上都是包入的runtime,比較重要的是跟程式同名的文件(如在此篇解析出來就會是elfie)打開來看看

打開此文件後可以看到它其實是個Python腳本,不過你會看到相當大量的莫名其妙的Base64的Code,最後底下Import base64在做exec(base64.b64decode(...一堆base64...)),尾巴會有個NUL。

這裏我們可以得知這隻打包好的程式被跑起來時,Script會把透過exec()來執行Python的程式碼執行起來,在此我們可以看到被執行的程式碼其實也就是base64.b64decode(...一堆base64...)這段了,所以我們只要設法把這段程式碼Print出來就可以了。


所以我們可以手動修改一下這段程式碼,把底下NUL的部分刪掉,然後把exec()改成Print()
然後我們再回到終端機下把這個elfie文件當作Python Script跑起來看看:


接著到執行目錄下看看Code.txt:

 就可以看到程式碼囉(不過上面那段Base64又是需要再做一次反轉,這層開始就是Python Code了)

留言

這個網誌中的熱門文章

[C#] Lambda花式應用噁爛寫法(跨UI委派秒幹、多線程處理...etc)

[Windows] 逆向工程 C++ 中入口函數參數 main(argc, argv) 與如何正確的進行參數劫持

重建天堂之門:從 32 位元地獄一路打回天堂聖地(上)深度逆向工程 WOW64 設計