吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3883|回复: 8
收起左侧

[求助] 想要汉化一个游戏遇到的程序破解问题

  [复制链接]
zmrn 发表于 2020-5-6 19:06
25吾爱币
本帖最后由 zmrn 于 2020-5-12 21:29 编辑

这两天出于兴趣想要汉化一个文字游戏,于是开始撬游戏的程序。本人没有什么逆向经验,这是第一次正儿八经破解程序。幸好程序也没有加壳。
其中.arc文件为游戏打包的文件,包含了各种图片,语音,音效等。

用了一个日本人写的提取器exoozoarc(http://asmodean.reverse.net/pages/exoozoarc.html),从.arc文件中提取出了.ws2格式的游戏脚本。发现ws2脚本是加密的。
从下面的文章里知道了ws2脚本是循环位移加密,顺便用了帖子里的程序来解密。(然后就顺便一直用Nodejs写的代码)
https://zhuanlan.zhihu.com/p/42466485

日本的文字游戏往往在中文系统的windows上不转区是无法直接玩的,因为打开以后文字是乱码。必须转到日区才能正常游玩。
这个游戏很独特的一点是,它不需要转区就可以正常打开显示日语。我本以为它脚本是utf-8写的,可是打开ws2以后可以看到,实际上脚本里的日文还是shift-jis编码的。
我试着写了个nodejs脚本提取文本,然后替换成utf-8的中文编码,然后根据exoozoarc的源代码和.arc文件的结构写了一个封包程序。
替换成utf-8的中文脚本,果然游戏无法正常显示,是乱码。

于是我用odb调试了一下源程序,发现程序会将shift-jis的脚本转化为Unicode。
image.png

图中红框部分原本是shift-jis的字符集代码,我改成了UTF-8。
我觉着这样,程序就会把读取的脚本里的utf-8编码的中文转换成Unicode显示了。
把部分文本导入替换掉以后,一切看起来都很好,字体虽然不好看但至少没错。文本也提取完了,可以正式开始汉化了。

本以为这样就万事大吉了。可是我完全无法处理,甚至找不到原因的玄学问题出现了。

游戏的文本分散在了数十个ws2脚本文件里,每个文件通常只有几十句台词。图上第一个文件便是游戏刚开始载入的脚本。该脚本的最后让游戏播放了片头动画,然后指定了下一个脚本的名字。

汉化了前两三句的时候,程序一切正常,当我导入更多的汉化之后,游戏开始出现问题了。我导入的文本的量不同,内容不同,游戏展现的问题都完全不同。那些替换掉原文的文本以不明的方式影响到了游戏的运行。
导入不同的汉化文本后,下面的问题都出现过。
问题1:片头动画无法跳过,本来看过一次以后就能跳过了。而且播放完之后白屏,并没有载入第二个脚本。
问题2:片头动画播放的时候,按一下鼠标应该可以跳过。可实际上按一下鼠标导致动画重播了一遍……播放完一次以后又重播一次。
问题3:游戏默认在快进模式,而且无法停止快进。快进一段时间后莫名其妙又停止快进了。

总之是一堆十分玄学的问题。我本来以为是我修改了shift-jis才出现的问题。
可是当我换回原版的程序,把日文原文提取出来,每句话只保留前几个日文字符,以shift-jis写入回去以后,依旧会发生问题。

那么是不是我写的打包程序有问题?于是我试着把脚本提取出来以后直接打包放回去,结果游戏可以正常运行。

也就是说……替换文本这件事本身就可能影响到游戏的运行,甚至你替换成日文文本都会出问题。而且很玄学,某些文本不会影响,某些文本会影响。调试了很久完全一头雾水。明明只是替换掉了几个字符串,为什么会影响到游戏的运行呢?而且还是以这种莫名其妙的方式出问题,闪退或者弹个框也好啊。

于是陷入了僵局。希望大佬们能帮帮我。


最佳答案

查看完整内容

毕竟已经很老的工具了,那个仓库乱七八糟的。试试https://github.com/marcussacana/WillPlusManager 或者 https://github.com/Amarillys/JSUtils/blob/master/advhd-mkz.js 如果全都不行,你只能do it for yourself了。 PS:汉化游戏有一万个坑。 Edit: 你也可以试试去问问代码作者

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

monvvv 发表于 2020-5-6 19:06
本帖最后由 monvvv 于 2020-5-7 18:40 编辑
zmrn 发表于 2020-5-7 13:07
我试了试ahdprc,似乎也是单纯的替换了字符串,还是有一样的问题……

毕竟已经很老的工具了,那个仓库乱七八糟的。试试https://github.com/marcussacana/WillPlusManager
或者
https://github.com/Amarillys/JSUtils/blob/master/advhd-mkz.js
如果全都不行,你只能do it for yourself了。
PS:汉化游戏有一万个坑。
Edit: 你也可以试试去问问代码作者
sodiums 发表于 2020-5-6 19:47
monvvv 发表于 2020-5-6 20:16
需要汉化的WS2文件是什么格式的?是怎么被读取的?
 楼主| zmrn 发表于 2020-5-6 20:59
monvvv 发表于 2020-5-6 20:16
需要汉化的WS2文件是什么格式的?是怎么被读取的?

额……其实我并没有成功解析WS2的结构。图上能看出,除了文本部分以外,其他部分都是二进制标记。我只是写了个程序单纯地替换掉了WS2里的文本。想要看着二进制文件解析WS2的内容实在是有点难啊。
monvvv 发表于 2020-5-6 21:55
本帖最后由 monvvv 于 2020-5-6 21:57 编辑
zmrn 发表于 2020-5-6 20:59
额……其实我并没有成功解析WS2的结构。图上能看出,除了文本部分以外,其他部分都是二进制标记。我只是 ...

不知道格式直接文本替换出现问题实现是不值得奇怪。举个例子,比如文件内的每个字符串都是通过偏移(offset)定位的,你修改文本后长度变化直接导致偏移改变,读取就会出错。
看了你贴的知乎链接,显然ws2文件不能直接文本替换(根据他后面贴的提取代码)。不过那人贴的代码不完善,repo也不能访问了。你可以试试用'ahdprc'(https://github.com/Inori/FuckGalEngine)。
如果也不能用,那你就只能自己慢慢逆了(lua字节码可以用unluac)。
 楼主| zmrn 发表于 2020-5-6 23:20
monvvv 发表于 2020-5-6 21:55
不知道格式直接文本替换出现问题实现是不值得奇怪。举个例子,比如文件内的每个字符串都是通过偏移(offse ...

卧槽原来还有此等好物,是我查资料不足了。虽然在那个文章里看到了ahdprc的字眼,也去搜索过,不过没找到就放弃了。我去试试。lua的文件试着用unlua还有几个其他的东西处理过,不过没能成功破解出来……如果需要修改的话我再去想想办法吧。
 楼主| zmrn 发表于 2020-5-7 13:07
monvvv 发表于 2020-5-6 21:55
不知道格式直接文本替换出现问题实现是不值得奇怪。举个例子,比如文件内的每个字符串都是通过偏移(offse ...

我试了试ahdprc,似乎也是单纯的替换了字符串,还是有一样的问题……
 楼主| zmrn 发表于 2020-5-7 19:32
monvvv 发表于 2020-5-7 18:38
毕竟已经很老的工具了,那个仓库乱七八糟的。试试https://github.com/marcussacana/WillPlusManager
或 ...

谢谢大佬的帮助。打包这东西实在太痛苦了,所以我还是换了个思路。。用DLL注入搞定了,把原文和译文读取保存到map里,hook了一下转换Unicode的API直接替换文本……现在没问题了= =
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-5 08:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表