恶意代码分析实战 15 加壳与脱壳
分析樣本Lab18-01.exe到Lab18-05.exe。
15.1 Lab18-01
將程序拖入PEiD。
使用深度搜索,發(fā)現是UPX的殼。
拖入OD中進行脫殼。手動脫殼的目的就是找到OEP也就是程序的原始入口點,最常見的方法就是查找尾部跳轉指令,一般是JMP指令,但是惡意代碼的作者有時候也會選擇return指令逃避檢測。尾部跳轉指令是一串無效字節(jié)前面的最后的一條有效指令,填充這些字節(jié)的目的就是保證區(qū)段中的對齊。
按F8手動執(zhí)行代碼,如果有向上跳轉,那么我們在下一句命令下一個斷點,然后運行到下一句。(或直接按F4)
找到尾部跳轉指令的位置為0x409f43.在IDA中查看。
在OD中繼續(xù)運行。
將代碼提取出來。
取消重建輸入表的選項,導出程序unpack.exe。
使用importREC導入程序。
修改OEP,點擊自動查找IAT。
點擊獲取輸入表。
說明已經成功了。
脫殼成功。
15.2 Lab18-02
載入OD,使用插件尋找OEP。
OD識別錯誤。
dump出程序。
使用impoortREC修復輸入表。
脫殼成功。
15.2 Lab18-03
使用插件,查找一連串0簽的ret無果后,使用esp定理查找。
存在pushad,自然也就會存在popad。
設置硬件斷點。
找到oep。
接下來的操作是,dump出程序,使用importREC修復輸入表。
15.3 Lab18-04
同樣是使用ESP定律。
跳轉到斷點之后,繼續(xù)運行幾步就可以找到oep。
15.4 Lab18-05
同樣是EXP定律,只不過有一個地方需要注意。
總結
以上是生活随笔為你收集整理的恶意代码分析实战 15 加壳与脱壳的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科技创新
- 下一篇: LeetCode 155.最小栈