Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reallive引擎 #1

Closed
yqw1231 opened this issue Aug 22, 2023 · 184 comments
Closed

Reallive引擎 #1

yqw1231 opened this issue Aug 22, 2023 · 184 comments

Comments

@yqw1231
Copy link

yqw1231 commented Aug 22, 2023

QK6E Y9F%Z5%WU2$2VWAMAW
您好,我打算使用您的工具提取Reallive引擎的文本(Seen.txt),工作目录底下就一个txt文件,选项如图所示,但是生成的文件夹是空文件夹,可以请您指导一下吗?

@satan53x
Copy link
Owner

Seen.txt并不是脚本而是包,你还先需要解包,解包之后会有很多子txt。我是用arc_conv进行的解包和封包。
解包出来的txt在编辑器比如010Editor中能看到shift-jis编码的明文。
但如果看到开头有一部分乱码,说明还需要进行二次解密。
已经把二次解密的脚本seen_fix.py上传到Tools目录了。目录下也有调用arc_conv的bat,需要修改为你自己的路径。
但最大的问题是二次解密的码表并不是固定的,每个游戏不同,暂未找到生成代码,需要人工制作码表,原理如下:
1
子txt头部的20h处读取四个字节为小端整数,加上100h就是二次加密的起始地址(如图地址为27Eh+100h=37Eh),加密段长度为101h。
2
可以看到正常的文本显示不全,有截断,那么我们就可以从截断处反推码表。
找一个有文本被截断的txt,在游戏中找到对应的句子,把游戏里截断前边的明文按shift-jis编码,和txt中的密文进行异或,就能得到码表。
因为码表是16字节循环使用的,所以最好是找一个被截断超过8个日文字符的句子,使用其txt密文进行异或。
码表可以填入py脚本使用,注意因为加密段长度是101h,多一个字节,如果是从后往前获取的码表需要循环右移一字节。
同一个游戏码表相同。

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

非常感谢,也就是说,现在没法做出Reallive引擎的通用提取文本的工具是吗?我目前想提取的是裸足少女的作品《プリンセスハートリンク~剣姫たちの艶舞~》的文本

@satan53x
Copy link
Owner

是的,每个游戏码表是不一样的,你可以通过以上原理自己制作码表。
不过你说的这个游戏已经有人找我做过码表了,在seen_fix.py脚本的头部可以选择对应预设。

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

非常感谢,刚刚看到tools里新增Reallive文件夹

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

您好,刚刚发现bat里需要arc_conv.exe,请问是没有上传吗,还是说在其他文件夹里有

@satan53x
Copy link
Owner

是通用解封包工具,需要自行下载,搜索引擎搜arc_conv很多地方都能下载exe。
也可以下载源码运行bat编译https://github.com/amayra/arc_conv

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

好的,十分感谢

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

尝试了一下将new文件夹作为工作目录,还是生成空文件夹,所以是需要自己写工具提取吗?

@satan53x
Copy link
Owner

你用arc_conv解包出来会有很多小txt,比如Seen1010.txt,把那个作为工作目录就行。引擎要选BIN。

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

我目前是将所有的txt所在的new文件夹作为工作目录,如下图所示:
L%T( H_DYCIKS $ZSFGB@HW
Q_7VMJI8J_EIUD J`CFWN4N

但是生成的orig文件夹只有部分文件
TSZL5OY}@0JM7`NAXIX}_0X

而且有些文件的开头会出现乱码
DRG1PW82XOJ 6HBM VOSA$U

请问是什么原因呢?还是说需要一个工作目录只能放置一个txt吗?

@satan53x
Copy link
Owner

satan53x commented Aug 23, 2023

可以看打印,有些不生成json可能是txt本来就不包含文本。
开头乱码是不是你seen_fix.py预设类型没选对?

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

不是,是后面很多文件直接停止了,那些文件我单独拿到一个文件夹,发现是可以生成的,类型应该是选对的,我选的是2

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

B(A9DR(0JM~QU8R95}X`_61
这个是console的输出。

@satan53x
Copy link
Owner

那就奇怪了,这游戏之前别人也是这样提取的,没有问题啊。

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

Seen.txt~.zip
这是我要提取的文件,如果可以的话,希望您能在我这上面测试一下。

@satan53x
Copy link
Owner

错误的原因好像是码表不正确,难道是因为之前那个是DL版,你这是安装版吗?

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

噢,对的,主要是因为有个append disk不适用于DL版,所以用的安装版的。

@satan53x
Copy link
Owner

不过因为文本都是一样的,很方便的就找到了码表,你可以更新下seen_fix.py试试。

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

好的,非常感谢您这样的热心肠,已经提取出全部文本了,最后有几个问题,一是我的配置问题,请问最合理的配置是这样子的吗?
HB{J3EGYO7_I} }O841H2WO

二是我如果要打包的话,是先将翻译文本所在的目录作为工作目录,然后以一模一样的配置,点击提取/写入,然后将生成的txt文件使用封包工具封包,最后将游戏的Seen.txt替换,这样子的流程吗?

@satan53x
Copy link
Owner

satan53x commented Aug 23, 2023

一,最好打开截断字典新增复制。方便在导入时生成的cutoff.json中人工修正截断。
二,导入方式看工具内说明。
导入时工作目录不变,还是以日文txt为目录,译文json根据你单文档导出或多文档导出进行放置。
导入完成后需要对其进行加密再封包,同样使用seen_fix.py,因为异或运算的加解密函数是一样的。

@yqw1231
Copy link
Author

yqw1231 commented Aug 23, 2023

非常感谢,我已经明白您的意思了,最后辛苦您为我解答了这么多的问题。

@yqw1231
Copy link
Author

yqw1231 commented Aug 24, 2023

您好,又要麻烦您了。我现在为了作测试,将前十个seen.txt.json文件进行了翻译,并将翻译好的这十个文件放入trans中,然后按照相同的config,点击提取/写入按钮,发现在new文件夹中生成了十个txt文件。然后我将这十个txt文件,用seen_fix.py进行二次加密,然后覆盖解包出来的源文件。最后使用工具封包,得到新的Seen.txt。替换原有的Seen.txt后,打开游戏发现已经翻译的句子变成了乱码。请问我是有什么操作做错了吗?

@satan53x
Copy link
Owner

exe的字符集和编码范围判断全部修改完了吗?

@yqw1231
Copy link
Author

yqw1231 commented Aug 24, 2023

这个没有修改过。。。

@satan53x
Copy link
Owner

可按通用教程修改。
这个引擎编码范围判断比较多,可以观察字节流的规律进行批量替换。
我没修改过你这个游戏,我修改的同社其他游戏,可以用编辑器比如010Editor把A0 72全部替换为FE 72,其中只有一个不是编码范围,还原一下就行。
具体哪一个不是可以由ida反编译判断。没有尝试过不还原能否运行,也可以试试不还原。

@yqw1231
Copy link
Author

yqw1231 commented Aug 24, 2023

好的,我会尝试一下的,感谢

@Cosetto
Copy link
Contributor

Cosetto commented Aug 25, 2023

Actually, text_conv from arc_conv can deal with the script extracted:
Dump command: text_conv.exe rlseen seen1001.txt > seen1001.out.txt
Insert command: text_conv.exe rlseen seen1001.txt seen1001_new.txt < seen1001.out.txt
Though there are still some missing texts. I don't why.
Vntextpatch also support RealLive, but it doesn't work on newer games of Hadashi Shoujo.

@satan53x
Copy link
Owner

Though there are still some missing texts. I don't why.

2
Perhaps because some games by Hadashi Shoujo have secondary encryption at the beginning of each TXT file.
This script is used for secondary decryption: seen_fix.py
However, the XOR cipher key for each game is different, and the generation method has not yet been discovered.
Therefore, manual creation of the cipher key is necessary for each game.

@Cosetto
Copy link
Contributor

Cosetto commented Aug 25, 2023

So, I only need to use seen_fix.py to fix the text right? What about test_xor.py?

@satan53x
Copy link
Owner

satan53x commented Aug 25, 2023

Just use seen_fix.py and select the folder where SeenXXXX.txt is located. ( You need to change the "GameType" in the script header to the corresponding game in "XorTable")
test_xor.py is a testing script used for manually creating the cipher key. If you already have the cipher key for your game, there's no need to use it.

@yqw1231
Copy link
Author

yqw1231 commented Jan 12, 2024

大佬,想问一下。
image
image
为什么前面会有乱码呢?

@satan53x
Copy link
Owner

可能前边这段没提取到?直接在译文txt里搜一下后边这句话呗,最好用010搜方便修改

@yqw1231
Copy link
Author

yqw1231 commented Jan 12, 2024

image
看起来确实是没提取到?

@yqw1231
Copy link
Author

yqw1231 commented Jan 12, 2024

试了一下把前面乱码的文字等个数替换成中文,封回去以后,一点到那个回想程序就会卡住不动。我看前面乱码字数有九个,直接在GBK编码界面下把这九个文字改成了九个中文,是不是我做错了啥。。
image

@satan53x
Copy link
Owner

satan53x commented Jan 12, 2024

没问题啊,字节长度不变就是对的。
但是推荐是用010Editor改,WinHex改应该也可以但是我没试过,但千万别用EmEditor之类的改二进制文本。
改完你可以用BeyondCompare对比一下字节变化确保没问题。

@yqw1231
Copy link
Author

yqw1231 commented Jan 13, 2024

没问题啊,字节长度不变就是对的。 但是推荐是用010Editor改,WinHex改应该也可以但是我没试过,但千万别用EmEditor之类的改二进制文本。 改完你可以用BeyondCompare对比一下字节变化确保没问题。

感谢大佬

@satan53x
Copy link
Owner

顺便一提更新了一下正则,更新之后可以提取了,用BeyondCompare对比了一下文件,大概有十九个文件差异,每个文件差异一句话。
不过我是用你上边之前发的那个Seen子文件测试的,我发现是不是你的码表有点问题啊,因为解密的中间有一段还是乱码。(码表中只有一段有问题,其他是正常的)

@yqw1231
Copy link
Author

yqw1231 commented Jan 13, 2024

顺便一提更新了一下正则,更新之后可以提取了,用BeyondCompare对比了一下文件,大概有十九个文件差异,每个文件差异一句话。 不过我是用你上边之前发的那个Seen子文件测试的,我发现是不是你的码表有点问题啊,因为解密的中间有一段还是乱码。(码表中只有一段有问题,其他是正常的)

我用的是大佬你的seen_fix.py改的,我也不知道是啥情况。。

@satan53x
Copy link
Owner

satan53x commented Jan 13, 2024

可能版本不一样?有的游戏DL版和PKG版的码表都不一样。
RealLive的加密一般只影响每个文本开头前几句话中的一句,如果游戏场景里开头有乱码就说明解密不对。

@yqw1231
Copy link
Author

yqw1231 commented Jan 13, 2024

可能版本不一样?有的游戏DL版和PKG版的码表都不一样。 RealLive的加密一般只影响每个文本开头前几句话中的一句,如果游戏场景里开头有乱码就说明解密不对。

我倒是没遇到啥乱码。。

@satan53x
Copy link
Owner

恩,只是有可能,因为不一定每个文件的加密区域都落在对话上。

@yqw1231
Copy link
Author

yqw1231 commented Jan 14, 2024

大佬,好像新妻诗乃有一些文本没提取出来。。麻烦可以看一下吗?我怀疑是码表的问题,我下的新妻诗乃是光盘安装版本的
image

@satan53x
Copy link
Owner

可能就是我上边说的情况?码表不对?一般表现为每个场景开头几句中可能有乱码,就是因为解密错误,所以提取不到。

@yqw1231
Copy link
Author

yqw1231 commented Jan 14, 2024

可能就是我上边说的情况?码表不对?一般表现为每个场景开头几句中可能有乱码,就是因为解密错误,所以提取不到。

大佬,你seen_fix里的码表,是用的光盘安装版本的吗?

@satan53x
Copy link
Owner

satan53x commented Jan 14, 2024

不清楚,有些是别人提供的码表,没有注明版本。
如果不对你需要自行查找码表,就是这个issue开头的那个方法。
或者是换一个游戏版本。

@yqw1231
Copy link
Author

yqw1231 commented Jan 14, 2024

不清楚,有些是别人提供的码表,没有注明版本。 如果不行你需要自行查找码表,就是这个issue开头的那个方法。

噢,抱歉大佬,是我操作错误了,对不起打扰您了,我刚改完新妻こよみ之后,没修改编号,直接改新妻诗乃了

@yqw1231
Copy link
Author

yqw1231 commented Jan 14, 2024

不清楚,有些是别人提供的码表,没有注明版本。 如果不对你需要自行查找码表,就是这个issue开头的那个方法。 或者是换一个游戏版本。

那个新妻こよみ,应该是用的DL版本的,或者说可能是因为我打过更新补丁,导致seen.txt被修改,然后原先的码表不能用了,得自己试着整一下了。之前大佬你看我那个发的有问题,可能就是因为用过更新补丁之类的。。不过还好之前那个码表用了以后,文字不会缺失,倒也不影响

@yqw1231
Copy link
Author

yqw1231 commented Jan 14, 2024

@satan53x The rest of Hadashi xortable:

    # 3Ping Lovers! ☆ Ippu Nisai no Sekai e Youkoso♪
    4: bytearray.fromhex('66 8A 20 D4 6E C3 B4 B8 4B F8 38 93 AC AC 70 0A'),

    # Niizuma Shino
    5: bytearray.fromhex('8C 03 CC 55 9F 1D 41 38 A1 60 D4 12 5D 2D 85 D4'),

    # Niizuma Koyomi
    6: bytearray.fromhex('80 05 D7 40 89 15 5D 3C A7 62 D3 17 41 39 86 D0'),

    # Lovedori Halation
    7: bytearray.fromhex('74 3C 2F FC 6E CD B4 BF 4B D4 2A 25 A3 84 70 04'),

    # Mizugi Shoujo to Biyaku Ice ~Zannen na Kanojo no Shitsukekata, Oshiemasu~
    8: bytearray.fromhex('93 02 CB 40 89 23 52 38 B0 7E D2 1A 5A 29 AD D1')

But there's something wrong with Niizuma Koyomi's Seen7100.txt, the above of it seems fine, but the rest is truncated. image seen.bak.txt

Hello,I'd like you to ask me a question.Are you use the DL version of Niizuma Koyomi to generate the xortable?

@Cosetto
Copy link
Contributor

Cosetto commented Jan 15, 2024

I think so, I got it from Ryuugames

@yqw1231
Copy link
Author

yqw1231 commented Jan 15, 2024

I think so, I got it from Ryuugames

thanks

@yqw1231
Copy link
Author

yqw1231 commented Jan 16, 2024

大佬请问一下,是不是文本开头没有乱码的话,就说明这个文本没有被截断呢?

@satan53x
Copy link
Owner

你是说截断还是加密?每个文件的加密区域内不一定有文本,但是如果所有场景开头都没有乱码你也可以当做没有加密,不涉及文本提取不需要解密。因为最后本来还是要加密回去的。

@yqw1231
Copy link
Author

yqw1231 commented Jan 17, 2024

你是说截断还是加密?每个文件的加密区域内不一定有文本,但是如果所有场景开头都没有乱码你也可以当做没有加密,不涉及文本提取不需要解密。因为最后本来还是要加密回去的。

大佬,我现在的问题就是,没找到ori中哪个文本开头乱码,但是封回去以后进入游戏,刚开始的地方会卡住,我看了一下,这个文本并没有出现乱码啥的
image
image

@satan53x
Copy link
Owner

这个不是乱码吧,乱码应该还是字符,你这可能是编码范围之类的问题?exe没改完?

@yqw1231
Copy link
Author

yqw1231 commented Jan 17, 2024

这个不是乱码吧,乱码应该还是字符,你这可能是编码范围之类的问题?exe没改完?

噢,是的,可能是我之前编码范围改完以后,一不小心被覆盖了,但是我发现我明明改成了0x86,为什么我用封装回去的seen.txt能正常显示日文呢,这个是因为修改了编码范围吗?

@satan53x
Copy link
Owner

不知道你怎么操作的,日文不代表就是JIS,GBK里也有日文,只要导入过就是GBK的日文了。

@yqw1231
Copy link
Author

yqw1231 commented Jan 17, 2024

不知道你怎么操作的,日文不代表就是JIS,GBK里也有日文,只要导入过就是GBK的日文了。

用原版的seen.txt就会乱码,用没翻译过的文本封装的seen.txt却能正常显示日文。。可能是因为大佬你在封装的时候,修改了文本的编码?

@satan53x
Copy link
Owner

satan53x commented Jan 17, 2024

那肯定啊,导入的时候就是GBK编码了,不管你文本是什么。
如果你想要保持JIS编码,需要勾选编码也对BIN生效,并选择编码为cp932

@yqw1231
Copy link
Author

yqw1231 commented Jan 17, 2024

那肯定啊,导入的时候就是GBK编码了,不管你文本是什么。

喔好的,那我明白了,谢谢大佬,这个pkg版本的应该是没文本截断的。。

satan53x pushed a commit that referenced this issue Jun 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants