2020-7-14 17:17 /
名字我就不说了,封包名bkarc,看了下,基本上都是乱码。
好不管了,开干。
先说结论:
第二个与其说是文件header,不如说是index的header,因为他所在的位置是xorkey3解密后的pos + 0x10。
这个引擎文件头部分的数据几乎是加密完了的,包括其性质本身也是加密key,所以我干脆全部标成xorkey。即数据本身就是加密。
解密算法很简单:大概就是
这样,xxx内容就是当前解密数据,所以才说数据本身就是加密。
index部分已经加密压缩过了,简直变态(无语)。
压缩算法还没有逆的出来,看起来比较麻烦,不过解密算法很简单,把IDA里面的数据照搬出来即可。
entry稍微看了下,是一个类似树状结构的entry,感觉好麻烦2333.
后续再继续分析。
好不管了,开干。
先说结论:
typedef struct {
char Magic[8];//BKARC\x04
unsigned int xorkey1;
unsigned int xorkey2;
unsigned int xorkey3;//实际上是index的偏移量
unsigned int zero1;//0
}bkarc_header_t;
typedef struct
{
unsigned int xorkey4;//index_compr_len
unsigned int xorkey5;//index_uncompr_len
unsigned int xorkey6;//key
unsigned int zero2;//0
}bkarc_header2_t;
第二个与其说是文件header,不如说是index的header,因为他所在的位置是xorkey3解密后的pos + 0x10。
这个引擎文件头部分的数据几乎是加密完了的,包括其性质本身也是加密key,所以我干脆全部标成xorkey。即数据本身就是加密。
解密算法很简单:大概就是
xxx = header.xorkey1 ^ ((header.xorkey2 ^ ((xxx ^ header.xorkey1 & 0xFFFF00) - 0x6C078965)) - 0x5E89F12A);
这样,xxx内容就是当前解密数据,所以才说数据本身就是加密。
index部分已经加密压缩过了,简直变态(无语)。
压缩算法还没有逆的出来,看起来比较麻烦,不过解密算法很简单,把IDA里面的数据照搬出来即可。
entry稍微看了下,是一个类似树状结构的entry,感觉好麻烦2333.
后续再继续分析。