[英]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.