下面为大家讲解《部落战争》破解攻略之数据破解教程。
第一步:下载部落战争的apk包,右键解压得到我们要的资源。
第二步:解密资源 csv logic sc 三个目录的文件是 使用修改过的 LZMA 算法压缩的。
下载 LZMA 库,把Decode函数中的unsigned char header[LZMA_PROPS_SIZE + 8]; 改成 unsigned char header[LZMA_PROPS_SIZE + 4];,这样就可以解压了。
CFileSeqInStream inStream;
CFileOutStream outStream;
FileSeqInStream_CreateVTable(&inStream);
File_Construct(&inStream.file);
FileOutStream_CreateVTable(&outStream);
File_Construct(&outStream.file);
InFile_Open(&inStream.file, strFileName.c_str());
OutFile_Open(&outStream.file, strOutName.c_str());
Decode(&outStream.s, &inStream.s);
File_Close(&outStream.file);
File_Close(&inStream.file);
第三步:解密sc文件
首先sc文件是CoC的动画UI数据。其中包含了整张的图片信息:TextField,Image,Shape,MoveClip, Matrix,Color
csv表格里面有很多的ExportName SWF指的就是对应SWF(sc文件)里面的MovieClip。
TextFiled这个没去详细分析了,对我没啥用处。
Image 表示的是大图里面的一张小图。
Shape 表示的是多张小图组成的一个图片集合(后续MovieClip都是操作它)
MovieClip 是影片剪辑,包含了动画信息
Color 是颜色信息(动画用)
Matrix 是矩阵信息,仿射矩阵(动画用)
sc 二进制解析
12 + 5:这些是 TextField,Image,Shape,MoveClip, Matrix, Color 这些类型的数量描述,但是后面我也可以得到这些数量所以这边就不取了。
首先是导出符号信息:
unsigned short ExportNum unsigned short 导出符号的数量
unsigned short ExportIDArray[ExportNum] 导出符号ID数组
{
char cNameLength;
char Name[cNameLength]; // 自己要尾部补上 \0
}ExportNum 个
其次元素信息:
{
char cTag; // 元素类型
unsigned int nDataLength; // 该数据的长度
{
该元素的数据结构(参见后面元素详解)
}
}有很多个直到 类型为0,停止解析
类型详细说明
enum CoCSWFTagType
{
CCTT_NONE,
CCTT_Texture = 1,
CCTT_Shape = 18,
CCTT_TextField = 7,
CCTT_TextField2 = 15,
CCTT_Matrix= 8,
CCTT_ColorTransform = 9,
CCTT_MovieClip= 12,
};
CCTT_Texture 纹理:
#define TextureFormat_ARGB8888 0
#define TextureFormat_ARGB4444 2
#define TextureFormat_BGR565 4
char m_cTextureFormat; //图片格式 0 2 4
unsigned short m_nWidth; // 宽度
unsigned short m_nHeight; // 高度
void *data 纹理的数据,根据格式计算出大小
CCTT_Matrix 仿射矩阵:
struct MATRIX {
int a, b, c, d;
int tx, ty;
};
m_trans.a = trans.a / 1024.0f;
m_trans.b = trans.b / 1024.0f;
m_trans.c = trans.c / 1024.0f;
m_trans.d = trans.d / 1024.0f;
m_trans.tx = trans.tx / 20.0f;
m_trans.ty = trans.ty / -20.0f;
CCTT_Matrix 颜色:
struct ColorTransform {
char rm, gm, bm, am;
char ra, ga, ba;
};
CCTT_Shape:图片:
unsigned short m_nID; 图元ID
unsigned short m_nCommandCount; 图片数量
unsigned short nVertxtCount; 顶点总数量
{
char cType; // 暂时用不上 固定17可能是渲染方式
int nLength; // 数据长度,暂时用不上,后面自己可以算出长度了
char textureID; 图片的ID
char cPointCount; 顶点数量
{
int x;int y;顶点坐标
} cPointCount个顶点;
{
short u;short v;顶点坐标
} cPointCount个纹理坐标;
}m_nCommandCount个图片的数据
前面是基本的图片所有数据信息了
CCTT_MovieClip 影片剪辑:
unsigned short m_nID; 影片剪辑ID号
char m_cFrameRate; 帧率
unsigned short m_nFrameCount; 帧数量
unsigned nFrameInfoCount 动画帧信息数量
过掉两个字节,目前发现没用
{
unsigned short nIndex; 图片索引号
unsigned short nIndex; 矩阵索引号
unsigned short nIndex; 颜色索引号
}nFrameInfoCount 个关键帧信息
unsigned short nCount; 图片数量
unsigned short nSHapeID[nCount];
忽略掉nCount个字节
这边是文本相关的用不到,但是我们要跳过这些字节
{
文字长度 char
文字
}nCount个
最后是动画数据
{ 忽略1个字节;
int 长度
unsigned short 帧数量
跳过长度 – 2 的字节
}m_nFrameCount个
根据以上资料就可以写出 对应的东西了
下载地址:http://pan.baidu.com/s/1jGuxW70
部落战争资源破解仅供学习使用,点击导出可以导出当前选择的动画(Json文件)