Null Free Shellcode

我试图将我写的汇编程序转换为无空
shellcode.

但是,我不确定如何针对某些说明进行此操作.
其中一些(英特尔语法)包括:

push 0x1000

mov BYTE [eax],0x31

我想避免使用一千次调用inc eax.我想的可能是带有xoring值的创意,而对于第二种,也许如果有一个标志要设置它使得它只需要8个字节的常量.

任何帮助表示赞赏.

最佳答案

push 0x1000

如果你可以备用一个寄存器(并且你不介意破坏标志),那么如下:

xor eax, eax
inc eax
shl eax, 12
push eax
mov BYTE [eax],0x31

这里的零不是来自常数,而是来自寻址模式.尝试:

xchg eax, ecx
mov BYTE [ecx],0x31
xchg eax, ecx
点赞