2014-04-30 31 views
-1

我需要输入字节到Python脚本。我需要做的从寄存器%EBX 10个字节装配偏移:无空Shellcode - 寄存器偏移10字节

89 43 0a 
mov $eax,0xa(%ebx) 

我应该提到的是,当我运行此脚本,我倾倒这些字节(和其他人)到文件中。该文件的内容然后成为我用来注入堆栈的shellcode。这个问题是,当C函数strcpy看到0x0a时,它停止复制它,认为它是一个空终止符。

我明白为什么会发生这种情况,但是如何让我的shellcode在不使用0x0a(空终止符值)的情况下解释为10个字节的偏移量?例如,如果我将值0a更改为08,则按我的意愿工作(当然,如果偏移量只有8个字节)。

的Python脚本是这样的:

print "\x89\x43\x0a" 
+0

您仍在将字节'0a'写入标准输出。我不确定你在这里做什么。 –

+0

它被解释为换行符是什么?如果以文本形式读取字节0A(在文本编辑器中打印到终端或其他文件),则为换行符。如果以二进制形式读取 - 例如在十六进制编辑器或机器代码中 - 您将会看到它仍然是0A。 – neil

+2

听起来像你想写[无空shellcode](http://en.wikipedia.org/wiki/Shellcode#Null-free_shellcode)。 –

回答

0

是微不足道的这样做,只是把它分解成两个部分均未0或10 :)

如:

add $5, %ebx 
mov %eax, 5(%ebx) 
sub $5, %ebx # optional: restore ebx 
+0

谢谢!正是我需要的。 – Alex