Assembly 从机器代码中删除空字节的脚本?

Assembly 从机器代码中删除空字节的脚本?,assembly,low-level,shellcode,Assembly,Low Level,Shellcode,我创建了一些机器/外壳代码,运行时什么也没发生。它与其他外壳代码一起工作,因此我的外壳代码一定有问题。它包含空字节,我读到当有空字节时程序崩溃。通过使用msfvenom,我知道它具有删除空字节的功能。我的代码不是来自msfvenom,但它意味着必须有一种方法可以用脚本删除空字节,对吗? 非常感谢您的帮助。代码中的空字节有其用途;你不能简单地移除它们。只有当你依靠C字符串和strcpy将外壳代码放入受害者程序时,它们才是一个问题。我知道这一点。必须用不产生空字节的类似代码替换它们。我使用的是一个C

我创建了一些机器/外壳代码,运行时什么也没发生。它与其他外壳代码一起工作,因此我的外壳代码一定有问题。它包含空字节,我读到当有空字节时程序崩溃。通过使用msfvenom,我知道它具有删除空字节的功能。我的代码不是来自msfvenom,但它意味着必须有一种方法可以用脚本删除空字节,对吗?
非常感谢您的帮助。

代码中的空字节有其用途;你不能简单地移除它们。只有当你依靠C字符串和strcpy将外壳代码放入受害者程序时,它们才是一个问题。我知道这一点。必须用不产生空字节的类似代码替换它们。我使用的是一个C++程序的代码,我用同样的语言运行它。由于代码很长,它有很多空字节。是否有删除它们的提示?@Marvlogs您需要手动检查代码,并将每个包含NUL字节的指令替换为不包含NUL字节的指令。让你的汇编程序生成一个程序列表;它有助于查找NUL字节。这通常是一个需要有关CPU指令集的经验和知识的过程。@fuz:您可以想象一些自动规则,如将
mov-reg,imm32
转换为
push-imm8
/
pop-reg
,或转换为
mov-reg,val+0x11111111
/
lea-reg-0x11111111]
。或
[reg+disp32]
寻址模式,因为您需要超过+-8位。我猜可能
在寄存器中添加一个偏置常数,然后减去偏置,然后在使用地址后恢复原始。。。但这很容易变得过于臃肿。不能处理一切。e、 g.在向前的
jmp
调用中,超过127个字节的调用显然无法自动执行。