galgame吧 关注:1,805,644贴子:26,902,354

【教程向】浅谈汉化入门基本思路与实操

只看楼主收藏回复

## L1
前言:
本贴介绍如何程序上汉化一个gal的标准流程,适用于有一定正向开发能力(其实也不一定要有),但是【完全没有逆向经验】的人来汉化自己想要的游戏。
先介绍一下我自己的情况:一个接近毕业的,经历过标准教育的,根正苗红的计算机系的大学生,你可以自己评估一下,如果是类似的情况,那么游戏汉化对你来说是很容易(指花1-3天即可)“上手”(指有能力汉化大部分游戏,但不是真会)的,此贴对你而言应该相当舒适。
如果你不是相关专业的同学,你可以根据后面的内容自己评估一下适不适合,如果我说的概念都能看理解,那么你也很适合自己动手来做
我会从必须要知道的一些基本概念开始入手,到使用的基本工具链的介绍和使用,再到讲解通用汉化流程,从集中到在两个我动手做过的真实汉化案例(一个简单,一个难度较高)中穿插介绍
毕竟在这个赛博年代,ai让翻译资源有开始free的倾向,我认为但不少人应该是缺乏程序能力,本贴旨在提高社区能动性,丰富社区资源,你要是真会了干点什么以后我自己找汉化也容易点。
好吧,这不是我写这篇帖子的主要目的,写这篇的真实动机是我好像好久没发过帖子了,最近几个月又没推过什么游戏,想写什么又没得写,用这篇来代替一下,假装我还alive(我现在在想如果是看过的书可以用来发帖吗?会有人想看三岛的剧情解析吗?感觉书应该算是一种固态gal)。
这篇贴如果能写完会非常长,预计会有1w字左右,看看今天一天能不能写完。
按顺序以Lx来发,如果你发现跳数字,可以提醒我补。
如果没有违反什么吧规的话就开始了:


IP属地:吉林1楼2025-05-10 11:14回复
    ## L2
    首先你要知道的概念:
    【编码标准】搞汉化就是在和字打交道,理解编码肯定是最重要的,所谓的的编码标准就是一套从【字符空间】(类似{a,b,c...}人脑中的印象的符号集合)到【编码空间】(类似{0A0D,0BCD,...}这样的数字序列的集合)的映射。
    我们汉化中最常接触到的编码标只有3种:GBK(也叫CP936) shift-jis(也叫CP932) utf8
    你只要知道,我们在汉化的时候一般是:从shift-jis修改到GBK,这是由于
    1.shift-jis和GBK都是一个字符双字节(45AB这样)为主
    2.GBK完全支持日文日文字符
    这样的特性决定的。
    我简单介绍一下这些编码的特性和来源(*):
    utf-8是一套unicode的实现方案,前面说的,编码标准是【字符空间】→【编码空间】的映射,uft8其实不同,它是【unicode编码空间】→【编码空间】的映射。
    【unicode编码空间】是对【字符空间】的机械定义,也就是【字符空间】→【unicode编码空间】,因为你难说清楚人类有多少符号,所以有了Unicode,人类已知的通用符号有哪些,人的认知的边界在哪里,都由unicode来定义(unicode包括什么emoji🦄,什么楔形文字𒀝,尼鲁字母ᚠ云云)。
    实现了所有unicode字符的编码我们称之为【支持Unicode】,所有utf-x都是实现了unicode的【编码标准】,其中utf-16,utf-32并不是说数字越大越先进的编码,而是单个字符的占用空间越大,解析速度越快的编码。
    有些人分不清GB2312,GB18030,GBK的区别,这三者编码都是钟 国国家标准指定的,它们的定制上的先后顺序是GB2312(1980)→GBK(1993)→GB18030(2000),后者完全兼容前者的递进关系,并且支持的字符越来越多。
    GB18030开始支持unicode,常用字符而且几乎定长性能友好,所以我们是相当国际化的


    IP属地:吉林2楼2025-05-10 11:23
    收起回复
      2025-12-31 02:37:46
      广告
      不感兴趣
      开通SVIP免广告
      ## L3
      【数据包】你应该发现过有很多文件,当你双击打开时你会发现它们“点不开”,比如.tex文件,.dll文件,.dat文件云云...
      现在你应该转变观念,一个文件“能点开”才是特殊的,不能点开才是正常的。
      实际上,任何文件(即使是txt)都需要有专门的程序来负责“解析”,一个不能解析的文件就是一堆没用的数字,在硬盘里除了占位置没有任何意义,操作系统就是一个大软件,它帮你完成了解析exe以及关联文件和他的解析程序的工作。
      任何文件,包括txt,exe,dll,html,png,jpg,你都可以叫他它数据包(当然我就随口一说你别真和别人这么叫)。
      如果文件的解析程序是流行(指操作系统内置)的,那么我们把它称为【明文】数据包。如果文件需要一个不流行的程序用来解析,那么他就是一个一般数据包。
      我们一般通过(一个或多个)明文文件来一般制作数据包,接下来我提到的【数据包】特指galgame.exe才可以解析。
      那么我们为什么不把所有文件明文存储而要弄成数据包呢?主要原因是把可以让数据连续存储,减少跨块访问以提高IO性能(你可以发现拷贝多个小文件比拷贝同体积的一个大文件花的时间多的多),另外就是为了防你。
      所以你会发现诶呀某些手游就更一个皮肤你要我更新3g,你可能会说你这皮是金做的还是铀做的,这就是由于游戏的包做的不好,它把你改的那个皮肤所在整个包给替换了,里面可能有其他没改过的皮肤也要下载。


      IP属地:吉林3楼2025-05-10 11:29
      回复
        ## L4
        【解包】:前面说过我们一般用明文来制作数据包,解包就是把数据包还原没加密过的明文文件的操作,比如你解压缩一个zip,其实就是在解包。
        【封包】:顾名思义,把明文制成特定数据包的操作,比如你做一个zip就是一种封包行为。
        你可能会觉得,哎呀,知道怎么解包哪知道怎么封包不是轻轻松松。 非也,你知道怎么算平方≠开方很容易,知道怎么算导数≠算积分很容易,知道怎么相乘≠因式(数)分解很容易,在只有解包算法的时候倒推出封包算法是极度困难的,我们需要使用IDA等工具静态分析出数据包的结构和加密算法,然后才能开发出封包软件。
        【引擎】:如有你有游戏制作经验的话,想必对这个概念不陌生了,引擎本身就是一个【能跑的游戏】,制作游戏不过是在引擎上添加贴图,模型,UI,控制脚本,数据结构。你可以使用把相同引擎的的不同游戏视为相互的“换皮游戏”,所以如果一个游戏的引擎没有被更新或定制,那么汉化的流程几乎是相同的,我们汉化的主要工作,就是摸清(替换)封包文件数据中字符串和贴图的结构。


        IP属地:吉林4楼2025-05-10 11:32
        回复
          支持


          IP属地:广东来自Android客户端5楼2025-05-10 11:33
          回复
            支持


            IP属地:山东来自Android客户端6楼2025-05-10 11:34
            回复


              IP属地:江西来自Android客户端7楼2025-05-10 11:36
              回复
                ## L5
                【程序位数】:32位程序是指使用32位指针,寻址空间为32位并使用32位指令集,寄存器集的程序。
                最大的区别是你在写一个C程序的时候,比如:
                ```C
                int data = 3;
                printf("%d", sizeof(&data));
                ```
                32位程序输出4,64位会输出8,处理数据和编译代码的时候要注意,一些解密程序编译成64位是跑不通。
                32位程序要用x32dbg.exe调试,x64位程序要用x64dbg.exe来调试。那么怎么知道程序是64位还是32位的呢?很简单,你用x64dbg打开,底下出现:

                那么它就是32位程序
                【跟踪】:就是集中注意力观察程序的运行流程,具体操作是不停的打断点,步入(进),紧紧关注内存变化,寄存器变化,堆栈变化,解析出数据流动转化和控制逻辑,在跟踪过程中能观察出的信息和你的逆向水平直接正相关。


                IP属地:吉林8楼2025-05-10 11:40
                回复
                  2025-12-31 02:31:46
                  广告
                  不感兴趣
                  开通SVIP免广告
                  ## L6
                  需要使用的工具:
                  【x64dbg】:这是“调试器”的一种,是逆向作业中最常用的工具,你可以使用“调试器”用来控制整个exe程序的运行流程。这个工具相比其他的上手有一些门槛,所以我画了一张图来介绍他的最基础布局,更具体的功能边做边提:

                  (这张图是我手画的,算比较有价值的一张,可以保存下来,不知道怎么上手看看它)
                  注:汇编有AT&T风格语法和Intel语法,x64dbg反汇编的结果是Intel语法,查找资料的时候学习intel语法即可。
                  EIP是指:Extended Instruction Pointer(扩展指令指针),是指示 CPU 当前正在执行或即将执行的指令的内存地址的一个寄存器,你可以视它为断点下将要执行的下一条指令的指示,所以你可以按ctrl+G,输入eip调整到当前正在运行的指令。
                  【winHex】:二进制(Hex代表16进制)文件编辑查看工具的一种,你可以打开任意一个文件查看他的16进制存储数据,非常常用的编码转换编辑工具。
                  【GRAbro】:最常用,好用的解包封包工具,实际上还有其他的,等有需要可以自己再找再用。
                  【vscode】:一种文本编辑器,sublime什么的都可以(但用txt不行,上课用txt来讲代码的老师必然会渡过一个比较失败的人生
                  以上四个工具是汉化用的最基础的工具,两个编辑器一个解析器一个调试器,每个类型的工具都有平替,我提到的是最标准的,如果你有自己的习惯,挑自己最趁手的就好。


                  IP属地:吉林9楼2025-05-10 11:47
                  收起回复
                    ## L7
                    好,说了一堆,接下来马上开始汉化实战第一款游戏,在此之前我先介绍一下汉化流程和误区:
                    汉化流程最主要的就三步:解包游戏,提取文本 -> 翻译文本,嵌回脚本 -> 封包游戏,修改exe,让游戏正常运行
                    了解以上步骤就能汉化游戏了
                    汉化遵循着这样一个【原则】:冷门作品为了降本增笑,倾向于采用kirikiri之类的通用引擎,由于没什么钱,程序质量低,时常根本不加密,随便解包封包,然后就很容易汉化。
                    热门作品,有钱有实力,像柚子社那种可能会难点(我没焊过不知道,只是打个比方),但是自然有大佬出手,我不妨说的直白一点,根本轮不到你来焊。
                    所以,有一点实力,但是又不太热门的新作品,大概是(对你)最难的,最攻坚的汉化。
                    是的,我要提到的误区是,有些人因为没有接触过汉化,总觉得汉化程序很难,实际上并不是,因为已经有大佬给你负重前行过了(解包,封包都不需要你自己动手写程序完成)。
                    汉化的难度是随引擎的不同而剧烈变化的,难度低的作品(占比还不少!)你【根本不需要知道怎么写代码怎么逆就能焊】,难度高的程序,我可以说没有任何人能100%保证可以逆出来,来个D加密就老实了,有一个算一个全部挺尸(但是D加密不太可能,只是说极端情况可以这样,我也没有听说过有D加密的gal)。
                    接下来实战第一个作品是名叫(不能放字见谅):

                    这是我在ggbase里随便(没有事先经过任何挑选)找的一个kirikiri类型的,看起路子野野的游戏,根据上面的理论,这个应该很好焊


                    IP属地:吉林10楼2025-05-10 11:54
                    收起回复
                      支持


                      IP属地:北京来自Android客户端11楼2025-05-10 11:54
                      回复
                        支持
                        顺便学学


                        IP属地:四川来自Android客户端12楼2025-05-10 11:55
                        回复
                          支持支持


                          IP属地:河北来自Android客户端13楼2025-05-10 11:58
                          回复
                            ## L8
                            注:其实如果是原镜像有不少是要区域认证和key的,但是解包的时候忘了在哪看到了crack str,好像是被人动过了,反正直接就能进入游戏,所以这步就演示不了。
                            第一步打开游戏观察一下:

                            你观察到什么?游戏标题栏和游戏内文本同时乱码,乱成生僻字的形式,这对于汉化者而言,这太好了!至于好在哪里我马上解释,在此之前我来普及一个概念【转区】:
                            这个老玩家都懂,一个日文原版的游戏,如果有乱码,那么利用转区工具打开,乱码就会变成[可以看懂]的日文,用转区工具很简单,像这样把游戏拉到转区工具exe打开就行了:

                            转区后会这样:

                            那为什么转区有效呢?
                            因为有不少程序员在存储字符串的时候没有指定编码,游戏引擎就默认调用当前计算机(就是你在安操作让你选择的那个钟 国)所处区域使用的编码来解码字符串,我们用的是GBK。
                            但是,封包的时候这些字符串已经硬编码到了数据包中了,霓虹人用的是shift-jis编码,所以解析出来也是shift-jis保存的字符串,游戏引擎管你这哪的,解包后直接把这些字符串对应的字符编码{82BB,82EA...}给gdi(一个操作系统库),然后告诉gdi这些数据编码是GBK,你给我渲染出来,然后gdi硬是以shift-jis的数据用gbk的方式解码,就解码出这些玩意了。
                            转区,就是把系统地区语言设置为霓虹国,操作系统告诉游戏引擎,请用shift-jis解码,然后就正常解出日文了。


                            IP属地:吉林14楼2025-05-10 12:00
                            回复
                              2025-12-31 02:25:46
                              广告
                              不感兴趣
                              开通SVIP免广告


                              IP属地:辽宁来自Android客户端15楼2025-05-10 12:08
                              回复