繁体   English   中英

使用hexdump sed和xxd替换文件中的二进制文件(来自java keytool csr)?

[英]Replace binary in a file (from java keytool csr) using hexdump sed and xxd?

我试图通过使用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 )执行字节替换?

来自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>相同的长度。

请参阅此示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM