6

我正在尝试编写一些最终以英文段落形式出现的 shellcode。这意味着我主要限于具有评估为字母数字字符或标点符号的操作码的指令。这实际上给我留下了许多不同的跳转指令,包括:、、、、、、、、、、、、、jo和(对应于字母)。这些跳跃中的每一个在决定是否跳跃之前都会执行一次测试。在大多数情况下,我可以结合跳转加上它的逆来确保在 shellcode 中发生跳转(例如使用then或then ),但在. 测试为jnojbjaejejnejbejajsjnsjpp-zjojnojejnejbjbCF=1

我的问题是,是否有任何一系列字母数字指令在功能上是 NOP,但也确保了这一点CF=1CF是进位标志,因此任何保证设置进位标志的操作就足够了。

还保证了jae,反正是保证了CF=0

4

1 回答 1

6

您可以使用“4444”设置CF为 0。

“44”XOR AL, 0x34

2XORs具有相同值的结果没有变化AL

但是,应该注意的是,这XOR会影响几乎所有的算术标志(影响AF未定义)。所以,它不完全是“NOP”。

在 32 位模式下,您可以使用“PhohohX7X”设置CF为 1。

“P”PUSH EAX
“呵呵”PUSH 0x686F686F
“X”POP EAX
“7”AAA
“X”POP EAX

也有一个警告AAA。它对大多数算术标志的影响是未定义的(CF并且AF例外,它们变得相等)。所以,它也不完全是“NOP”。

于 2012-05-18T19:34:01.540 回答