【Cocos进阶】《部落战争》数据破解教程

2015年03月22日 10:09 0 点赞 0 评论 更新于 2025-11-21 17:50

本文将为大家详细讲解《部落战争》破解攻略中的数据破解教程。

第一步:获取部落战争资源

下载部落战争的 APK 包,然后通过右键解压操作,即可得到我们所需的资源。

第二步:解密资源

在解压得到的资源中,csvlogicsc 三个目录下的文件是使用修改过的 LZMA 算法压缩的。为了解压这些文件,我们需要进行如下操作:

  1. 下载 LZMA 库。
  2. 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 + 5TextFieldImageShapeMoveClipMatrixColor 这些类型的数量描述,但由于后续可以获取这些数量,所以此处暂不提取。

导出符号信息

  • 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 文件)。

作者信息

menghao

menghao

共发布了 3994 篇文章