【发布时间】:2013-11-13 19:39:03
【问题描述】:
在an article介绍Windows上的ROP之后,发现作者在ROP链中放了一些文字数字。
生成shellcode的代码sn-p:
rop += struct.pack('<L',0x10013b1c) # POP EBX # RETN
rop += struct.pack('<L',0xffffffff) # will be 0x1
rop += struct.pack('<L',0x100319d3) # INC EBX # FPATAN # RETN
rop += struct.pack('<L',0x100319d3) # INC EBX # FPATAN # RETN
#------------------------------------[dwSize (0x1) -> EBX]-#
rop += struct.pack('<L',0x10030361) # POP EAX # RETN
rop += struct.pack('<L',0x90909090) # NOP
#---------------------------------------------[NOP -> EAX]-#
根据我的理解,ROP链应该由指向gadget的内存地址组成,因此CPU会顺序执行相应内存地址的指令。然而,作者将0xffffffff 和0x90909090 放在了小工具链中。
有人可以解释这些文字数字在 ROP 链中的用途吗?谢谢。
【问题讨论】:
-
pop EBX指令使用堆栈中的下一个 dword 作为数据,而不是作为下一个小工具的地址
标签: assembly exploit windows-security