如何在输入中提供 NULL 字节?
How can I give NULL bytes in input?
我正在尝试利用小工具链接技术利用二进制文件(64 位)。我必须通过地址
0x00007ffff7e10cf8
其中包含代码
pop rax;ret
在以小端格式传递此输入时,我的 bash 发出警告说:
bash: warning: command substitution: ignored null byte in input
并且只打印到 7f,忽略 NULL 字节。
为了确保我理解 bash 忽略并且在遇到第一个 NULL 字节时不停止解析的概念。我尝试了 echo $(printf "\x00\x55\x44\x33\x22\x00\x34")
并且输出是
bash: warning: command substitution: ignored null byte in input
UD3"4
所以是的,bash 只是忽略 NULL 字节并一直解析到最后。
有没有办法在 bash 中实际传递 NULL 字节?我正在使用 bash 版本 5.0.3
shell 脚本并不是真正推荐的修补二进制文件的方法。但是,可以用 dd
来完成。比如说,你必须在文件的 0xff00-0xff07
位置写入 0x00007ffff7e10cf8
,覆盖已经存在的字节(从 0 开始计数)。您可以使用
#!/bin/bash
input='original.bin'
output='patched.bin'
patch='\x00\x00\x7f\xff\xf7\xe1\x0c\xf8' # Keep an eye on endianness!
start="$((16#FF00))"
{
dd if="$input" bs="$start" count=1 2>/dev/null
printf "$patch"
dd if="$input" bs="$((start+${#patch}/4))" skip=1 2>/dev/null
} >"$output"
我正在尝试利用小工具链接技术利用二进制文件(64 位)。我必须通过地址
0x00007ffff7e10cf8
其中包含代码
pop rax;ret
在以小端格式传递此输入时,我的 bash 发出警告说:
bash: warning: command substitution: ignored null byte in input
并且只打印到 7f,忽略 NULL 字节。
为了确保我理解 bash 忽略并且在遇到第一个 NULL 字节时不停止解析的概念。我尝试了 echo $(printf "\x00\x55\x44\x33\x22\x00\x34")
并且输出是
bash: warning: command substitution: ignored null byte in input
UD3"4
所以是的,bash 只是忽略 NULL 字节并一直解析到最后。
有没有办法在 bash 中实际传递 NULL 字节?我正在使用 bash 版本 5.0.3
shell 脚本并不是真正推荐的修补二进制文件的方法。但是,可以用 dd
来完成。比如说,你必须在文件的 0xff00-0xff07
位置写入 0x00007ffff7e10cf8
,覆盖已经存在的字节(从 0 开始计数)。您可以使用
#!/bin/bash
input='original.bin'
output='patched.bin'
patch='\x00\x00\x7f\xff\xf7\xe1\x0c\xf8' # Keep an eye on endianness!
start="$((16#FF00))"
{
dd if="$input" bs="$start" count=1 2>/dev/null
printf "$patch"
dd if="$input" bs="$((start+${#patch}/4))" skip=1 2>/dev/null
} >"$output"