如何在正常的 DLL 中找到“奇怪的”ROP 小工具?编译器永远不会这样做。 (面向回报的编程)
Posted
技术标签:
【中文标题】如何在正常的 DLL 中找到“奇怪的”ROP 小工具?编译器永远不会这样做。 (面向回报的编程)【英文标题】:How can "strange" ROP gadgets be found in a normal DLL? Compilers would never do this. (Return-oriented programming) 【发布时间】:2020-05-04 15:39:45 【问题描述】:小工具:
pushad
ret
在一个合法的程序中,来自某个 DLL 对我来说毫无意义。
假设 DLL 是合法的,那么如何通过自动搜索找到小工具?使用它的函数示例可能会有所帮助。
【问题讨论】:
【参考方案1】:指令编码为:
60 pushad
c3 ret
所以无论这两个字节出现在哪里,都会获得一个pushad; ret
gadget。例如,这条指令可以合理地存在于 SSE 代码中:
66 0f 60 c3 punpcklbw xmm0, xmm3
看到里面的60 c3
小工具了吗?或者,该小工具可以从某个直接获取。例如,假设0x4800c360
有一些变量,我们尝试加载它的地址:
b8 60 c3 00 48 mov eax, 0x4800c360
又看到小工具了吗?
这个小工具可以通过很多其他方式以完全正常的代码出现。
【讨论】:
或者甚至像add eax, 0x60; ret
这样的东西来自return foo+96;
以上是关于如何在正常的 DLL 中找到“奇怪的”ROP 小工具?编译器永远不会这样做。 (面向回报的编程)的主要内容,如果未能解决你的问题,请参考以下文章