Metasploit 中的 NOPS

信息安全 元数据 外壳代码
2021-08-22 21:22:45

问题

我不知道 Metasploit 框架中的“NOP”是什么或其他。

我所知道的

Metasploit Unleashed说:“Nops 使有效负载大小保持一致。” 一些问题帖子提到缓冲区溢出。

我想知道的

为什么 Nops 保持有效载荷大小一致?Nops 使有效载荷大小与什么保持一致?什么是 Nop,究竟是什么?缩写?化名?它代表更长的时间吗?

“nop”是过程还是数据?(例如:你是“运行”一个 nop,还是“发送”一个 nop?)为什么他们称它们为“雪橇”和“雪橇”?(我推断这两个名字都是指你在冬天滑下山的东西,这似乎暗示“nop”以某种方式润滑某种数据事务)

我已经在哪里寻找答案

http://www.offensive-security.com/metasploit-unleashed/

http://my.safaribooksonline.com/book/networking/security/9780596009632/metasploit/evasion_using_nops_and_encoders#X2ludGVybmFsX0h0bWxWaWV3P3htbGlkPTk3ODA1OTYwMDk2MzIlMkZzYW1wbGVfZXZhc2lvbl9vdXRwdQ

http://www.securitytube.net/questions/id/35

http://seclists.org/metasploit/2009/q2/125

http://en.wikipedia.org/wiki/Buffer_overflow

http://en.wikipedia.org/wiki/Polymorphic_code

1个回答

在汇编代码中,NOP是 No OPeration 的缩写。这对于 x86 芯片最为人所知的是0x90. 当处理器加载该指令时,它在一个周期内什么都不做(至少有用),然后将寄存器推进到下一条指令。

NOP 保持有效负载大小一致

...通过确保其他代码未使用的任何空间仍然可以由处理器有效执行而没有副作用。这个“ NOP雪橇”也是DEFCON 19 CTF冠军欧洲Nopsled Team等幽默名字的来源。

这一点的实际重要性与编写指令跳转有关。跳转可以是相对跳转(读取当前位置之前 8 个字节的内存)或绝对跳转(读取位于位置 0x874710 的内存)。如果使用绝对跳转完全移动数据,则必须重新编码对它的任何引用。如果您将一条指令相对于另一条指令移动,您还必须重新编码相对跳转。加入 NOP 可以简化问题,因为在一系列 NOP 中任意位置的跳转将继续执行第一条可执行指令,并防止处理器读取会停止执行并使软件崩溃的无效代码。

最普遍的是,如果您知道堆栈的指针将指向连续内存地址范围内的某个位置,您将用 NOP 填充它,然后将您的代码放在后面。

查看这个shellcode 编写教程,它解释了何时使用 NOP 来获得更好的理解。