Simplify3D 4.0.1 外挂汉化开发包 + 启动页汉化 + 调试过程 

3D打印机器制作 /[代码修改]
汉化方法:
  • 下载或编译一份 Qt Linguist 翻译工具。
  • 解压压缩包所有文件到程序目录。
  • 使用 Qt Linguist 开启 lang 目录下的 zh.ts
  • 进行翻译,记得保存。
  • 通过 File -> Release 生成程序用的翻译文件,重启程序或重新选择语言可以生效 (有一小部分文字需要重启程序才能生效)
支持的 Simplify3D.exe 文件校验(因为网上随便下的,官网没有提供试用链接,不知道是不是最新的)
  1. Simplify3D.exe
  2. MD5: 66a82f3fc1d6a9240c470ea698ab0b56
  3. SHA1: 736915002b781a6445ac430e4a315d0999a582c3
复制代码
home.php?mod=space&uid=438454

补全缺失翻译,下载后替换原始文件即可;也可以使用工具将新增部分合并过去
免 UAC 绿化程序:
软件本身就是绿色版(除了设定写出到注册表),直接复制出来就能用。
外挂汉化开发包内置了注册表文件,但将其导入需要管理员权限;用 FASM 写了个简单的免 UAC 版。
程序是 QT 写的,无壳,自校验+启动时检测调试器,资源内嵌(QT 打包,不懂解)。
观察 QT 文档,发现可以调用内部 API 直接复制资源文件出来到文件系统。
于是就用 多行汇编 插件写了段代码插进去
  1. <$simplify3d.2CF3E8>
  2. @QString:

  3. <$simplify3d.2CF590>
  4. @QFile__Copy:

  5. <$simplify3d.2160AD>
  6. @start:
  7.   ; 此处放置一个断点
  8.   lea rdx, [@src]
  9.   lea rcx, [rbp+0x88]
  10.   call [@QString]

  11.   lea rdx, [@target]
  12.   lea rcx, [rbp+0x80]
  13.   call [@QString]

  14.   lea rdx, [rbp+0x80] ; dest
  15.   lea rcx, [rbp+0x88] ; src
  16.   call [@QFile__Copy] ; QFile::Copy

  17.   jmp @start

  18. @target:
  19.   "./ja.qm\0"

  20. @src:
  21.   ":/Resources/Translations/simplify3d_ja.qm\0"
复制代码

然后点击菜单的 Help -> Change Language 触发,依次提取不同语言的翻译文件。

DLL 本来是打算用 version.dll 注入的,奈何注入时机有点晚,需要用户手动重新选择语言(有部分文字需要重启生效),于是挑了个软柿子:
194155zto8vkb8zyty3mdx.png


把这个 DLL 引用(api-ms-...)改成自己的,然后自己也导出一份不同名字(但是要够长)的 DLL:
  1. extern "C" __declspec(dllexport) size_t wcstombs_jixun(char* mbstr, wchar_t const* wcstr, size_t _MaxCount)
  2. {
  3.         wcstombs_s(&_MaxCount, mbstr, _MaxCount, wcstr, _MaxCount);
  4.         return _MaxCount;
  5. }
复制代码

  • 免运行时编译(编译选项 MT)不允许与这个函数重名
  • 安全编译选项不允许我引用 wcstombs 这个函数…
最后编译完了,用十六进制编辑器寻找 wcstombs_jixun 文字然后把下划线改成 00,强制更改函数名。
(其实还可以在 zlib.dll 里面把函数名改成别的… 但当时没想到所以算了)
然后就是将语言选择的日语的字串引用修改成我的,没什么技术含量,就不多说了…

相关推荐
B Color Smilies

全部评论2

联系
客服
点击
充值
升级
VIP
上传
资源
快速回复 返回顶部 返回列表