Board logo

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

作者: enler    时间: 2010-6-26 20:59     标题: 口袋妖怪钻石珍珠白金心金魂银文本加解密算法探究

废话少说,本文介绍ds上的口袋妖怪正统作品,钻石/珍珠/白金/心金/魂银的文本加解密算法,由于这5部作品的文本加解密算法一致,故以钻石珍珠为例子。
钻石珍珠的rom中有名为NARC的文件包,用ct或者ndstool等工具拆包钻石珍珠的rom,可以找到一个名为msg.narc的文件,钻石珍珠的文本就在里面。
接着用ct2打开这个文件包,里面的子文件便是本文讨论的对象,
[attach]28096[/attach]
为方便读者,在这里放上其中一个子文件,以及被解密后的文件,以供对比参考,好吧,我承认,当我打出这句话的时候,我觉得我之前的都白写了。

先大致说一下加密算法的特点
可以写成这样子的形式:明文 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;

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

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

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

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

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

指针区就是这样子了,这部分反复看,我想理解起来应该没有问题。
[attach]28100[/attach]
接下来是文本区的解密了,上文解密出来的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 编辑 ]
作者: roywillow    时间: 2010-6-26 23:20

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

好牛比......看标题就知道不简单
作者: pokemon002    时间: 2010-6-27 00:27

其实我完全都看不懂 但是很感谢
作者: starxxxxx    时间: 2010-7-15 17:51

毁了、、、看来以后改ROM就更加麻烦了
作者: al199288    时间: 2010-7-15 20:15

是DS么。。支持一下。。
不过MS比GBA的难吧。。
只会改版皮毛的人。。。。我啊。。
作者: 豆子    时间: 2010-7-17 16:12

这个看着怎么很像是CT2来着,CT2有这功能么,先看看吧
作者: fig    时间: 2010-7-17 22:36

好难啊- -
DS研究果然难
作者: 豆子    时间: 2010-7-18 11:29

DS的ROM很难解析,一般都是金手指直切比较容易,不过改得好的话,会很完美吧
作者: zhengyuete    时间: 2010-7-18 16:28

先支持下,再回复下,剩下的以后我再慢慢看!!
作者: 383101767    时间: 2010-7-19 14:00

很难看得懂,不过顶一下
作者: POKEMON~~~    时间: 2010-7-22 13:36

好高深……仔细看都看不懂(看花了)
作者: 菜“秒”    时间: 2010-7-23 19:59

等待工具。
(工具万岁!)
作者: pokemon002    时间: 2010-8-14 05:19

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

回楼上,ASM跟踪破解,具体的话,先看叫花子写的asm教程吧
作者: kuzhupi    时间: 2010-8-19 18:57

有点不会用诶
作者: sunny123    时间: 2010-8-19 20:10

这种东西——改版小组的人实在是。。智商发达。。
作者: 小智、    时间: 2010-8-20 10:32

真的看不懂,好牛B的说。。。
作者: 小R    时间: 2010-8-29 11:56

LZ提供一个CT2下载吧,以前网上找的都是毁坏的1
作者: 19991112    时间: 2010-9-24 12:55

仔细看都看不懂 .
作者: 19991112    时间: 2010-9-24 13:01

我还是先回复一个然后有时间仔细理解吧……
作者: enler    时间: 2010-9-28 17:55

bw的算法跟旧版本不一样,改天有时间也整理出来
作者: pmfg    时间: 2010-11-8 19:14

话说还是细点讲“指针”这个东东把,学B的似乎比学C的多,而且异或也叫我们谷歌,copy一下
作者: badchina    时间: 2010-11-12 22:22

好难啊- -
DS研究果然难




欢迎光临 口袋社区-Poke The BBS (https://www.poketb.com/bbs/) Powered by Discuz! 6.1.0F