diff --git a/HibikiSigPatch/Dependencies/.gitignore b/Dependencies/.gitignore similarity index 100% rename from HibikiSigPatch/Dependencies/.gitignore rename to Dependencies/.gitignore diff --git a/HibikiSigPatch/Dependencies/Detours/include/detours.h b/Dependencies/Detours/include/detours.h similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/include/detours.h rename to Dependencies/Detours/include/detours.h diff --git a/HibikiSigPatch/Dependencies/Detours/include/detver.h b/Dependencies/Detours/include/detver.h similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/include/detver.h rename to Dependencies/Detours/include/detver.h diff --git a/HibikiSigPatch/Dependencies/Detours/include/syelog.h b/Dependencies/Detours/include/syelog.h similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/include/syelog.h rename to Dependencies/Detours/include/syelog.h diff --git a/HibikiSigPatch/Dependencies/Detours/lib/x64/detours.lib b/Dependencies/Detours/lib/x64/detours.lib similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/lib/x64/detours.lib rename to Dependencies/Detours/lib/x64/detours.lib diff --git a/HibikiSigPatch/Dependencies/Detours/lib/x64/detours.pdb b/Dependencies/Detours/lib/x64/detours.pdb similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/lib/x64/detours.pdb rename to Dependencies/Detours/lib/x64/detours.pdb diff --git a/HibikiSigPatch/Dependencies/Detours/lib/x64/syelog.lib b/Dependencies/Detours/lib/x64/syelog.lib similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/lib/x64/syelog.lib rename to Dependencies/Detours/lib/x64/syelog.lib diff --git a/HibikiSigPatch/Dependencies/Detours/lib/x86/detours.lib b/Dependencies/Detours/lib/x86/detours.lib similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/lib/x86/detours.lib rename to Dependencies/Detours/lib/x86/detours.lib diff --git a/HibikiSigPatch/Dependencies/Detours/lib/x86/detours.pdb b/Dependencies/Detours/lib/x86/detours.pdb similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/lib/x86/detours.pdb rename to Dependencies/Detours/lib/x86/detours.pdb diff --git a/HibikiSigPatch/Dependencies/Detours/lib/x86/syelog.lib b/Dependencies/Detours/lib/x86/syelog.lib similarity index 100% rename from HibikiSigPatch/Dependencies/Detours/lib/x86/syelog.lib rename to Dependencies/Detours/lib/x86/syelog.lib diff --git a/Dependencies/Helpers.h b/Dependencies/Helpers.h new file mode 100644 index 0000000..bd28bd5 --- /dev/null +++ b/Dependencies/Helpers.h @@ -0,0 +1,98 @@ +#pragma once + +#define _CONCAT2(x, y) x##y +#define CONCAT2(x, y) _CONCAT(x, y) +#define INSERT_PADDING(length) \ + uint8_t CONCAT2(pad, __LINE__)[length] + +#define ASSERT_OFFSETOF(type, field, offset) \ + static_assert(offsetof(type, field) == offset, "offsetof assertion failed") + +#define ASSERT_SIZEOF(type, size) \ + static_assert(sizeof(type) == size, "sizeof assertion failed") + +#ifdef BASE_ADDRESS +const HMODULE MODULE_HANDLE = GetModuleHandle(nullptr); + +#define ASLR(address) \ + ((size_t)MODULE_HANDLE + (size_t)address - (size_t)BASE_ADDRESS) +#endif + +#define FUNCTION_PTR(returnType, callingConvention, function, location, ...) \ + returnType (callingConvention *function)(__VA_ARGS__) = (returnType(callingConvention*)(__VA_ARGS__))(location) + +#define PROC_ADDRESS(libraryName, procName) \ + GetProcAddress(LoadLibrary(TEXT(libraryName)), procName) + +#define HOOK(returnType, callingConvention, functionName, location, ...) \ + typedef returnType callingConvention _##functionName(__VA_ARGS__); \ + _##functionName* original##functionName = (_##functionName*)(location); \ + returnType callingConvention implOf##functionName(__VA_ARGS__) + +#define INSTALL_HOOK(functionName) \ + do { \ + DetourTransactionBegin(); \ + DetourUpdateThread(GetCurrentThread()); \ + DetourAttach((void**)&original##functionName, implOf##functionName); \ + DetourTransactionCommit(); \ + } while(0) + +#define VTABLE_HOOK(returnType, callingConvention, className, functionName, ...) \ + typedef returnType callingConvention className##functionName(className* This, __VA_ARGS__); \ + className##functionName* original##className##functionName; \ + returnType callingConvention implOf##className##functionName(className* This, __VA_ARGS__) + +#define INSTALL_VTABLE_HOOK(className, object, functionName, functionIndex) \ + do { \ + if (original##className##functionName == nullptr) \ + { \ + original##className##functionName = (*(className##functionName***)object)[functionIndex]; \ + DetourTransactionBegin(); \ + DetourUpdateThread(GetCurrentThread()); \ + DetourAttach((void**)&original##className##functionName, implOf##className##functionName); \ + DetourTransactionCommit(); \ + } \ + } while(0) + +#define WRITE_MEMORY(location, type, ...) \ + do { \ + const type data[] = { __VA_ARGS__ }; \ + DWORD oldProtect; \ + VirtualProtect((void*)(location), sizeof(data), PAGE_EXECUTE_READWRITE, &oldProtect); \ + memcpy((void*)(location), data, sizeof(data)); \ + VirtualProtect((void*)(location), sizeof(data), oldProtect, &oldProtect); \ + } while(0) + +#define WRITE_JUMP(location, function) \ + do { \ + WRITE_MEMORY((size_t)(location), uint8_t, 0x48, 0xB8); \ + WRITE_MEMORY((size_t)(location) + 2, uint64_t, (uint64_t)(function)); \ + WRITE_MEMORY((size_t)(location) + 10, uint8_t, 0xFF, 0xE0); \ + } while(0) + +#define WRITE_CALL(location, function) \ + do { \ + WRITE_MEMORY((size_t)(location), uint8_t, 0x48, 0xB8); \ + WRITE_MEMORY((size_t)(location) + 2, uint64_t, (uint64_t)(function)); \ + WRITE_MEMORY((size_t)(location) + 10, uint8_t, 0xFF, 0xD0); \ + } while(0) + +#define WRITE_NOP(location, count) \ + do { \ + DWORD oldProtect; \ + VirtualProtect((void*)(location), (size_t)(count), PAGE_EXECUTE_READWRITE, &oldProtect); \ + for (size_t i = 0; i < (size_t)(count); i++) \ + *((uint8_t*)(location) + i) = 0x90; \ + VirtualProtect((void*)(location), (size_t)(count), oldProtect, &oldProtect); \ + } while(0) + +inline uint32_t readUnalignedU32(void* memory) +{ + uint8_t* p = (uint8_t*)memory; + return p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); +} + +inline void versionWarning(LPCTSTR modName) +{ + MessageBox(nullptr, TEXT("Failed to initialize! Please make sure that the Hi-Fi-RUSH executable matches the MD5 hash and try again.\nMD5: 5F0E371201CB33D8813D21337526F063"), modName, MB_ICONERROR); +} diff --git a/HibikiSigPatch/Signature.h b/Dependencies/Signature.h similarity index 100% rename from HibikiSigPatch/Signature.h rename to Dependencies/Signature.h diff --git a/HibikiPillarPatch/DllMain.cpp b/HibikiPillarPatch/DllMain.cpp new file mode 100644 index 0000000..c8c2930 --- /dev/null +++ b/HibikiPillarPatch/DllMain.cpp @@ -0,0 +1,26 @@ +#include "Signature.h" + +SIG_SCAN +( + sigPillarbox, + 0x143F283C5, + "\xF6\x41\x30\x01\x45\x0F\x29\x43\x00", + "xxxxxxxx?" +); + +BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) +{ + if (reason == DLL_PROCESS_ATTACH) + { + if (sigValid) + { + WRITE_MEMORY((char*)sigPillarbox() + 3, uint8_t, 0); + } + else + { + versionWarning(TEXT("HibikiPillarPatch")); + } + } + + return TRUE; +} diff --git a/HibikiPillarPatch/HibikiPillarPatch.sln b/HibikiPillarPatch/HibikiPillarPatch.sln new file mode 100644 index 0000000..4b3e00d --- /dev/null +++ b/HibikiPillarPatch/HibikiPillarPatch.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33205.214 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HibikiPillarPatch", "HibikiPillarPatch.vcxproj", "{E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Debug|x64.ActiveCfg = Debug|x64 + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Debug|x64.Build.0 = Debug|x64 + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Debug|x86.ActiveCfg = Debug|Win32 + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Debug|x86.Build.0 = Debug|Win32 + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Release|x64.ActiveCfg = Release|x64 + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Release|x64.Build.0 = Release|x64 + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Release|x86.ActiveCfg = Release|Win32 + {E985DEF2-A8F3-4161-B92E-9F77AA80F7C3}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F118A005-C71C-45D5-890A-6EB72E31DE6E} + EndGlobalSection +EndGlobal diff --git a/HibikiPillarPatch/HibikiPillarPatch.vcxproj b/HibikiPillarPatch/HibikiPillarPatch.vcxproj new file mode 100644 index 0000000..ce2a95b --- /dev/null +++ b/HibikiPillarPatch/HibikiPillarPatch.vcxproj @@ -0,0 +1,188 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {e985def2-a8f3-4161-b92e-9f77aa80f7c3} + HibikiPillarPatch + 10.0 + + + + DynamicLibrary + true + v142 + MultiByte + + + DynamicLibrary + false + v142 + true + MultiByte + + + DynamicLibrary + true + v142 + MultiByte + + + DynamicLibrary + false + v142 + true + MultiByte + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + + + + + + + + + + + + + + + + + + + .asi + + + + Level3 + Disabled + true + true + $(ProjectDir)Dependencies\Detours\include;%(AdditionalIncludeDirectories) + Use + Pch.h + Pch.h + + + Console + detours.lib;syelog.lib;%(AdditionalDependencies) + ..\Dependencies\Detours\lib\x86 + + + + + Level3 + Disabled + true + true + ..\Dependencies;..\Dependencies\Detours\include;%(AdditionalIncludeDirectories) + Use + Pch.h + Pch.h + _WINDLL;%(PreprocessorDefinitions) + + + Console + detours.lib;syelog.lib;%(AdditionalDependencies) + ..\Dependencies\Detours\lib\x64 + + + + + Level3 + MaxSpeed + true + true + true + true + $(ProjectDir)Dependencies\Detours\include;%(AdditionalIncludeDirectories) + Use + Pch.h + Pch.h + stdcpp17 + MultiThreaded + + + Console + true + true + detours.lib;syelog.lib;%(AdditionalDependencies) + ..\Dependencies\Detours\lib\x86 + + + + + Level3 + MaxSpeed + true + true + true + true + ..\Dependencies;..\Dependencies\Detours\include;%(AdditionalIncludeDirectories) + Use + Pch.h + Pch.h + MultiThreaded + stdcpp17 + %(PreprocessorDefinitions) + + + Console + true + true + detours.lib;syelog.lib;%(AdditionalDependencies) + ..\Dependencies\Detours\lib\x64 + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/HibikiPillarPatch/HibikiPillarPatch.vcxproj.filters b/HibikiPillarPatch/HibikiPillarPatch.vcxproj.filters new file mode 100644 index 0000000..28a954a --- /dev/null +++ b/HibikiPillarPatch/HibikiPillarPatch.vcxproj.filters @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/HibikiPillarPatch/Pch.cpp b/HibikiPillarPatch/Pch.cpp new file mode 100644 index 0000000..33274ba --- /dev/null +++ b/HibikiPillarPatch/Pch.cpp @@ -0,0 +1 @@ +#include "Pch.h" diff --git a/HibikiPillarPatch/Pch.h b/HibikiPillarPatch/Pch.h new file mode 100644 index 0000000..81f8636 --- /dev/null +++ b/HibikiPillarPatch/Pch.h @@ -0,0 +1,15 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN + +// Detours +#include +#include + +// Standard library +#include +#include + +// Dependencies +#include +#include diff --git a/HibikiPillarPatch/README.md b/HibikiPillarPatch/README.md new file mode 100644 index 0000000..4d2c45f --- /dev/null +++ b/HibikiPillarPatch/README.md @@ -0,0 +1,2 @@ +# HibikiPillarPatch +An ASI plugin for Hi-Fi RUSH that patches out the letter/pillar boxing that appears under certain circumstances. diff --git a/HibikiSigPatch/DllMain.cpp b/HibikiSigPatch/DllMain.cpp index 8ae4b9b..d0d5473 100644 --- a/HibikiSigPatch/DllMain.cpp +++ b/HibikiSigPatch/DllMain.cpp @@ -1,5 +1,3 @@ -#include "Signature.h" - SIG_SCAN ( sigUTOCSignature, @@ -18,7 +16,7 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) } else { - MessageBox(nullptr, TEXT("Failed to initialize! Please make sure that the Hi-Fi-RUSH executable matches the MD5 hash and try again.\nMD5: 5F0E371201CB33D8813D21337526F063"), TEXT("HibikiSigPatch"), MB_ICONERROR); + versionWarning(TEXT("HibikiSigPatch")); } } diff --git a/HibikiSigPatch/Helpers.h b/HibikiSigPatch/Helpers.h deleted file mode 100644 index 7ea5dae..0000000 --- a/HibikiSigPatch/Helpers.h +++ /dev/null @@ -1,86 +0,0 @@ -#pragma once - -#define _CONCAT2(x, y) x##y -#define CONCAT2(x, y) _CONCAT(x, y) -#define INSERT_PADDING(length) \ - uint8_t CONCAT2(pad, __LINE__)[length] - -#define ASSERT_OFFSETOF(type, field, offset) \ - static_assert(offsetof(type, field) == offset, "offsetof assertion failed") - -#define ASSERT_SIZEOF(type, size) \ - static_assert(sizeof(type) == size, "sizeof assertion failed") - -#ifdef BASE_ADDRESS -const HMODULE MODULE_HANDLE = GetModuleHandle(nullptr); - -#define ASLR(address) \ - ((size_t)MODULE_HANDLE + (size_t)address - (size_t)BASE_ADDRESS) -#endif - -#define FUNCTION_PTR(returnType, callingConvention, function, location, ...) \ - returnType (callingConvention *function)(__VA_ARGS__) = (returnType(callingConvention*)(__VA_ARGS__))(location) - -#define PROC_ADDRESS(libraryName, procName) \ - GetProcAddress(LoadLibrary(TEXT(libraryName)), procName) - -#define HOOK(returnType, callingConvention, functionName, location, ...) \ - typedef returnType callingConvention functionName(__VA_ARGS__); \ - functionName* original##functionName = (functionName*)(location); \ - returnType callingConvention implOf##functionName(__VA_ARGS__) - -#define INSTALL_HOOK(functionName) \ - { \ - DetourTransactionBegin(); \ - DetourUpdateThread(GetCurrentThread()); \ - DetourAttach((void**)&original##functionName, implOf##functionName); \ - DetourTransactionCommit(); \ - } - -#define VTABLE_HOOK(returnType, callingConvention, className, functionName, ...) \ - typedef returnType callingConvention className##functionName(className* This, __VA_ARGS__); \ - className##functionName* original##className##functionName; \ - returnType callingConvention implOf##className##functionName(className* This, __VA_ARGS__) - -#define INSTALL_VTABLE_HOOK(className, object, functionName, functionIndex) \ - { \ - void** addr = &(*(void***)object)[functionIndex]; \ - if (*addr != implOf##className##functionName) \ - { \ - original##className##functionName = (className##functionName*)*addr; \ - DWORD oldProtect; \ - VirtualProtect(addr, sizeof(void*), PAGE_EXECUTE_READWRITE, &oldProtect); \ - *addr = implOf##className##functionName; \ - VirtualProtect(addr, sizeof(void*), oldProtect, &oldProtect); \ - } \ - } - -#define WRITE_MEMORY(location, type, ...) \ - { \ - const type data[] = { __VA_ARGS__ }; \ - DWORD oldProtect; \ - VirtualProtect((void*)(location), sizeof(data), PAGE_EXECUTE_READWRITE, &oldProtect); \ - memcpy((void*)(location), data, sizeof(data)); \ - VirtualProtect((void*)(location), sizeof(data), oldProtect, &oldProtect); \ - } - -#define WRITE_JUMP(location, function) \ - { \ - WRITE_MEMORY(location, uint8_t, 0xE9); \ - WRITE_MEMORY(location + 1, uint32_t, (uint32_t)(function) - (size_t)(location) - 5); \ - } - -#define WRITE_CALL(location, function) \ - { \ - WRITE_MEMORY(location, uint8_t, 0xE8); \ - WRITE_MEMORY(location + 1, uint32_t, (uint32_t)(function) - (size_t)(location) - 5); \ - } - -#define WRITE_NOP(location, count) \ - { \ - DWORD oldProtect; \ - VirtualProtect((void*)(location), (size_t)(count), PAGE_EXECUTE_READWRITE, &oldProtect); \ - for (size_t i = 0; i < (size_t)(count); i++) \ - *((uint8_t*)(location) + i) = 0x90; \ - VirtualProtect((void*)(location), (size_t)(count), oldProtect, &oldProtect); \ - } \ No newline at end of file diff --git a/HibikiSigPatch/HibikiSigPatch.vcxproj b/HibikiSigPatch/HibikiSigPatch.vcxproj index 72f7167..e16bae8 100644 --- a/HibikiSigPatch/HibikiSigPatch.vcxproj +++ b/HibikiSigPatch/HibikiSigPatch.vcxproj @@ -94,7 +94,7 @@ Disabled true true - $(ProjectDir)Dependencies\Detours\include;%(AdditionalIncludeDirectories) + ..\Dependencies\Detours\include;%(AdditionalIncludeDirectories) Use Pch.h Pch.h @@ -102,7 +102,7 @@ Console detours.lib;syelog.lib;%(AdditionalDependencies) - $(ProjectDir)Dependencies\Detours\lib\x86 + ..\Dependencies\Detours\lib\x86 @@ -111,7 +111,7 @@ Disabled true true - $(ProjectDir)Dependencies\Detours\include;%(AdditionalIncludeDirectories) + ..\Dependencies;..\Dependencies\Detours\include;%(AdditionalIncludeDirectories) Use Pch.h Pch.h @@ -119,7 +119,7 @@ Console detours.lib;syelog.lib;%(AdditionalDependencies) - $(ProjectDir)Dependencies\Detours\lib\x64 + ..\Dependencies\Detours\lib\x64 @@ -130,7 +130,7 @@ true true true - $(ProjectDir)Dependencies\Detours\include;%(AdditionalIncludeDirectories) + ..\Dependencies\Detours\include;%(AdditionalIncludeDirectories) Use Pch.h Pch.h @@ -142,7 +142,7 @@ true true detours.lib;syelog.lib;%(AdditionalDependencies) - $(ProjectDir)Dependencies\Detours\lib\x86 + ..\Dependencies\Detours\lib\x86 @@ -153,7 +153,7 @@ true true true - $(ProjectDir)Dependencies\Detours\include;%(AdditionalIncludeDirectories) + ..\Dependencies;..\Dependencies\Detours\include;%(AdditionalIncludeDirectories) Use Pch.h Pch.h @@ -166,16 +166,11 @@ true true detours.lib;syelog.lib;%(AdditionalDependencies) - $(ProjectDir)Dependencies\Detours\lib\x64 + ..\Dependencies\Detours\lib\x64 - - - - - @@ -186,16 +181,6 @@ Create - - - - - - - - - - diff --git a/HibikiSigPatch/HibikiSigPatch.vcxproj.filters b/HibikiSigPatch/HibikiSigPatch.vcxproj.filters index 8accafe..28a954a 100644 --- a/HibikiSigPatch/HibikiSigPatch.vcxproj.filters +++ b/HibikiSigPatch/HibikiSigPatch.vcxproj.filters @@ -1,63 +1,10 @@  - - - Dependencies\Detours\include - - - Dependencies\Detours\include - - - Dependencies\Detours\include - - - - - {f5697e5c-9474-4c63-a92d-e047fc6692f6} - - - {85ba7ea6-f22a-4697-9548-62c26d3be628} - - - {09dbd0a7-6765-4610-9214-041ab869c477} - - - {93708190-5906-4db7-b13b-dff27f636afb} - - - {18983a62-1a77-4f06-b903-ba42ba572101} - - - {737983fc-3a8e-4a50-b3bc-7bd1e5145ad5} - - - - - Dependencies\Detours\lib\x64 - - - Dependencies\Detours\lib\x64 - - - Dependencies\Detours\lib\x86 - - - Dependencies\Detours\lib\x86 - - - - - Dependencies\Detours\lib\x64 - - - Dependencies\Detours\lib\x86 - - \ No newline at end of file diff --git a/HibikiSigPatch/Pch.h b/HibikiSigPatch/Pch.h index b2987a8..81f8636 100644 --- a/HibikiSigPatch/Pch.h +++ b/HibikiSigPatch/Pch.h @@ -2,10 +2,14 @@ #define WIN32_LEAN_AND_MEAN +// Detours #include #include +// Standard library #include #include -#include "Helpers.h" \ No newline at end of file +// Dependencies +#include +#include diff --git a/HibikiSigPatch/README.md b/HibikiSigPatch/README.md new file mode 100644 index 0000000..b31e325 --- /dev/null +++ b/HibikiSigPatch/README.md @@ -0,0 +1,2 @@ +# HibikiSigPatch +An ASI plugin for Hi-Fi RUSH that implements Narknon and Praydog's [UTOC Signature Bypass](https://www.nexusmods.com/hifirush/mods/1) exe patch. diff --git a/README.md b/README.md index 218c164..1bcd701 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# HibikiSigPatch -An ASI plugin for Hi-Fi RUSH that implements Narknon and Praydog's [UTOC Signature Bypass](https://www.nexusmods.com/hifirush/mods/1) exe patch. +# HibikiPatches +A repository hosting ASI plugins for Hi-Fi RUSH. -Requires [Ultimate ASI Loader](https://github.com/ThirteenAG/Ultimate-ASI-Loader) renamed to `dsound.dll`. +All of these require [Ultimate ASI Loader](https://github.com/ThirteenAG/Ultimate-ASI-Loader) renamed to `dsound.dll`.