1803兼容噩梦探究

一些Galgame不工作的原因

win10不是对Galgame不友好,而是对汉化补丁不友好。

https://bbs.zdfx.net/thread-342828-1-1.html

https://bbs.zdfx.net/forum.php?mod=viewthread&tid=342828&highlight=1803

虽然1803是改了NLS的一部分东西。但导致汉化不工作的大部分都是仅有1个Exe或者1个Exe+多个数据文件的。
这种玩意很可能是由于这类汉化使用了捆绑壳,而壳对于QueryFile的操作拦截依赖NtQueryDirectoryFile。在win10 RS3(1709)版本的时候,M$新增了一个Native API,NtQueryDirectoryFileEx。但不知出于什么原因,该API仅仅用于Ring0层ZwQueryDirectoryFileEx,被用于DDK/WDK开发(Ring0和Ring3的函数定义结构相同,但内核层和用户层的实现并不相同)。从1803开始,所有Win32SDK中FindxxxFile在NT内部Ring3下使用NtQueryDirectoryFileEx取代了NtQueryDirectoryFile。导致之前所有依赖NtQueryDirectoryFile的壳都无法拦截QueryFile操作。游戏本体无法获得被附加文件的信息,就会自动加载原始文件。
说到底还是不遵守SDK开发的问题,SDK API到Native APIs的调用关系从来没明面上写在MSDN里,M$一声不吭的改你还能把M$大楼炸了不成。
参考:
ReactOS-FindFirstFileExW实现

代码节选:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Status = NtQueryDirectoryFile(hDirectory,

879 NULL, NULL, NULL,

880 &IoStatusBlock,

881 DirInfo.DirInfo, // == &DirectoryInfo

882 sizeof(DirectoryInfo),

883 (fInfoLevelId == FindExInfoStandard

884 ? FileBothDirectoryInformation

885 : FileFullDirectoryInformation),

886 TRUE, /* Return a single entry */

887 &FilePattern,

888 TRUE);

889

890 RtlFreeHeap(RtlGetProcessHeap(), 0, NtPathBuffer);

891

892 if (!NT_SUCCESS(Status))

893 {

894 NtClose(hDirectory);

895 BaseSetLastNTError(Status);

896 return INVALID_HANDLE_VALUE;

897 }

赠品:
临时性三无工具
链接: /s/17TX8Z6_m-urVVv5X7T4yWw 密码: 178v
Source:github.com/jszhtian/Fragment/blob/master/NTQDFPatch/NTQDFPatch/dllmain.cpp


img

img

1569605762571

BoxLoader V2:百度
下面是测试结果:

测试可用

大图书馆的牧羊人 本篇 (需使用BoxLoader V2版)
清澄如鏡之水面上
美好的每一天
妹调教日记 本篇
魔法使之夜

测试不可用

姫狩 魔王再临
战女神ZERO
Tiny Dungeon ~BLACK and WHITE~
夏空彼方

有的不是由于NtQueryDirectoryFileEx导致的乱码。比如之前12EVE的那种。那个是由于福音只Hook了CreateFontIndirect.这个玩意在Win8之前是依赖CreateFontIndirect实现CreateFont。8.1之后两个API分家。而且这个补丁默认忽略了全部NtQueryDirectoryFileEx的Flag设置。

大图书馆的牧羊人能工作。前提是你目录里别有中文。

TD1 k1的补丁是Themida的壳。阻止hook api。这玩意自行搞定。夏空汉化不是正常的使用ks文件,而是使用的动态替换patch.xp3里的txt到ks里。与NtQueryDirectoryFileEx API无关。

可否實現NtQueryDirectoryFileEx設置也包括在內的啟動程序? 像战女神ZERO是升級後就點不開;大图书馆是升級後玩到第一個立繪就閃退。

当时作为清澄如鏡之水面上这个的临时修补方案。并没有测试所有程序的兼容性。图书馆本篇的BGI在加载解压到临时目录的dll时可能出现问题。导致hook失败。试下新的s/11TVPzU-PKtbbH9NAGrYQlQ

把注入工具换成Xenos的话,TD1也可以工作,具体代码看:github.com/DarthTon/Xenos/releases


之前我还幻想在win7和bug10之间找个平衡点,最好是win8和win8.1,可惜这两个都不是M$的亲儿子,如下。

1569636993228