我一直在读这本书:Hacking, the art of exploitation
在第140页,该书解释了Nop Slide:
我们将创建这些NOP指令的大型数组(或雪橇)并放置它 在shellcode之前;那么,如果EIP寄存器指向找到的任何地址 NOP雪橇,它会在执行每个NOP指令时递增,一个在 一段时间,直到它最终到达shellcode。这意味着只要 返回地址被NOP底座EIP中的任何地址覆盖 register会将底座滑动到shellcode,这将正确执行。
但是使用这种技术,我们会用0x90覆盖返回地址,不是吗? EIP将转到0x90,导致段错误。 那么,你能清楚地向我解释一下这种技巧吗?谢谢:)
答案 0 :(得分:0)
不,你不会用NOP雪橇重写返回地址。一旦获得正确的偏移量,就必须使用地址重写返回地址,将某些内容指向NOP指令。而且因为NOP雪橇放在你的shellcode之前,它只会向下滑动并执行你的shellcode。所以60个字节长的NOP雪橇什么都不做。
这是因为(你可以在那本书中找到关于它的一切):
NOP是一个汇编指令,是' no operation' 的缩写。它是 一个单字节的指令,绝对没有任何作用。