如何使用特定偏移量处的给定密钥通过 XOR 运算符解密二进制文件中的数据?

How to decrypt data in binary file by XOR operator using a given key at specific offset?

我有一个二进制数据文件,它使用偏移量 +0x880x80 长)处的给定密钥通过简单的 XOR cipher 加密,然后是数据(+0x108) 由 lzo1x.

压缩

解密此类文件的最有效方法是什么?

最好使用一些命令行实用程序(我可以在其中指定输入偏移量)或一些脚本(无需太多编码)?

使用dd提取您需要的数据,例如(使用 bash 语法):

dd if=foo.dat bs=1 skip=$((0x88)) count=$((0x80)) of=xorkey.bin
dd if=foo.dat bs=1 skip=$((0x108)) of=data1.bin

然后使用简单的Python代码转换它:

#!/usr/bin/env python3

def str_xor(data, key):
    for i in range(len(data)):
        data[i] ^= key[i % len(key)]
    return data

key  = bytearray(open('xorkey.bin', 'rb').read())
data = bytearray(open('data1.bin',  'rb').read())
encoded = str_xor(data, key)
open("data1.bin.xor", "wb").write(encoded)
decoded = str_xor(data, key)
open("data1.bin.xor.xor", "wb").write(decoded)

然后安装 lzop 工具,该工具提供 compression/decompression LZO1X 算法(安装方式:apt-get/brew install lzop),例如:

lzop -dc data1.bin.xor > data1.out

根据 this 评论,也可以使用 PowerShell 从特定文件块中获取字节并使用 foreach 运算符对字节进行异或运算,如下所示:

$foo=(($c=gc .\encrypted.dat -Encoding byte)[0x80..$C.Length]) | %{$_ -bxor 63}