[英]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
我怀疑我错过了一些转换,但我不知道在哪里。
如何使用可用工具(如sed
, xxd
和/或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.