再 XOR 32H (这两个数值是随意选择的)

时间:2021-12-21 04:34:32

标签:数据恢复   add后xor   

AddXOR的恢复

 

近来经常有网友QQ问我,用winhex改削数据,先Add运算,再XOR运算,这样改削后(加密)的数据如何恢复(还原)?

 

这个仿佛是中职(或高职)学生在参与全国数据恢复角逐时的标题问题。我试着做了一下,下面是过程:

 

首先创建了一个名为“尝试doc文档”,如下图:

 

 

再 XOR 32H (这两个数值是随意选择的)

                                             

 

winhex打开这个文件,选定所有字节,作如下运算:

 

    Add 23H ,再XOR 32H(这两个数值是随意选择的)。如下图:

 

再 XOR 32H (这两个数值是随意选择的)

 

这样运算之后的数据如下图:

 

再 XOR 32H (这两个数值是随意选择的)

 

数据已经被加密了。

 

下面开始恢复数据:

 

思路:首先把复合文档的文件头0x D0CF11E0A1B11AE1作为关键字,而加密后关键字偏移位置的值为0x C1C00631F6E60F36

 

已知关键字确当前值是由关键字先Add某个数值再XOR某个数值得到的,,理论上反向操纵(先XORAdd)的话,由于按字节运算了两次(AddXOR),而一个字节最大可以暗示256个数值(00 HFF H),那么使用穷举法,最多需要计算256的平方 =  65536 次就可以了。

 

如果通过反向运算后,得到了文件头0x D0CF11E0A1B11AE1,那么就可以得到这两个运算(AddXOR)的数值。

 

可能有人会问,Add运算的功效,要用减法来还原才行啊。其实减去一个数就即是加一个负数,这样就好理解了。呵呵。

 

很明显,这个数量级的计算用手工就太慢了,所以需要编写winhex脚本或小措施来完成计算。如下图:

 

再 XOR 32H (这两个数值是随意选择的)

 

用措施计算效率就高多了,很快功效就出来了。从图中可以看到,通过反向计算,一共找到了两组数值:1.  32 H DD H 2.  B2 H 5D H

 

通过验证,这两组数值都可以恢回复复兴数据。那么为什么有两组呢?大家可以思考思考,在这儿就不详细讲了。

 

再 XOR 32H (这两个数值是随意选择的)