分享到新浪微博 分享到QQ空间 打印

[原创改版教程] 口袋妖怪钻石珍珠白金心金魂银文本加解密算法探究

口袋妖怪钻石珍珠白金心金魂银文本加解密算法探究

废话少说,本文介绍ds上的口袋妖怪正统作品,钻石/珍珠/白金/心金/魂银的文本加解密算法,由于这5部作品的文本加解密算法一致,故以钻石珍珠为例子。
钻石珍珠的rom中有名为NARC的文件包,用ct或者ndstool等工具拆包钻石珍珠的rom,可以找到一个名为msg.narc的文件,钻石珍珠的文本就在里面。
接着用ct2打开这个文件包,里面的子文件便是本文讨论的对象,

为方便读者,在这里放上其中一个子文件,以及被解密后的文件,以供对比参考,好吧,我承认,当我打出这句话的时候,我觉得我之前的都白写了。

先大致说一下加密算法的特点
可以写成这样子的形式:明文 XOR KEY = 密文,
明文嘛就是待加密的数据,XOR是运算符,就是异或,这个具体谷歌,在这里我强烈推荐谷歌,谷歌万岁,还有windows自带的计算器也可以进行异或运算,KEY啊,数值,可以理解为密码,密文,加密后的数据。
那么不是很简单了么,告诉一下KEY的值就可以解密了嘛,不过要是那么简单的话就好了,KEY这个值会发生变化,囧,本文的重点就是介绍这个KEY的生成算法。

准备工作,打开windows自带的计算器,你要用MAC或者其他的操作系统,哥不知道要怎么办,over,然后用UE或者CT2等十六进制编辑器打开前文提供的2个文件,另外指针、高低置换啥的基础知识,自不必多说,最后说一点,异或算法不了解的话,一定要谷歌哦~~~啊,对了,声明一下,本文用的数字,没有特别说明的话都是16进制。

好了,啰嗦了这么多,大家一定迫不及待了吧,好了,那么下面就开始了。

不过还是继续啰嗦一下,先定义几个概念...
这2个文件虽然小,但是五脏俱全,包括了指针跟文本,其中指针堆放在一处,称为“指针区”,文本也堆放在一处,称为“文本区”,指针区前置于文本区;
指针ID,这个概念有点陌生,容我慢慢道来,既然存在一个专门存放指针的指针区,那么其中的每个指针,都给它一个“编号”即ID,分配的方式就是按指针的排列顺序,逐个加1,第一个为0;
编码ID,这个概念更囧了,所谓的编码就是字符存储的形式,而口袋正统,都是双字节存储,比如“あ”用30 01,那么编码ID跟上面一样,也是给每个编码以顺位的方式提供一个ID,第一个也为0;

好了,准备工作差不多了,正式开始了。

指针区跟文本区的加解密算法,并不一致,不过形式跟前面提到的都是一样的,接着下面分开来解释。


如图1所示
指针区,指针区的格式是:
指针,对应的文本长度,
指针,对应的文本长度,
指针,对应的文本长度...(每一项均为4字节,每个指针跟对应的文本长度合为一组,同用一个KEY)


如2图所示,将指针区解密参数记为α吧,
那么KEY的生成就是
KEY = {[2FDh*α*(指针ID+1h)] And FFFFh}*10001h (And是逻辑与操作运算,windows的计算器可以计算)
有点复杂啊,是这样子的,嗯,那么举几个实际例子,就不会那么神秘了。


如图3所示,指针ID为0
对应的KEY就等于[(2FDh*58E6h*1) And FFFFh]*10001h = (109A74Eh And FFFFh)*10001h = A74EA74Eh
进行解密的话,就是
A74EA74Eh Xor A74E8CAAh = 00002BE4h
A74EA74Eh Xor A74EA74Ah = 00000004h

指针区就是这样子了,这部分反复看,我想理解起来应该没有问题。

接下来是文本区的解密了,上文解密出来的00002BE4h,就是指针了,如图4所示,跳转到这个地址。
闲话不多说了,就继续说废话。
KEY1 = [91BD3h*(当前文本的指针ID+1)] And FFFFh (没办法,这个有点长,用一个KEY1变量做中介吧)
KEY = (KEY1+493Dh*编码ID) And FFFFh

还是很复杂,依旧举一个例子,以上图中方框内1B 32为例子说明吧,它的指针ID是0,编码ID也是0

那么,KEY1 = 91BD3 And FFFFh = 1BD3h
KEY = 1BD3h And FFFFh = 1BD3h
解密
1BD3h Xor 1B32h = 00E1h
差不多就是这样了,如有疑问,跟帖提出

[ 本帖最后由 enler 于 2010-9-28 17:58 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

我……我还是先回复一个然后有时间仔细理解吧……
竟然会有这么高深的东西啊……
恩……不知能不能用在woo咚加密上呢……

TOP

好牛比......看标题就知道不简单
---------------------------------
水の城....绿宝石........2.0

TOP

其实我完全都看不懂 但是很感谢
简约唯美

TOP

毁了、、、看来以后改ROM就更加麻烦了

TOP

是DS么。。支持一下。。
不过MS比GBA的难吧。。
只会改版皮毛的人。。。。我啊。。
I will show you a sweet dream next night!     

TOP

这个看着怎么很像是CT2来着,CT2有这功能么,先看看吧

TOP

好难啊- -
DS研究果然难

腰酸背痛腿抽筋,,,,

TOP

DS的ROM很难解析,一般都是金手指直切比较容易,不过改得好的话,会很完美吧
他么是谁啊,呵呵

TOP

先支持下,再回复下,剩下的以后我再慢慢看!!

TOP

很难看得懂,不过顶一下

TOP

好高深……仔细看都看不懂(看花了)

TOP

等待工具。
(工具万岁!)

TOP

还是终于慢慢看完了,对了- -我这算是考古吗
大致是弄明白了,总之这算法很繁琐,但是有了计算器就表示没压力了
我想问,Lz是怎么知道这个算法的- -
现在正在研究DS的ROM,感觉似乎更好玩了
简约唯美

TOP

回楼上,ASM跟踪破解,具体的话,先看叫花子写的asm教程吧

TOP

有点不会用诶

TOP

这种东西——改版小组的人实在是。。智商发达。。
谪居正是君恩厚,养拙刚于戍卒宜。

TOP

真的看不懂,好牛B的说。。。

TOP

LZ提供一个CT2下载吧,以前网上找的都是毁坏的1
开学了呢,大家都要加油呐

TOP