为什么十六进制编辑不可逆?
Why hex-edit is not reversible?
我有两个相同的 .fit 图片。
Linux@Linux:~/imgs/ImageTesting# sha256sum hexd_ss.fit ss.fit
dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0
hexd_ss.fit
dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0
ss.fit
我改变了一位hexd_ss.fit
Linux@Linux:~/imgs/ImageTesting#vi hexd_ss.fit
来自
0000 0000
到
0000 0001
所以我有两个不同的文件大小和不同的哈希值
> Linux@Linux:~/imgs/ImageTesting# ls -l total 9344
> -rw-r--r-- 1 root root 4781261 Jun 16 15:45 hexd_ss.fit
> -rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit
>
Linux@Linux:~/imgs/ImageTesting# sha256sum hexd_ss.fit ss.fit
f3277110043b4170c111fa7d4291aa7df23de68c9e504259ae6158e5133faf1a
hexd_ss.fit
dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0
ss.fit
但是当我像以前一样再次更改那个位 0 时,它的大小和两个不同的哈希保持不变。
改变后
> 0000 0001 to > 0000 0000
Linux@Linux:~/imgs/ImageTesting# ls -l
-rw-r--r-- 1 root root 4781261 Jun 16 15:47 hexd_ss.fit
-rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit
即使我将两个零字节更改为两个一字节,大小也保持不变。作为,
0000 1111
Linux@Linux:~/imgs/ImageTesting# ls -l
-rw-r--r-- 1 root root 4781261 Jun 16 15:47 hexd_ss.fit
-rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit
所以我的问题是 -
- 为什么无法逆向 HexEdit?
- 如何或有什么其他方法可以将编辑反转到原点?
我用 vi python3.5
打开 python3.5 二进制文件,然后 :%!xxd
、:%!xxd -r
、:wq
...文件大 1 个字节。请注意我什至没有编辑任何东西。你应该使用
vi -b <file>
使用 vi
打开二进制文件...或者当您打开它们时它们会被转换 :P
我的 python3.5 二进制文件附加了一个 0a
- 一个换行符。去掉这个字节后,文件又和原来的一模一样了。
我有两个相同的 .fit 图片。
Linux@Linux:~/imgs/ImageTesting# sha256sum hexd_ss.fit ss.fit
dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0 hexd_ss.fit dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0 ss.fit
我改变了一位hexd_ss.fit
Linux@Linux:~/imgs/ImageTesting#vi hexd_ss.fit
来自
0000 0000
到
0000 0001
所以我有两个不同的文件大小和不同的哈希值
> Linux@Linux:~/imgs/ImageTesting# ls -l total 9344
> -rw-r--r-- 1 root root 4781261 Jun 16 15:45 hexd_ss.fit
> -rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit
>
Linux@Linux:~/imgs/ImageTesting# sha256sum hexd_ss.fit ss.fit
f3277110043b4170c111fa7d4291aa7df23de68c9e504259ae6158e5133faf1a hexd_ss.fit dff6b019b590edb3e9c61c984205c5f49a4064be34feb6207c88dc920aad17e0 ss.fit
但是当我像以前一样再次更改那个位 0 时,它的大小和两个不同的哈希保持不变。
改变后
> 0000 0001 to > 0000 0000
Linux@Linux:~/imgs/ImageTesting# ls -l
-rw-r--r-- 1 root root 4781261 Jun 16 15:47 hexd_ss.fit
-rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit
即使我将两个零字节更改为两个一字节,大小也保持不变。作为,
0000 1111
Linux@Linux:~/imgs/ImageTesting# ls -l
-rw-r--r-- 1 root root 4781261 Jun 16 15:47 hexd_ss.fit
-rw-r--r-- 1 root root 4781260 Jun 16 15:33 ss.fit
所以我的问题是 -
- 为什么无法逆向 HexEdit?
- 如何或有什么其他方法可以将编辑反转到原点?
我用 vi python3.5
打开 python3.5 二进制文件,然后 :%!xxd
、:%!xxd -r
、:wq
...文件大 1 个字节。请注意我什至没有编辑任何东西。你应该使用
vi -b <file>
使用 vi
打开二进制文件...或者当您打开它们时它们会被转换 :P
我的 python3.5 二进制文件附加了一个 0a
- 一个换行符。去掉这个字节后,文件又和原来的一模一样了。