一次簡單的脫殼

butt3rf1y發表於2024-08-30

涉及:ESP 定律

例:https://files.cnblogs.com/files/blogs/824994/Magic_Shell.zip?t=1724993084&download=true

x64dbg 開啟 -> 符號 -> magic_shell.exe

下斷點

F9 執行到 EP

單步過 push,能看見 RSP 的值變紅

根據 ESP 定律,下硬體斷點


F9 跳轉後在最近的 jmp 跳轉下斷點

執行到斷點處 F7 步入

這個位置就是 OEP,使用外掛 Scylla dump 出就可以了

ESP 定律
ESP 定律的本質在於利用堆疊的平衡原理。在程式中,當執行函式呼叫時,會使用棧來儲存函式的返回地址和區域性變數。當函式執行完成時,棧中的資料將被彈出並恢復到呼叫函式之前的狀態。這個過程涉及到兩個關鍵的指令:callret。call 指令會將下一條指令的地址壓入棧中,以便在函式執行完成時能夠返回;而 ret 指令則會將棧頂的地址彈出並跳轉到這個地址,從而完成函式呼叫的返回操作。

一般流程:當單步執行時只有 ESP(RSP)變紅,變紅就是值發生改變,因此找到 ESP 所指向的記憶體位置,下硬體斷點,F9 執行到停下的位置,接著一般有一處跳轉,完成跳轉之後的地方就是 OEP。

適用範圍:幾乎全部的壓縮殼,部分加密殼。

相關文章