#include"ENTERGRAM.h" bool ENTERGRAMfilter(void* data, size_t* size, HookParam* hp) { auto text = reinterpret_cast(data); std::wstring str =std::wstring(text,*size / 2); std::wregex reg1(L"\\|(.*?)\x300a(.*?)\x300b"); std::wstring result1 = std::regex_replace(str, reg1, L"$1"); std::wregex reg2(L"\x3000|\n"); std::wstring result2 = std::regex_replace(result1, reg2, L""); *size = (result2.size()) * 2; wcscpy(text, result2.c_str()); return true; }; bool InsertENTERGRAM() { //https://vndb.org/v40521 //[240125][1208048][エンターグラム] すだまリレイシヨン パッケージ版 (mdf+mds) const BYTE BYTES[] = { 0x48,0x8B,0x43,0x38, 0x48,0x8D,0x7C,0x24,0x30, 0x48,0x8B,0x74,0x24,0x20, 0x48,0x85,0xC0, 0x48,0x8B,0xCD, 0x48,0x89,0x6C,0x24,0x40, 0x48,0x0F,0x45,0xF8, }; auto addr=MemDbg::findBytes(BYTES, sizeof(BYTES), processStartAddress, processStopAddress); if(addr==0)return false; HookParam hp; hp.address=addr+14; hp.type=USING_STRING|CODEC_UTF16|NO_CONTEXT; hp.filter_fun=ENTERGRAMfilter; hp.offset=get_reg(regs::rsi); return NewHook(hp,"ENTERGRAM"); } bool ENTERGRAM::attach_function() { return InsertENTERGRAM(); }