3

我正在尝试遵循此回复并使用 hexdump、xxd 和 sed 更改文件中的一些十六进制字节。

根据该响应,在将使用 keytool(恰好是 base-64 PEM 格式)生成的 CSR 转换为 DER 后,我应该能够进行直接字节替换,替换0x130x0c.

这是我尝试过的:

#convert csr pem to der
openssl req -in openfire.csr -outform der -out openfire_csr.der
cat openfire_csr.der | grep -aP '\x13' | md5sum
#e61387f5c1xxxxeb832df102524220d81  - #it has some length
#perform replacement of hex bytes:
sed 's/\x13/\x0c/g' openfire_csr.der
#convert csr der to csr pem:
openssl req -in openfire_csr.der -outform pem -out openfire_utf8.csr
#unable to load X509 request
#3078055660:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:698:Expecting: CERTIFICATE REQUEST

我怀疑我错过了一些转换,但我不知道在哪里。

如何使用可用工具(如 、 和/或 )执行sed字节xxd替换hexdump

4

1 回答 1

2

来自http://everydaywithlinux.blogspot.ca/2012/11/patch-strings-in-binary-files-with-sed.html

因此,您有一个需要修补的二进制文件。也许它是一个预编译的专有程序或动态库,其中包含您需要更改的硬编码路径(文本字符串)。

如果该文件是文本文件,那么 sed 可能会来救你。对于二进制文件,有可用的十六进制编辑器,但它们需要手动处理并且不能编写脚本。其他二进制补丁程序也在那里,但可能没有打包在您最喜欢的发行版中,并且从源代码编译东西很无聊。在构建 RPM 时,您可能还需要在打包阶段进行修补。

那么,你怎么能使用 sed 呢?

嗯,这很简单。只需使用 hexdump 将二进制文件转换为 ASCII HEX,使用 sed 对其进行修补,然后使用 xxd 将其转换回二进制文件:

hexdump -ve '1/1 "%.2X"' file.bin | \
sed "s/<pattern>/<replacement>/g" | \
xxd -r -p > file.bin.patched

当然,这种方法有一些警告。最重要的是,您不能用比原始字符串更长的字符串替换字符串。不过短一点也可以。另一个是字符串必须以空值结尾,但这几乎总是如此。您还必须创建和自己作为空终止字符串的 ASCII HEX 表示形式,并带有它们的空终止符。此外,必须填充到与 相同的长度<pattern>

参考这个例子

于 2013-11-19T20:21:22.207 回答