【问题标题】:Replace binary in a file (from java keytool csr) using hexdump sed and xxd?使用 hexdump sed 和 xxd 替换文件中的二进制文件(来自 java keytool csr)?
【发布时间】:2013-12-03 13:33:20
【问题描述】:

我正在尝试关注 this reply 并使用 hexdump、xxd 和 sed 更改文件中的一些十六进制字节。

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

这是我尝试过的:

#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

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

如何使用可用工具(如sedxxd 和/或hexdump)执行字节替换?

【问题讨论】:

  • 我想我刚刚意识到在全球范围内替换证书中的十六进制字节是多么疯狂。它将影响整个证书,并且输出文件将始终是无效证书。正如上面链接的回复中所解释的,我认为只有在检索字节偏移量并执行直接替换仅在那些字节偏移量时才能进行转换
  • 您收到的错误是因为您发送的是 DER 格式的 CSR。要么转换回 PEM,要么添加参数 -inform DER。话虽如此,我同意您的评论,即全局替换证书中的字节值可能不是一个好主意。事实上,我不确定它是否会起作用。 CSR 已签名,如果您更改签名内容,CSR 签名将无法验证。
  • 谢谢 gtrig。我只使用-policy policy_anything 比破解位以符合 CSR 不需要符合的东西要好得多。太糟糕了,Oracle 没有更新 keytool 以导出字段 UTF8STRING,因为 PRINTABLESTRINGS 是老派且已贬值。
  • 你不妨考虑this answer和提问。

标签: java openssl ssl-certificate certificate-authority


【解决方案1】:

来自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 表示形式,并带有它们的空终止符。此外,必须填充到与&lt;pattern&gt; 相同的长度。

参考这个example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多