我有一个二进制数据文件,该文件由一个简单的异或密码加密,使用给定的密钥在偏移量+0x88
(这是0x80
长),然后数据(+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
工具,它提供LZO1X算法的压缩/解压缩(通过:apt-get
/brew
install lzop
安装),例如:
lzop -dc data1.bin.xor > data1.out
根据这个注释,也可以使用PowerShell从特定的文件块中获取字节,并使用foreach操作符像这样取字节:
$foo=(($c=gc .encrypted.dat -Encoding byte)[0x80..$C.Length]) | %{$_ -bxor 63}