#include"EME.h" /******************************************************************************************** EMEHook hook: (Contributed by Freaka) EmonEngine is used by LoveJuice company and TakeOut. Earlier builds were apparently called Runrun engine. String parsing varies a lot depending on the font settings and speed setting. E.g. without antialiasing (which very early versions did not have) uses TextOutA, fast speed triggers different functions then slow/normal. The user can set his own name and some odd control characters are used (0x09 for line break, 0x0D for paragraph end) which is parsed and put together on-the-fly while playing so script can't be read directly. ********************************************************************************************/ bool InsertEMEHook() { ULONG addr = MemDbg::findCallAddress((ULONG)::IsDBCSLeadByte, processStartAddress, processStopAddress); // no needed as first call to IsDBCSLeadByte is correct, but sig could be used for further verification //WORD sig = 0x51C3; //while (c && (*(WORD*)(c-2)!=sig)) //{ // //-0x1000 as FindCallOrJmpAbs always uses an offset of 0x1000 // c = Util::FindCallOrJmpAbs((DWORD)IsDBCSLeadByte,processStopAddress-c-0x1000+4,c-0x1000+4,false); //} if (!addr) { ConsoleOutput("EME: pattern does not exist"); return false; } HookParam hp; hp.address = addr; hp.offset=get_reg(regs::eax); hp.type = NO_CONTEXT|DATA_INDIRECT|USING_STRING; ConsoleOutput("INSERT EmonEngine"); //ConsoleOutput("EmonEngine, hook will only work with text speed set to slow or normal!"); //else ConsoleOutput("Unknown EmonEngine engine"); return NewHook(hp, "EmonEngine"); } bool EME::attach_function() { return InsertEMEHook(); }