diff --git a/LunaHook/engine32/WillPlus.cpp b/LunaHook/engine32/WillPlus.cpp index 55b6a02..983e97d 100644 --- a/LunaHook/engine32/WillPlus.cpp +++ b/LunaHook/engine32/WillPlus.cpp @@ -1696,4 +1696,22 @@ bool WillPlus::attach_function() { succ|=_xxx(); return succ; +} + + + +bool Willold::attach_function() { + //https://vndb.org/v17755 + //凌辱鬼 + auto addr=MemDbg::findLongJumpAddress((ULONG)TextOutA,processStartAddress,processStopAddress); + if(addr==0)return false; + addr=MemDbg::findNearCallAddress(addr,processStartAddress,processStopAddress); + if(addr==0)return false; + addr=findfuncstart(addr,0x200); + if(addr==0)return false; + HookParam hp; + hp.address=addr; + hp.type=USING_CHAR|CODEC_ANSI_BE; + hp.offset=get_stack(1); + return NewHook(hp,"will"); } \ No newline at end of file diff --git a/LunaHook/engine32/WillPlus.h b/LunaHook/engine32/WillPlus.h index 612fbcb..61838d3 100644 --- a/LunaHook/engine32/WillPlus.h +++ b/LunaHook/engine32/WillPlus.h @@ -8,4 +8,24 @@ class WillPlus:public ENGINE{ check_by_target=check_by_list{L"Rio.arc",L"Chip*.arc"}; }; bool attach_function(); +}; + +class Willold:public ENGINE{ + public: + Willold(){ + //https://vndb.org/v17755 + //凌辱鬼 + check_by=CHECK_BY::CUSTOM; + check_by_target=[](){ + auto _={L"*.BIN",L"DATA\\*.ENV",L"DATA\\*.WBP"}; + auto checkfile= std::all_of(_.begin(),_.end(),Util::CheckFile); + if(checkfile){ + auto __=R"(Software\WILL\)"; + checkfile&=!!MemDbg::findBytes(__,strlen(__),processStartAddress,processStopAddress); + } + return checkfile; + }; + + } + bool attach_function(); }; \ No newline at end of file diff --git a/LunaHook/enginecollection32.cpp b/LunaHook/enginecollection32.cpp index 4ad4778..c724976 100644 --- a/LunaHook/enginecollection32.cpp +++ b/LunaHook/enginecollection32.cpp @@ -302,7 +302,8 @@ std::vector check_engines(){ new ScrPlayer, new ElfFunClubFinal, new Aksys, - new Siglusold + new Siglusold, + new Willold }; }