涉及: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 定律的本质在于利用堆栈的平衡原理。在程序中,当执行函数调用时,会使用栈来保存函数的返回地址和局部变量。当函数执行完成时,栈中的数据将被弹出并恢复到调用函数之前的状态。这个过程涉及到两个关键的指令:call
和ret
。call 指令会将下一条指令的地址压入栈中,以便在函数执行完成时能够返回;而 ret 指令则会将栈顶的地址弹出并跳转到这个地址,从而完成函数调用的返回操作。
一般流程:当单步执行时只有 ESP(RSP)变红,变红就是值发生改变,因此找到 ESP 所指向的内存位置,下硬件断点,F9 运行到停下的位置,接着一般有一处跳转,完成跳转之后的地方就是 OEP。
适用范围:几乎全部的压缩壳,部分加密壳。