/AC-II-Discovery-Hans

Nintendo Nds Assassin's Creed II: Discovery Rom Asm Hack 刺客信条II:探索汉化破解笔记

Primary LanguagePythonMIT LicenseMIT

Nds刺客信条2探索汉化初探

Table of Contents

  1. 解包
  2. 文本定位
  3. 文本解密
    1. huffman 压缩
  4. 取字定位

解包

tinke+glob.bin插件

文本定位

通过文件名判断,锁定Strings_xx.strings。

替换Strings_us.strings为Strings_FC.strings并启动游戏测试,可以看到语言变更为法语,因此确定文本位于Strings_xx.strings.

文本解密

文本通过差值搜索无法找到,猜想文本经过加密,启动游戏运行至文字出现,Dump出内存再次进行差值搜索,定位至解密后文本的存储位置。

在此位置添加写入断点,定位至加密子程序。可知算法:

Debuger

huffman 压缩

最终文本存放至22bcfc0

文本指针:22bf24c+偏移量存放偏移量,22c0b2c(fd545abf)存放 huffman 压缩后字节

取一字节0 1展开,按比特逐位判断

22bf0b4(00006501) 处存放 huffman 树,四字节一组,前两字节左子树,后两字节右子树

大于100代表继续往下寻找,否则为目标编码

遇到00终止符结束

自动化解密详见代码 getText.py

解密后文本见 langText.csv

huffman

取字定位

因为font文件位于Glob.bin压缩包内,无法直接定位

故出现文字之后暂停dump,搜索font文件二进制代码+0x2000000定位,ida逆向分析,详略。

IDA

最终得知取字模子程序位于200F018,取编码值在0200F03A,为半字读取,支持双字节。

编码读取位置在22bcfc0,故只需修改22bcfc0处编码(因为有很多处中间拷贝)

可修改哈夫曼解码使之不再跳过00,并获取中文编码后压入,亦可直接覆盖原哈夫曼加密字串,直接b指令跳过解密读取编码

字库见 Animus_18b.font ,可使用tinke压入中文