文章《群晖中文未按拼音排序问题排查》找到 File Station 中文未按拼音排序问题的原因。

在这里提供一个破解的方法,把 libsynocore.so.6 中 ucol_open 的 locale 参数改成 zh,以支持按拼音排序。

我的 DSM 版本是 DSM 6.1.7-15284,以下都是针对这个版本的修改。

ucol_open 涉及到以下代码:

LOAD:00000000000164D1                 lea     rsi, [rsp+28h+var_1C]
LOAD:00000000000164D6                 lea     rdi, aPStartAddress+12h ; ""
LOAD:00000000000164DD                 call    _ucol_open

0x164D6 行代码就是加载 locale 参数的,对应的操作码是:

48 8D  3D 8E A8 00 00
  • 48 8D 指的是 lea
  • 3D 指的是 lea 第一个参数,是寄存器 rdi
  • 8E A8 00 00 指的是 lea 第二个参数,是偏移量

因此,只要修改偏移量指向为其准备好的 zh 字符串就行。

libsynocore.so.6 中有大量为错误处理准备的字符串,我们完全可以修改这些字符串来用。

具体操作:

  1. 48 8D 3D 8E A8 00 00 替换成 48 8D 3D 91 AE 00 00
  2. 查找字符串 string_join.c,并替换成 string_joinzh。

替换好后保存,再 SSH 到群晖系统,以管理员身份替换掉原有的 libsynocore.so.6 再重启就可以了。

7 对 “破解群晖File Station中文未按拼音排序问题”的想法;

    1. 我现在手头是 DMS 7.1-42661,可以将 48 8D 3D 8D B9 00 00 替换成 48 8D 3D A2 BE 00 00 ,再查找字符串 string_join.c 替换成 string_joinzh。
      这个每个版本都可能会变,建议稍微学点 IDA 等反汇编工具,再结合我这里说的来自己改。

      1. 大神,我没学过语言、代码这些东西,现在了解关于NAS这些东西,都是跟着网上的内容一点一点抠出来的。能否帮个忙?我把DSM7.0.1-42218里libsynocore.so.7文件扒出来了(lib目录和lib64目录下分别有一个),是否可以帮我找找ucol_open 的 locale 参数设置在哪里,偏移量如何替换?十分感谢!文件我可以通过邮箱发给你。

  1. 你好大佬,我是小白,是要修改libsynocore.so.6这个文件吗?这个文件的路径能回复一下吗?

    1. 位于 /usr/lib/libsynocore.so.6
      你也可以通过搜索来找到它,例如: sudo find /usr -name "libsynocore.so.*"

发表评论

您的电子邮箱地址不会被公开。