核心思路
核心思路就是不让edr发现函数是从shellcode中调用的,而是通过正常的堆栈调用的.
做法
- 返回地址伪造,覆盖函数返回地址,让安全工具无法回溯到shellcode.
- Stack Pivoting(堆栈切换),通过修改 RSP(栈指针)来切换到另一块内存作为栈,从而隐藏原始的调用栈。
- NtContinue伪造调用栈,获取线程上下文,修改rsp栈顶指针.
- 在调用栈上伪造合法的 EBP / RBP 指针,让调试器误以为代码是从合法的 API 执行的
- ROP技术,利用汇编代码,使用 push配合ret指令来返回到我们指定的代码段.