bash-以十六进制形式输入标准输入的字符

问题描述 投票:3回答:3

我想将非ASCII字符(0xfe0xed等)写入程序的标准输入。

与这个问题有很多类似的问题,但是我没有找到答案,因为:

  • 我想写单字节字符,而不是unicode字符
  • 我无法通过管道传输echo或其他内容

在OSX¹上,您可以使用:

nm - -

我想使用标准输入将目标文件的魔术字节(例如0xfeedface)写入nm,以便我可以看到它的行为并可以对其进行重新编码。

如果我使用管道,则第二个参数-,表示stdin,将永远不会匹配任何字节,因为所有标准输入都将转到第一个。当使用终端而不是管道时,我可以键入Ctrl + D,以便第一个“关闭”,第二个开始读取。

[我尝试过使用Ctrl + Shift + U和OS X的Unicode十六进制输入,但是它不起作用-我无法用它编写所需的字符。

我也尝试过将剪贴板与pbcopy一起使用,但是它无法读取/粘贴非ASCII或非Unicode字符。

我如何实现我的目标?

不要犹豫,因为这是一个很难表达的问题。

¹linux上的nm无法处理stdin

bash character-encoding hex stdin
3个回答
3
投票

您可以echo您所需的十六进制代码到文件中。

echo -e -n '\xde\xad\xbe\xef\xde\xad\xbe\xef' >/tmp/yo

echo -en \\xde\\xad\\xbe\\xef\\xde\\xad\\xbe\\xef >/tmp/yo

并使您的可执行文件从此文件而不是stdin中读取

./executable </tmp/yo

[如果您不想创建文件,这是替代方法

python -c 'print("\x61\x62\x63\x64")' | /path/to/exe

如果您想将标准输入控件转回

( python -c 'print("\x61\x62\x63\x64")' ; cat ) | /path/to/exe

此答案帮助了我:https://reverseengineering.stackexchange.com/questions/13928/managing-inputs-for-payload-injection


2
投票

尝试使用xxd这样的实用程序:

# echo hex 52 to pipe, convert it to binary, which goes to stdout
echo 52 | xxd -r ; echo
R

或者对于更专业的工具,请尝试ascii2binary(默认输入是十进制):

ascii2binary

或转储一系列十六进制字符,显示# echo dec 52 to pipe, convert it to binary, which goes to stdout echo 52 | ascii2binary ; echo 4 # echo base11 52 to pipe, convert it to binary, which goes to stdout echo 52 | ascii2binary -b 11 ; echo 9 看到的内容:

hexdump

请参阅echo 7 ef 52 ed 19 | ascii2binary -b h | \ hexdump -v -e '/1 "%_ad# "' -e '/1 " _%_u\_\n"' 0# _bel_ 1# _ef_ 2# _R_ 3# _ed_ 4# _em_ 了解这些实用程序可以执行的各种操作。


0
投票

使用bash,您可以回显输入,

man xxd ascii2binary

或使用cat,当有多行提示时,可能会更舒服:

echo -e -n '\x61\x62\x63\x64' | /path/someFile.sh --nox11

您可以省略cat $file | /path/someFile.sh --nox11 ,但是当脚本产生一个新的终端实例时,这可能会有所帮助

注意:这不适用于--nox11

© www.soinside.com 2019 - 2024. All rights reserved.