//Mu地图解密函数 EncTerrainX.att->TerrainX.att int DecodeATT(unsigned char *OutData,const unsigned char *InData, int Len, int Type) { //Type为1是韩版新格式。返回长度都是65536 unsigned char XorData[]={0xD1,0x73,0x52,0xF6,0xD2,0x9A,0xCB,0x27,0x3E,0xAF,0x59,0x31,0x37,0xB3,0xE7,0xA2}; unsigned char cl=0x5E; unsigned char tmp1[65540],tmp2[131076],tmpData1[65540],tmpData2[131076]; int i,j; if (Type!=1) { if (Len!=65540) return -1; for(i=0;i<Len;i++) { j=i; tmp1[i]=(InData[i]^XorData[j])-cl; cl=InData[i]+0x3D; } XorFCCFAB(tmpData1,tmp1,Len); memcpy(OutData,&tmpData1[4],65536); return 0; } else { if (Len!=131076) return -1; for(i=0;i<Len;i++) { j=i; tmp2[i]=(InData[i]^XorData[j])-cl; cl=InData[i]+0x3D; } XorFCCFAB(tmpData2,tmp2,Len); for(i=0;i<65536;i++) { OutData[i]=tmpData2[(i*2)+4]; } return 0; }
|
|