解码自定义加密文件

时间:2015-12-25 23:45:20

标签: java encryption bit-manipulation

我目前正在处理旧游戏的保存文件。 我的问题是该文件是使用自定义算法加密的。 我对它只有一个模糊的描述:

"通过添加39393939对文件进行加密,然后将每个DWord向右旋转5位。"

我试图在每个4字节块()

上使用这个java代码来反转进度
private static byte[] decryptDWord(byte[] in) {
    //in is 4 bytes

    IntBuffer buf=ByteBuffer.wrap(in).asIntBuffer();
    int dword=buf.get();
    dword=Integer.rotateLeft(dword, 5);
    dword -=0x39393939;
    byte[] out = ByteBuffer.allocate(4).putInt(dword).array();

    return out;
}

但是应用于0x70, 0x4E, 0x33, 0x43它应该给我0x73, 0x63, 0x30, 0x2E0x74, 0x60, 0x33, 0x03应该给0x73, 0x63, 0x34, 0x20

1 个答案:

答案 0 :(得分:1)

尽管word大小与机器有关,但在此上下文中DWORD最有可能是4个字节长,因此在java中它对应于int。 此外,您必须考虑到原始体系结构在术语,位和字节中可能都是LSBMSB,因此请将单独的字节自行打包到' int'可能改变位的顺序:总共4种不同的组合。然后你首先需要向左旋转5位然后减去39393939.在解密之后'您可能需要恢复原始字节/位顺序。