【发布时间】:2019-10-30 07:26:04
【问题描述】:
我有一些来自 shell 代码有效负载的示例代码,显示了一个 for 循环并使用 push/pop 设置计数器:
push 9
pop ecx
为什么不能只用mov?
mov ecx, 9
【问题讨论】:
-
你有没有机会在漏洞利用或 shellcode 中看到这一点?我问是因为这种技术的优点是它不会在编码中添加 NUL(0) 字节。
mov ecx, 9在其编码中确实有零。我可以看到这一点有几个原因 a) 程序员是汇编新手并且代码很糟糕,(b) 它的编码比mov短 (c) 在 push 和 pop 之间有一个标签,并且 pop 位于循环的顶部,(d) 有人试图在 16 字节边界上对齐循环顶部,(e) 有人正在编码以避免编码中的 NUL 字节(shell 漏洞利用) -
(f) 这是编译器生成的,可能是代码生成和有限/无优化(错过优化)的结果
-
这也可能是需要避免 NUL 字节的 shell 代码。
-
谢谢,这是来自恶意代码示例 :)
-
没问题。有一种预感,这可能是一种利用;-)。这就是为什么我觉得有必要在我的第一条评论中提问。这是它实际上最有意义的一个地方。我会更新标签和问题。
标签: assembly x86 exploit shellcode