标题:
[原创改版教程] 口袋妖怪钻石珍珠白金心金魂银文本加解密算法探究
[打印本页]
作者:
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://ww.poketb.com/)
Powered by Discuz! 6.1.0F