From bdee540535a3a04c038ad8f6ee7175ad0bc32f7a Mon Sep 17 00:00:00 2001 From: Blu3train Date: Sat, 22 Apr 2023 11:49:13 +0200 Subject: [PATCH 01/11] KiriKiriZ_msvc engine hooks --- texthook/engine/engine.cc | 74 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index 61d5140..0c0507b 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1439,11 +1439,83 @@ bool InsertKiriKiriZHook2() return true; } +bool KiriKiriZ_msvcFilter(LPVOID data, DWORD *size, HookParam *, BYTE) +{ + auto text = reinterpret_cast(data); + auto len = reinterpret_cast(size); + static std::wstring prevText; + + if (!*len) + return false; + text[*len/sizeof(wchar_t)] = L'\0'; // clean text + + if (!prevText.compare(text)) + return false; + prevText = text; + + if (cpp_wcsnstr(text, L"%", *len/sizeof(wchar_t))) { + WideStringFilterBetween(text, len, L"%", 1, L";", 1); + } + return true; +} + +bool InsertKiriKiriZHook_msvc() +{ + //by Blu3train + auto module = GetModuleHandleW(L"textrender.dll"); + if (!module) { + ConsoleOutput("vnreng:KiriKiriZ_msvc: textrender.dll does not exist"); + return false; + } + + const BYTE pattern[] = { +/* + 0xFF, 0xD2, + 0x88, 0x44, 0x24, 0x18, + 0x8B, 0x44, 0x24, 0x10, + 0x85, 0xC0, + 0x74, 0x0B, + 0x8D, 0x4C, 0x24, 0x18, + 0x51, + 0x50, + 0xE8, 0xD3, 0xE4, 0xFF, 0xFF, + 0xB0, 0x01, + 0xC3 +*/ + 0xFF, XX, + 0x88, XX, XX, XX, + XX, XX, XX, XX, + XX, XX, + 0x74, XX, + XX, XX, XX, XX, + XX, + XX, + 0xE8, XX, XX, XX, XX, + 0xB0, 0x01, + 0xC3 + }; + enum { addr_offset = -0x0B }; + + ULONG addr = MemDbg::findBytes(pattern, sizeof(pattern), (DWORD)module, Util::QueryModuleLimits(module).second); + if (!addr) { + ConsoleOutput("vnreng:KiriKiriZ_msvc: pattern not found"); + return false; + } + HookParam hp = {}; + hp.address = addr + addr_offset; + hp.offset = pusha_eax_off - 4; + hp.type = USING_UNICODE | USING_STRING; + hp.filter_fun = KiriKiriZ_msvcFilter; + ConsoleOutput("Textractor: INSERT KiriKiriZ_msvc"); + NewHook(hp, "KiriKiriZ_msvc"); + return true; +} + } // unnamed namespace // jichi 1/30/2015: Do KiriKiriZ2 first, which might insert to the same location as KiriKiri1. bool InsertKiriKiriZHook() -{ return InsertKiriKiriZHook2() || InsertKiriKiriZHook1(); } +{ return InsertKiriKiriZHook_msvc() || InsertKiriKiriZHook2() || InsertKiriKiriZHook1(); } /******************************************************************************************** BGI hook: From eeeba7841b4591609cc04dd03d58c749f12fa6a2 Mon Sep 17 00:00:00 2001 From: Blu3train Date: Sat, 22 Apr 2023 12:00:42 +0200 Subject: [PATCH 02/11] Removed useless console text --- texthook/engine/engine.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index 0c0507b..0f787e0 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1463,10 +1463,8 @@ bool InsertKiriKiriZHook_msvc() { //by Blu3train auto module = GetModuleHandleW(L"textrender.dll"); - if (!module) { - ConsoleOutput("vnreng:KiriKiriZ_msvc: textrender.dll does not exist"); + if (!module) return false; - } const BYTE pattern[] = { /* From 4e61f3bfd2fae333e015ee5c575163c0a4fd3f68 Mon Sep 17 00:00:00 2001 From: Blu3train Date: Mon, 24 Apr 2023 22:49:39 +0200 Subject: [PATCH 03/11] Added example games and commented the assembly code --- texthook/engine/engine.cc | 67 +++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index 0f787e0..3ca6fe9 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1462,37 +1462,58 @@ bool KiriKiriZ_msvcFilter(LPVOID data, DWORD *size, HookParam *, BYTE) bool InsertKiriKiriZHook_msvc() { //by Blu3train + /* + * Sample games: + * https://vndb.org/r76735 + * https://vndb.org/v22020 + * https://vndb.org/v26052 + * https://vndb.org/v17763 + * https://vndb.org/v15538 + * https://vndb.org/v18713 + * https://vndb.org/v19385 + * https://vndb.org/v18148 + * https://vndb.org/v19841 + * https://vndb.org/v24717 + * https://vndb.org/v30458 + * https://vndb.org/v33036 + * https://vndb.org/v27448 + * https://vndb.org/r67327 + */ auto module = GetModuleHandleW(L"textrender.dll"); if (!module) return false; const BYTE pattern[] = { /* - 0xFF, 0xD2, - 0x88, 0x44, 0x24, 0x18, - 0x8B, 0x44, 0x24, 0x10, - 0x85, 0xC0, - 0x74, 0x0B, - 0x8D, 0x4C, 0x24, 0x18, - 0x51, - 0x50, - 0xE8, 0xD3, 0xE4, 0xFF, 0xFF, - 0xB0, 0x01, - 0xC3 +textrender.dll+BE39 - 8B 4C 24 2C - mov ecx,[esp+2C] << hook here +textrender.dll+BE3D - 50 - push eax +textrender.dll+BE3E - 8B 44 24 2C - mov eax,[esp+2C] +textrender.dll+BE42 - 8B 10 - mov edx,[eax] +textrender.dll+BE44 - FF D2 - call edx << start pattern +textrender.dll+BE46 - 88 44 24 18 - mov [esp+18],al +textrender.dll+BE4A - 8B 44 24 10 - mov eax,[esp+10] +textrender.dll+BE4E - 85 C0 - test eax,eax +textrender.dll+BE50 - 74 0B - je textrender.dll+BE5D +textrender.dll+BE52 - 8D 4C 24 18 - lea ecx,[esp+18] +textrender.dll+BE56 - 51 - push ecx +textrender.dll+BE57 - 50 - push eax +textrender.dll+BE58 - E8 33E5FFFF - call textrender.dll+A390 +textrender.dll+BE5D - B0 01 - mov al,01 +textrender.dll+BE5F - C3 - ret */ - 0xFF, XX, - 0x88, XX, XX, XX, - XX, XX, XX, XX, - XX, XX, - 0x74, XX, - XX, XX, XX, XX, - XX, - XX, - 0xE8, XX, XX, XX, XX, - 0xB0, 0x01, - 0xC3 + 0xFF, XX, + 0x88, XX, XX, XX, + XX, XX, XX, XX, + XX, XX, + 0x74, XX, + XX, XX, XX, XX, + XX, + XX, + 0xE8, XX, XX, XX, XX, + 0xB0, 0x01, + 0xC3 }; - enum { addr_offset = -0x0B }; + enum { addr_offset = -0x0B }; // 8B 4C 24 2C - mov ecx,[esp+2C] << hook here ULONG addr = MemDbg::findBytes(pattern, sizeof(pattern), (DWORD)module, Util::QueryModuleLimits(module).second); if (!addr) { From 3543549da2ec3f09d58ed228df42a65d9d1347fc Mon Sep 17 00:00:00 2001 From: Blu3train Date: Sun, 21 May 2023 00:24:13 +0200 Subject: [PATCH 04/11] Added filter \\n and fix WideStringCharReplacer function --- texthook/engine/engine.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index 3ca6fe9..1827117 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -363,7 +363,7 @@ void WideStringCharReplacer(wchar_t *str, size_t *size, const wchar_t *src, size curlen = len - (cur - str); if (curlen == 0) break; - ::memmove(cur, cur + srclen, 2 * curlen); + ::memmove(cur, cur + srclen -1, 2 * curlen); } *size = len * 2; } @@ -1453,6 +1453,7 @@ bool KiriKiriZ_msvcFilter(LPVOID data, DWORD *size, HookParam *, BYTE) return false; prevText = text; + WideStringCharReplacer(text, len, L"\\n", 2, L' '); if (cpp_wcsnstr(text, L"%", *len/sizeof(wchar_t))) { WideStringFilterBetween(text, len, L"%", 1, L";", 1); } From 0f5c3c8b5f1422948912fc7bcee10154cba2ec74 Mon Sep 17 00:00:00 2001 From: Blu3train Date: Thu, 3 Aug 2023 18:36:22 +0200 Subject: [PATCH 05/11] Some KiriKiriZ VNs that have the msvc function use the old text functions --- texthook/engine/engine.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index 1827117..b55b24e 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1535,7 +1535,10 @@ textrender.dll+BE5F - C3 - ret // jichi 1/30/2015: Do KiriKiriZ2 first, which might insert to the same location as KiriKiri1. bool InsertKiriKiriZHook() -{ return InsertKiriKiriZHook_msvc() || InsertKiriKiriZHook2() || InsertKiriKiriZHook1(); } +{ + bool ok = InsertKiriKiriZHook_msvc(); + return InsertKiriKiriZHook2() || InsertKiriKiriZHook1() || ok; +} /******************************************************************************************** BGI hook: From 1318c2f49031de3c2555e93807364dd40da542f9 Mon Sep 17 00:00:00 2001 From: Blu3train Date: Tue, 29 Aug 2023 23:03:42 +0200 Subject: [PATCH 06/11] KiriKiriZ3 hook --- texthook/engine/engine.cc | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index b55b24e..4974c0d 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1439,6 +1439,53 @@ bool InsertKiriKiriZHook2() return true; } +bool KiriKiriZ3Filter(LPVOID data, DWORD *size, HookParam *, BYTE) +{ + auto text = reinterpret_cast(data); + auto len = reinterpret_cast(size); + + WideCharFilter(text, len, L'\x000A'); + if (cpp_wcsnstr(text, L"%", *len/sizeof(wchar_t))) { + WideStringFilterBetween(text, len, L"%", 1, L"%", 1); + } + + return true; +} + +bool InsertKiriKiriZHook3() +{ + //by Blu3train + /* + * Sample games: + * https://vndb.org/r109253 + */ + const BYTE bytes[] = { + 0x66, 0x83, 0x3F, 0x00, // cmp word ptr [edi],00 << hook here + 0x75, 0x06, // jne Imouto_no_Seiiki.exe+195C1 + 0x33, 0xDB, // xor ebx,ebx + 0x89, 0x1E, // mov [esi],ebx + 0xEB, 0x1B // jmp Imouto_no_Seiiki.exe+195DC + }; + + ULONG range = min(processStopAddress - processStartAddress, MAX_REL_ADDR); + ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStartAddress + range); + if (!addr) { + ConsoleOutput("vnreng:KiriKiriZ3: pattern not found"); + return false; + } + + HookParam hp = {}; + hp.address = addr; + hp.offset = pusha_edi_off -4; + hp.split = pusha_edx_off -4; + hp.type = NO_CONTEXT | USING_UNICODE | USING_STRING | USING_SPLIT; + hp.filter_fun = KiriKiriZ3Filter; + ConsoleOutput("vnreng: INSERT KiriKiriZ3"); + NewHook(hp, "KiriKiriZ3"); + + return true; +} + bool KiriKiriZ_msvcFilter(LPVOID data, DWORD *size, HookParam *, BYTE) { auto text = reinterpret_cast(data); @@ -1537,6 +1584,7 @@ textrender.dll+BE5F - C3 - ret bool InsertKiriKiriZHook() { bool ok = InsertKiriKiriZHook_msvc(); + ok = InsertKiriKiriZHook3() || ok; return InsertKiriKiriZHook2() || InsertKiriKiriZHook1() || ok; } From fce76a504056c38001d63ebb7b4d53be80b1bc30 Mon Sep 17 00:00:00 2001 From: Blu3train Date: Sun, 3 Sep 2023 22:27:00 +0200 Subject: [PATCH 07/11] KiriKiriZ4 hook VN r111774 --- texthook/engine/engine.cc | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index 4974c0d..e1d371f 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1486,6 +1486,54 @@ bool InsertKiriKiriZHook3() return true; } +bool KiriKiriZ4Filter(LPVOID data, DWORD *size, HookParam *, BYTE) +{ + auto text = reinterpret_cast(data); + auto len = reinterpret_cast(size); + + if (text[0] == L' ' || text[0] == L'@' || text[0] == L'[' || text[0] == L']') + return false; + + if (cpp_wcsnstr(text, L"[", *len/sizeof(wchar_t))) { + WideStringCharReplacer(text, len, L"[r]", 3, L' '); + WideStringFilterBetween(text, len, L"[", 1, L"]", 1); + } + + return true; +} + +bool InsertKiriKiriZHook4() +{ + //by Blu3train + /* + * Sample games: + * https://vndb.org/r111774 + */ + const BYTE bytes[] = { + 0xE8, 0xE8, 0xBA, 0xFE, 0xFF, // call Shironagasu.exe+227B0 << hook here + 0xC7, 0x45, 0xFC, XX4, // mov [ebp-04],00000000 + 0xC7, 0x45, 0xF0, XX4, // mov [ebp-10],00000001 + 0x8B, 0x45, 0x08 // mov eax,[ebp+08] + }; + + ULONG range = min(processStopAddress - processStartAddress, MAX_REL_ADDR); + ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStartAddress + range); + if (!addr) { + ConsoleOutput("vnreng:KiriKiriZ4: pattern not found"); + return false; + } + + HookParam hp = {}; + hp.address = addr; + hp.offset = pusha_ebx_off -4; + hp.type = NO_CONTEXT | USING_UNICODE | USING_STRING; + hp.filter_fun = KiriKiriZ4Filter; + ConsoleOutput("vnreng: INSERT KiriKiriZ4"); + NewHook(hp, "KiriKiriZ4"); + + return true; +} + bool KiriKiriZ_msvcFilter(LPVOID data, DWORD *size, HookParam *, BYTE) { auto text = reinterpret_cast(data); @@ -1585,6 +1633,7 @@ bool InsertKiriKiriZHook() { bool ok = InsertKiriKiriZHook_msvc(); ok = InsertKiriKiriZHook3() || ok; + ok = InsertKiriKiriZHook4() || ok; return InsertKiriKiriZHook2() || InsertKiriKiriZHook1() || ok; } From 81d65a9702d270c223b3aaf9de09b151ea312cb4 Mon Sep 17 00:00:00 2001 From: Blu3train Date: Mon, 4 Sep 2023 19:23:42 +0200 Subject: [PATCH 08/11] KiriKiriZ4 hook improved filter for VN v38021 --- texthook/engine/engine.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index e1d371f..f8e0419 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1491,7 +1491,7 @@ bool KiriKiriZ4Filter(LPVOID data, DWORD *size, HookParam *, BYTE) auto text = reinterpret_cast(data); auto len = reinterpret_cast(size); - if (text[0] == L' ' || text[0] == L'@' || text[0] == L'[' || text[0] == L']') + if (text[0] == L' ' || text[0] == L':' || text[0] == L'@' || text[0] == L'[' || text[0] == L']') return false; if (cpp_wcsnstr(text, L"[", *len/sizeof(wchar_t))) { @@ -1508,6 +1508,7 @@ bool InsertKiriKiriZHook4() /* * Sample games: * https://vndb.org/r111774 + * https://vndb.org/v38021 */ const BYTE bytes[] = { 0xE8, 0xE8, 0xBA, 0xFE, 0xFF, // call Shironagasu.exe+227B0 << hook here From 945cc0197eab7311ed795ce4dd4a629edd24749e Mon Sep 17 00:00:00 2001 From: Blu3train Date: Tue, 23 Jan 2024 19:05:50 +0100 Subject: [PATCH 09/11] KiriKiriZ5 hook VN v16193 --- texthook/engine/engine.cc | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index f8e0419..6063abd 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1627,6 +1627,56 @@ textrender.dll+BE5F - C3 - ret return true; } +bool KiriKiriZ5Filter(LPVOID data, DWORD *size, HookParam *, BYTE) +{ + auto text = reinterpret_cast(data); + auto len = reinterpret_cast(size); + + if (cpp_wcsnstr(text, L"=", *len/sizeof(wchar_t))) + return false; + + if (cpp_wcsnstr(text, L"[", *len/sizeof(wchar_t))) + WideStringFilterBetween(text, len, L"[", 1, L"]", 1); + WideStringCharReplacer(text, len, L"\\n", 2, L' '); + WideStringFilter(text, len, L"\\x", 2); + + return true; +} + +bool InsertKiriKiriZHook5() +{ + //by Blu3train + /* + * Sample games: + * https://vndb.org/v16193 + */ + const BYTE bytes[] = { + 0x66, 0x8B, 0x04, 0x43 // mov ax,[ebx+eax*2] << hook here + }; + + ULONG range = min(processStopAddress - processStartAddress, MAX_REL_ADDR); + ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStartAddress + range); + if (!addr) { + ConsoleOutput("vnreng:KiriKiriZ5: pattern not found"); + return false; + } + + HookParam hp = {}; + hp.address = addr; + hp.offset = pusha_ebx_off -4; + hp.type = NO_CONTEXT | USING_UNICODE | USING_STRING; + hp.text_fun = [](DWORD esp_base, HookParam*, BYTE, DWORD *data, DWORD *split, DWORD* len) + { + if (regof(eax, esp_base) == 1 ) + *len = wcslen((wchar_t*)*data) * 2; + }; + hp.filter_fun = KiriKiriZ5Filter; + ConsoleOutput("vnreng: INSERT KiriKiriZ5"); + NewHook(hp, "KiriKiriZ5"); + + return true; +} + } // unnamed namespace // jichi 1/30/2015: Do KiriKiriZ2 first, which might insert to the same location as KiriKiri1. @@ -1635,6 +1685,7 @@ bool InsertKiriKiriZHook() bool ok = InsertKiriKiriZHook_msvc(); ok = InsertKiriKiriZHook3() || ok; ok = InsertKiriKiriZHook4() || ok; + ok = InsertKiriKiriZHook5() || ok; return InsertKiriKiriZHook2() || InsertKiriKiriZHook1() || ok; } From ca6cc909d976e3c4aac541d368fa76693fbac92b Mon Sep 17 00:00:00 2001 From: Blu3train Date: Fri, 26 Jan 2024 01:51:59 +0100 Subject: [PATCH 10/11] fix Hijack ERROR for some kirikiri engine on V8Hook check --- texthook/engine/match32.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/texthook/engine/match32.cc b/texthook/engine/match32.cc index fffc4c7..1352ac9 100644 --- a/texthook/engine/match32.cc +++ b/texthook/engine/match32.cc @@ -65,7 +65,8 @@ bool DeterminePCEngine() else for (int i = 0; i < 50; ++i) if (HMODULE module = GetModuleHandleW((DXVersion + L"_" + std::to_wstring(i)).c_str())) PcHooks::hookD3DXFunctions(module); - for (HMODULE module : { (HMODULE)processStartAddress, GetModuleHandleW(L"node.dll"), GetModuleHandleW(L"nw.dll") }) + if (!Util::SearchResourceString(L"TVP(KIRIKIRI)")) // Hijack ERROR for some kirikiri engine on V8Hook check + for (HMODULE module : { (HMODULE)processStartAddress, GetModuleHandleW(L"node.dll"), GetModuleHandleW(L"nw.dll") }) if (GetProcAddress(module, "?Write@String@v8@@QBEHPAGHHH@Z")) return InsertV8Hook(module); if (InsertMonoHooks()) { From 4c81955d06c6237a24f76ed9e4fcf50bd00a3a81 Mon Sep 17 00:00:00 2001 From: Blu3train Date: Fri, 2 Feb 2024 18:32:24 +0100 Subject: [PATCH 11/11] KiriKiriZ6 engine hook --- texthook/engine/engine.cc | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/texthook/engine/engine.cc b/texthook/engine/engine.cc index 6063abd..66434b3 100644 --- a/texthook/engine/engine.cc +++ b/texthook/engine/engine.cc @@ -1677,6 +1677,56 @@ bool InsertKiriKiriZHook5() return true; } +bool KiriKiriZ6Filter(LPVOID data, DWORD *size, HookParam *, BYTE) +{ + auto text = reinterpret_cast(data); + auto len = reinterpret_cast(size); + + WideCharReplacer(text, len, L'/', L' '); // \x0FFF + if (cpp_wcsnstr(text, L"$r:", *len/sizeof(wchar_t))){ + WideStringFilter(text, len, L"$r:", 3); + WideStringFilterBetween(text, len, L",", 1, L";", 1); + } + + return true; +} + +bool InsertKiriKiriZHook6() +{ + //by Blu3train + /* + * Sample games: + * https://vndb.org/v48419 + */ + const BYTE bytes[] = { + 0xCC, // int 3 + 0x55, // push ebp << hook here + 0x8B, 0xEC, // mov ebp,esp + 0x51, // push ecx + 0x53, // push ebx + 0x56, // push esi + 0x89, 0x4D, 0xFC // mov [ebp-04],ecx + }; + + ULONG range = min(processStopAddress - processStartAddress, MAX_REL_ADDR); + ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStartAddress + range); + if (!addr) { + ConsoleOutput("vnreng:KiriKiriZ6: pattern not found"); + return false; + } + + HookParam hp = {}; + hp.address = addr + 1; + hp.offset = pusha_esi_off -4; + hp.split = 19 * 4; //arg 19 + hp.type = USING_UNICODE | USING_STRING | USING_SPLIT; + hp.filter_fun = KiriKiriZ6Filter; + ConsoleOutput("vnreng: INSERT KiriKiriZ6"); + NewHook(hp, "KiriKiriZ6"); + + return true; +} + } // unnamed namespace // jichi 1/30/2015: Do KiriKiriZ2 first, which might insert to the same location as KiriKiri1. @@ -1686,6 +1736,7 @@ bool InsertKiriKiriZHook() ok = InsertKiriKiriZHook3() || ok; ok = InsertKiriKiriZHook4() || ok; ok = InsertKiriKiriZHook5() || ok; + ok = InsertKiriKiriZHook6() || ok; return InsertKiriKiriZHook2() || InsertKiriKiriZHook1() || ok; }