一次简单的脱壳

涉及: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。

适用范围:几乎全部的压缩壳,部分加密壳。

posted @ 2024-08-30 12:52  butt3rf1y  阅读(27)  评论(0编辑  收藏  举报