"strange" 如何在普通 DLL 中找到 ROP 小工具?编译器永远不会这样做。 (Return面向编程)
How can "strange" ROP gadgets be found in a normal DLL? Compilers would never do this. (Return-oriented programming)
小工具:
pushad
ret
来自某个 DLL 的合法程序对我来说毫无意义。
假设DLL是合法的,怎么可能自动搜索到gadget?使用它的函数示例可能会有所帮助。
指令编码为:
60 pushad
c3 ret
因此,无论这两个字节出现在哪里,都会获得一个 pushad; ret
小工具。例如,这条指令可以合理地存在于 SSE 代码中:
66 0f 60 c3 punpcklbw xmm0, xmm3
看到里面的60 c3
小工具了吗?或者,该小工具可以直接从某个地方获取。例如,假设在 0x4800c360
处有一些变量,我们尝试加载它的地址:
b8 60 c3 00 48 mov eax, 0x4800c360
又看到小工具了?
这个小工具还有很多其他方式可以在完全正常的代码中出现。
小工具:
pushad
ret
来自某个 DLL 的合法程序对我来说毫无意义。
假设DLL是合法的,怎么可能自动搜索到gadget?使用它的函数示例可能会有所帮助。
指令编码为:
60 pushad
c3 ret
因此,无论这两个字节出现在哪里,都会获得一个 pushad; ret
小工具。例如,这条指令可以合理地存在于 SSE 代码中:
66 0f 60 c3 punpcklbw xmm0, xmm3
看到里面的60 c3
小工具了吗?或者,该小工具可以直接从某个地方获取。例如,假设在 0x4800c360
处有一些变量,我们尝试加载它的地址:
b8 60 c3 00 48 mov eax, 0x4800c360
又看到小工具了?
这个小工具还有很多其他方式可以在完全正常的代码中出现。