UltraDebug

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: A C D R G Y M Z X S P
公益项目,接受捐赠
查看: 3736|回复: 0
收起左侧

[原创] Galgame汉化中的逆向(七):动态汉化分析2_以AZsystem引擎为例

[复制链接]
2222ss

主题

0

回帖

UD

新手上路

UID
54
积分
25
注册时间
2022-5-19
最后登录
1970-1-1
2023-2-5 17:34:08 | 显示全部楼层 |阅读模式

Galgame汉化中的逆向(七):动态汉化分析2_以AZsystem引擎为例

好久没发帖了,不知不觉又到了除夕,祝大家新年快乐~

by devseed, 本贴论坛和我的博客同时发布 本贴代码开源详见我的github: GalgameReverse, ReverseUtil

上篇链接:Galgame汉化中的逆向(六):动态汉化分析_以MAJIROv3引擎为例

0x0 前言

上节 [Galgame汉化中的逆向(六):动态汉化分析_以MAJIROv3引擎为例](),我们介绍了动态汉化。动态汉化不用分析封包结构,不用分析opcode,看上去很方便,但是动态汉化解决同步问题会很麻烦,比如说改完文本后backlog文本仍是日文、返回主界面再载入文本没有变动等问题。动态汉化也有可能出现莫名其妙的崩溃bug,且这些bug不容易被调试。

针对动态汉化的上述缺点,本节我们将介绍一种这种半动态汉化的方案。与上节的方法不同,本节不进行文本级替换,而是文件级别的替换。即去hook相关函数,动态将解密后的缓冲区替换为我们汉化后的文件。适合于那种封包与加密特别麻烦或复杂的游戏。

本文将以azsystem为例,来分析:

  • 引擎如何加载游戏脚本,如何定位关键点提取脚本
  • 引擎如何加载图片,如何解压各通道数据,如何将图片数据送入帧缓存渲染
  • 汉化如何用inline hook对加载后的内容进行替换 Galgame汉化中的逆向(七):动态汉化分析2_以AZsystem引擎为例 - 2222ss_UltraDebug

0x1 脚本文件分析与提取

(1) asb文件的分析

和上节相同,第一步先分析文件,无论静态分析算法还是动态dump缓冲区,先把文件提取出来。

由于方法差不多,这里不再详细展开了。

这个游戏封包为.arc文件,用文件长度哈希值来作为加密密钥,里面有若干个.asb脚本文件。IDA里面直接搜.asb字符串就能找到相关函数了,读取脚本文件函数如下:

int __thiscall sub_43112A(_DWORD *this, char *script_name)
{
  char *raw_data; // edi
  int v4; // eax
  unsigned int v5; // ecx
  _DWORD *v7[4]; // [esp+8h] [ebp-34h] BYREF
  int v8; // [esp+18h] [ebp-24h] BYREF
  unsigned int compressed_size; // [esp+1Ch] [ebp-20h]
  unsigned int raw_size; // [esp+20h] [ebp-1Ch]
  int v11; // [esp+24h] [ebp-18h]
  int (__thiscall **v12)(void *, char); // [esp+28h] [ebp-14h]
  char *compressed_data; // [esp+2Ch] [ebp-10h]
  int v14; // [esp+38h] [ebp-4h]

  v7[0] = off_460A6C;
  sub_40BD95(v7);
  v14 = 1;
  v12 = &off_462CDC;
  v11 = 0;
  sub_430FC9((int)this);
  if ( fopen_40C102(v7, script_name, 0x80000000) != 1 )
  {
    logprintf_407C41("CScript::Create", byte_4679CC, script_name);
    goto LABEL_13;
  }
  readfile_40C03E(v7, (char *)&v8, 0xC);
  if ( v8 == 0x1A4253
还有更多的精彩内容,作者设置为付费后可见
UltraDebug免责声明
✅以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
✅The above content is forwarded or original by netizens. If there is infringement, please send the email to the destination 9003554@qq.com handle.
回复 打印

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|站点地图|UltraDebug ( 滇ICP备2022002049号-2 滇公网安备 53032102000034号)

GMT+8, 2026-1-17 02:17 , Processed in 0.060979 second(s), 11 queries , Redis On.

Powered by Discuz X3.4

© 2001-2023 Discuz! Team.

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