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