又是一个睡眠加密的东西。顺便这也用了 GitHub 默认的仓库名。
TpAllocWork + TpPostWork + TpWaitForWork + TpReleaseWork 用于创建 + 执行 + 清理回调。
这个回调是一些粗糙的汇编代码,它布置了大量 ROP gadget,将参数(要么是硬编码的值,要么是基于作为 TpAllocWork 参数传入的结构体中的偏移量)弹出到正确的寄存器中,然后返回到下一个 gadget/函数。在某些函数调用之间,通过压入 5 个垃圾值和一个使栈指针移动 40 字节的 gadget 来创建填充,以此粗暴地修复我遇到的一些奇怪的栈问题。这可能也是调用栈看起来很难看的原因,但我不知道还能怎么处理。
如果你想扩展这个项目并让它真正有用,会碰到很多奇怪的栈操作(至少在我这边是这样)。另外,无法保证我找到的 ROP gadget 会出现在所有 Windows 版本中(我是在 Server 2016 上进行开发的)。
Kudaes,感谢创建 RustChain,我的 ROP 想法来源于此
C5pider,感谢创建 Ekko,并帮助我理解睡眠加密
x86matthew,感谢帮我排查奇怪的栈问题
NinjaParanoid,感谢提供关于 Tp API 的博客文章