您的访问可能来自境外运营商(US),建议使用bbs4地址提升访问体验
今日: 1810|昨日: 2922|帖子: 16490258|会员: 477572|欢迎新会员: jirozhou
查看: 489|回复: 2
|
[讨论]
【菜鸡分析】早期版本的malie引擎分析
[复制链接]
|
|
本帖最后由 AyamiKaze 于 2024-2-20 20:48 编辑
github版本:https://github.com/AyamiKaze/GalgameNote/blob/main/malie3.0/Malie3.0.md
# Malie old version
嘛,自己说的话得自己做到底啊。
不过我做完程序翻译能翻完吗w。
嘛,其实逆了两三天,然后摆烂了,现在看起来,再不写点啥真的要忘了。这作程序还是比较典型的(虽然和后期malie引擎差距很大,完全是重写了整个VM)。
游戏:僕と、僕らの夏完全版
## 一、脚本提取
脚本分的是段的,不过我们不用分析,可以直接dump最后一个区段。
先看下最后区段的内容
嗯,脚本前调用FrameLayer_SendMessage函数来显示字符。但实际上并不是一个字符串对应一个函数,一个函数内可以有多个字符串。所以要根据字符串的特点来提取。
仔细观察,normal字符串都有“/”的标志作为起始,人名则是以“+”开始:
但光判断这个字符肯定会混进来其他东西,所以我们需要过滤掉(即判断第二位是不是sjis范围内)。
还有选项,他的标志是0x09162210,具体怎样追的我就不细说了,有兴趣的可以自己找找看。
这下文本基本结束了,脚本部分我们几乎黑盒分析,事实上,这个脚本是个非常合适黑盒分析训练的练手作,建议可以自己逆一下,说不定还能发现比我更多更准确的内容。
## 二、patch制作
翻好的文本肯定要塞回去,这里采用hook 的办法。
我们还是先用CE搜一下ScriptObject所在的地方,一般搜索脚本的EIP(距离vm头到当前指令的offset)。
搜到内存后下断点,然后程序停在这里:
0042BC20 | 8B4424 04 | mov eax,dword ptr ss:[esp+4] |
0042BC24 | 56 | push esi |
0042BC25 | 57 | push edi |
0042BC26 | 8B88 2C000400 | mov ecx,dword ptr ds:[eax+4002C] |
0042BC2C | 8B50 08 | mov edx,dword ptr ds:[eax+8] |
0042BC2F | 8B70 14 | mov esi,dword ptr ds:[eax+14] | cur
0042BC32 | 41 | inc ecx |
0042BC33 | 8988 2C000400 | mov dword ptr ds:[eax+4002C],ecx |
0042BC39 | 8B7A 0C | mov edi,dword ptr ds:[edx+C] | base
0042BC3C | 2BF7 | sub esi,edi | VM_EIP
0042BC3E | 5F | pop edi |
0042BC3F | 89B0 30000400 | mov dword ptr ds:[eax+40030],esi |
0042BC45 | 8B80 28000400 | mov eax,dword ptr ds:[eax+40028] |
0042BC4B | 5E | pop esi |
0042BC4C | 3B48 14 | cmp ecx,dword ptr ds:[eax+14] |
0042BC4F | 7E 03 | jle bokudvd.42BC54 |
0042BC51 | 8948 14 | mov dword ptr ds:[eax+14],ecx |
0042BC54 | C3 | ret |
注意我标记的地方,第一个cur是当前脚本位置,base则是脚本起始地点,后面sub esi, edi则是做减法,得到offset。
现在简单了,我们只需要offset直接替换文本就行了。
但是你会发现,在这个函数里面,得到了offset就算换自己的文本与base的offset他只会显示原文。
可能有聪明的人发现,mov esi,dword ptr ds:[eax+14] 这里传入脚本当前的位置,那么直接替换掉[eax+14] 不就行了。
最开始我也是这么想的,然而最后发现,游戏会卡死在当前句,既不会显示,也不会报错。
那么我没只能从文本处理的地方下手了。
用CE搜索文本,下断,跑起来,停在一个获取字符串长度的函数内,往外跟一层,来到这里:
有点复杂,看IDA:
这里就是复制VM里面的字符串到一个位置上。
到这里我们明白了,可以修改这个函数,copy我们自己的文本到a1去。
至此,分析完毕。
|
|
|
|
|
|
|
|
发表于 2024-2-21 08:18:02
|
显示全部楼层
|
|
|
|
|
|
|
发表于 2024-2-21 11:21:42
|
显示全部楼层
大佬强,期待游戏汉化完成的那一天。 |
|
|
|
|
|
|
小黑屋|Archiver|星空网
Powered by Discuz! , Design by Seraphoenix && 北北″.
GMT+8, 2024-11-21 17:56
, Processed in 18 ms, 13 queries, 0.36 loads
, Redis On.
Copyright © 2009-2024 Seikuu. All Rights Reserved.