【Cocos进阶】《部落战争》数据破解教程
本文将为大家详细讲解《部落战争》破解攻略中的数据破解教程。
第一步:获取部落战争资源
下载部落战争的 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 文件概述
sc 文件是 CoC 的动画 UI 数据,其中包含了丰富的图片信息,如 TextField(文本字段)、Image(图像)、Shape(图形)、MoveClip(影片剪辑)、Matrix(矩阵)和 Color(颜色)等。在 csv 表格中,有很多 ExportName SWF 项,它们对应着 sc 文件里的 MovieClip。
TextFiled:由于其对本次破解用处不大,因此未进行详细分析。Image:表示大图中的一张小图。Shape:是由多张小图组成的一个图片集合,后续的MovieClip操作主要基于它。MovieClip:影片剪辑,包含了动画信息。Color:颜色信息,主要用于动画。Matrix:矩阵信息,是仿射矩阵,同样用于动画。
sc 二进制解析
整体结构
文件开头的 12 + 5 是 TextField、Image、Shape、MoveClip、Matrix、Color 这些类型的数量描述,但由于后续可以获取这些数量,所以此处暂不提取。
导出符号信息
unsigned short ExportNum:导出符号的数量。unsigned short ExportIDArray[ExportNum]:导出符号 ID 数组。- 每个导出符号的名称信息:
{ char cNameLength; char Name[cNameLength]; // 需在尾部补上 '\0' } ExportNum 个
元素信息
元素信息部分有多个元素,直到元素类型为 0 时停止解析。每个元素的结构如下:
{
char cTag; // 元素类型
unsigned int nDataLength; // 该数据的长度
{
该元素的数据结构(参见后面元素详解)
}
}
元素类型详细说明
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_ColorTransform 颜色
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 个
根据以上详细资料,就可以编写对应的解析代码了。
下载地址
注意事项
部落战争资源破解仅供学习使用。点击导出可以导出当前选择的动画(Json 文件)。