简单尝试UPX脱壳
又是社團大佬講的東西,只不過這次沒有講好,大佬中途出了點問題沒法脫殼,我就自己研究一下
1.前置準備
先去網上找個UPX加殼軟件,然后給exe程序加殼(但不是所有程序都支持加殼,也有加殼工具不支持的文件)
我選擇的exe是自己用codeblock寫的簡單的程序
鏈接編譯生成try.exe
由于網上找到工具加殼要的結果和預期的不一樣,就去下載了命令行版的加殼程序upx.exe
使用方法,進入upx.exe目錄
把try.exe放入當前目錄加殼
查看upx殼,PEID和DIE都能識別殼
2.OD單步法脫殼
先來查看加殼前的堆棧
加殼后的堆棧
第一句話就是pushad,把從EAX到EDI寄存器壓入堆棧,保存現場(原來的值)
使用單步法,先一步步向下查看,直到找到POPAD語句出現的地方,因為一般UPX殼都是加在原程序的上方
單步執行按F8,遇到向下跳轉不用管繼續按(截圖和實驗程序無關)
遇到向上跳轉,選中它下一行代碼按F4繼續向下執行,不會跳轉回去(注意左邊黑色箭頭代表向上跳轉)(截圖和實驗程序無關)
我們單步向下運行,然后運行到一個地方的時候會無法繼續向下,觀察附近的代碼,程序入口(OEP)很大可能就在附近
當我運行到一個點時,程序會進入循環且會無法繼續單步,這時命令窗口就將數據打印出來了,說明程序已執行。
當然一般的UPX殼程序是在POPAD命令以后才出現OEP的,這里情況有點特殊
點擊插件>ollyDump>脫殼在當前調試的進程,將脫殼的程序保存(只有在找到OEP才能脫殼,不然生成的程序不會成功打印結果)
能成功運行
(待完善)
總結
- 上一篇: object转字符串
- 下一篇: struct net_device网络设