00004 死亡阴影.0001:配置文件的Unity包与修改

来源:互联网 发布:莫比乌斯环戒指知乎 编辑:程序博客网 时间:2024/05/19 16:38

00004 死亡阴影.0001:配置文件的Unity包与修改

         一想起昨晚的事我就郁闷,哎,我的这颗玻璃心喔。

         我的原话大概是这样的:“你好,我最近研究了一下你们的游戏,发现很容易就被修改掉了。你们需要破解与防破解方面的咨询吗?由于还有其他一些游戏在防破解方面也犯了相同的错误,因此我将会把详细的修改过程发表在博客上,以给他们以及后来的开发者们抛个砖。为防止给你们造成重大的损失,请尽快修正、更新”。然后就再也没有然后了,客服二话不讲就将我踢出了QQ群。

         我不知道是不是我的说法给客服造成了什么误解。为了不造成坏影响,我没有在QQ群里发,还特意开小窗,给客服发的单独私聊。客服将我当骗子了?也许是游戏公司对自己的防破解手段很有信心,对我不屑一顾?我本来还想,我是否能够专门寻找游戏漏洞和防破解方面的不足,将它们提交给游戏的运营方或者开发者,并以此作为谋生的手段。没想到,死亡阴影的客服直接给了我当头一棒。我想到的最差的情况是对方不需要这类服务,他们自己就能搞定。但没想到的是,真实的结果却是二话不讲就将我踢了、二话不讲就将我踢了、二话不讲就将我踢了……

         抛开个人对客服的怨念不谈,下面简单说说死亡阴影在防破解上的好坏。

         首先,得明确一下这个游戏。对于大多数游戏而言,《XXX》就是《XXX》,不会让人存有误解。但也有一些游戏,他们名称雷同,但开发者不同、上架人不同,但其实确是同一个游戏。《死亡阴影》和《XX群侠传》就属此类。

         《英雄无敌三死亡阴影单机策略手游》、《死亡阴影-经典的单机策略战棋手游》、《英雄无敌3死亡阴影-经典的死亡冒险SLG……》、《末日之影-英雄收集探索单机游戏》、《魔法门之死亡之刃-再现经典的单机策略RPG游戏》……还有很多就不再一一列举了,重要的是,它们是同一个游戏、它们是同一个游戏、它们是同一个游戏!真不知道游戏公司是怎么想的,这是他们的运营策略吗?还是确实无力打击这些再打包者?

         我所研究的,是《魔法门之死亡之刃》,但经过验证,它的问题在其他游戏中也同样存在。

         《死亡阴影》有一点比较好,它没有Android版,并且,在iOS上,还将UnityC#代码内联到了app中,而非单独的dll文件(我对Unity研究不多,不知道这是默认的还是需要其他什么额外手段的)。

         由于iOS对代码有天然的加密(即使是越狱版,用ida反编译出来的函数名称,大多数情况都是sub_XXX,明显是被混淆过了的;OC代码有时正常,但很多时候这没啥鸟用),这给代码的静态研究带来了一定的困难。所以,想破解游戏的存档格式也不大容易。这对于从事存档买卖的灰色从业者来说,性价比就低了。也就懒得有人去捣鼓了。

         但是,光防住存档修改是然并卵的,其配置随随便便就能破了。

         老样子,打开iTunes登录自己的App Id下载游戏。我这下好的叫“魔法门之死亡之刃-1.0.ipa”。用WinRAR打开,浏览一下各个目录和文件,其中的“\Heroes.app\Data\Raw\config \allcsvinfo.unity3d”……解压,打开看看。

         那么,用什么打开?文本直接打开,乱码。——找工具吧。找到了两个:disunityUnityAssetsExplorer

         UnityAssetsExplorer打开allcsvinfo.unity3d,发现解析出错。于是用disunity解开:

disunity bundle unpack xxx\allcsvinfo.unity3d

         结果解出来一个CAB-5f4a061eca3bb4f66bc39b62ac71e648。这是一个神奇的文件。在Mac上用ultra edit打开,会自动检测为文本,并正常显示出中文。在Windows上用ultra edit打开,就自动检测为二进制文件,也不能显示中文。用UnityAssetsExplorer打开试试,还是无法正常解析。这没关系。就用二进制打开,然后将最前面的三个字节改为UTF-8 BOM头:EF BB BF,再用文本打开,就正常了:

G                      4.7.1f1

1                [1]          `       [1]   `   �� 1   1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 [1]      [1]       [1]      

   allcsvinfo            [1]              [1]          1   &5  

   allcsvinfo �� 9         Achievement.csvP!  序号,名称,名称es,描述,描述es,奖励点数,关联计数ID,数值,图标,关联成就完成计数ID,奖励物品信息

ID,Name,NameES,Desc,DescES,RewardPoint,TaskID,Value,Icon,FinishTaskID,RewardItemInfo

int,string,string,string,string,int,int,int,string,int,string

1,恶魔稀客,Shadowmoon Valley 1,恶魔营地成功试炼5次。,Challenge 5 times in Shadowmoon Valley,1,501,5,Achieve_1,700,1*200|2*5

2,恶魔常客,Shadowmoon Valley 2,恶魔营地成功试炼20次。,Challenge 20 times in Shadowmoon Valley,1,501,20,Achieve_2,701,1*500|2*10

3,恶魔霸主,Shadowmoon Valley 3,恶魔营地成功试炼50次。,Challenge 50 times in Shadowmoon Valley,2,501,50,Achieve_3,702,1*1000|2*15

4,龙崖稀客,Death Mine 1,龙崖城堡成功试炼5次。,Challenge 5 times in Death Mine,1,502,5,Achieve_4,703,1*200|2*5

5,龙崖常客,Death Mine 2,龙崖城堡成功试炼20次。,Challenge 20 times in Death Mine,1,502,20,Achieve_5,704,1*500|2*10

6,龙崖霸主,Death Mine 3,龙崖城堡成功试炼50次。,Challenge 50 times in Death Mine,2,502,50,Achieve_6,705,1*1000|2*15

7,方舟稀客,Black Pearl 1,诺亚方舟成功试炼5次。,Challenge 5 times in Black Pearl,2,503,5,Achieve_7,706,1*200|2*5

8,方舟常客,Black Pearl 2,诺亚方舟成功试炼20次。,Challenge 20 times in Black Pearl,2,503,20,Achieve_8,707,1*500|2*10

9,方舟霸主,Black Pearl 3,诺亚方舟成功试炼50次。,Challenge 50 times in Black Pearl,3,503,50,Achieve_9,708,1*1000|2*15

……

         最前头有一些“乱码”,这是Unity的一些打包信息,具体是啥没研究,但其中的4.7.1f1表示的是使用的Unity版本。

         上面的红字“Achievement.csv”表示一个文件的开始。这是一个csv文件,我们可以将内容整理整理,单独拷贝出来,在用Excel打开:

         下面改就是了。那些奖励信息,应当不难懂吧。即使不懂,也可以对照游戏中的成就做个匹配,也就明白了。具体的我就不说了。

         Excel修改是容易的。但如何弄回到游戏中去呢?我们可以重新打包。但这个有点麻烦。这儿可以用一个简单点的方法:直接将修改后的内容覆盖到原包中。但这有一个问题,修改后的文件的长度很可能大于原来的长度。在这个具体的地方,我们可以去除或者减少一些没用的字符串。比如上图中的“描述es”字段。将这个字段的内容全部删除后,新内容就比原内容少很多了,对于不足的部分,我们可以用\n填充。

         这样弄了之后,我们得到了新的CAB-5f4a061eca3bb4f66bc39b62ac71e648文件,还要继续将它打包成allcsvinfo.unity3d。这个有点麻烦了,需要使用包属性文件才能打包。经过查找,包属性文件格式形如:

{

"compressed":true,

"signature":"UnityWeb",

"streamVersion":3,

"unityVersion":"3.x.x",

"unityRevision":"4.7.1f1",

"files":["CAB-5f4a061eca3bb4f66bc39b62ac71e648"]

}

         编辑好json文件,保存为allcsvinfo.json。在同目录下建立文件夹allcsvinfo,将CAB-5f4a061eca3bb4f66bc39b62ac71e648剪切过去,执行:

         disunity bundle pack ./allcsvinfo.json

         会生成新的allcsvinfo.unity3d

         下面安装修改后的游戏:

         如果是Windows,用WinRAR打开“魔法门之死亡之刃-1.0.ipa”文件,转到“\Heroes.app\Data\Raw\config\”将allcsvinfo.unity3d替换进去,关闭WinRAR。如果是然后在“魔法门之死亡之刃-1.0.ipa”上右键,选择使用PP助手5安装。

         如果是Mac,将“魔法门之死亡之刃-1.0.ipa”文件解压,转到“\Heroes.app\Data\Raw\config\”将allcsvinfo.unity3d替换进去。然后打卡xcode,在上面的菜单中选择“设备”,在弹出的窗口中,在左侧选择对应的手机,在右侧点击“+”按钮,选择“Heroes.app”(刚刚的解压目录),确认替换,ok,大功告成。

         来,欣赏一下修改的成果,以各种姿势:

         免费商城:

         1资源建造:

         随便解锁专属英雄:

         10倍属性兵种:

         1资源招兵:

         爬塔:——我也真是够无聊的,居然爬到了411层。

 

特别说明:虽然客服让我很恼火,但为降低游戏公司的损失,我是不会共享这个游戏补丁的。

0 0
原创粉丝点击