簡體   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