LunaHook-mirror/LunaHook/engine32/Jellyfish.cpp
恍兮惚兮 eb123790e6 refactor
2024-03-21 18:29:50 +08:00

37 lines
1.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include"Jellyfish.h"
bool Jellyfish_attach_function() {
//https://vndb.org/r13456
//GREEN秋空のスクリーン STANDARD EDITION
//https://vndb.org/r1136
//LOVERS恋に落ちたら…
auto ism=GetModuleHandle(L"ism.dll");
if(ism==0)return false;
auto [minaddr,maxaddr]=Util::QueryModuleLimits(ism);
const BYTE bytes[] = {
0x8a,XX,0x01, //mov cl, [ecx+1]
0x80,XX,0x6e, //cmp cl, 6Eh ; 'n'
0x75,XX,
};
ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), minaddr, maxaddr);
if (addr == 0)return false;
addr = MemDbg::findEnclosingAlignedFunction(addr,0x1000);
if (addr == 0)return false;
HookParam hp;
hp.address = addr;
hp.offset=get_stack(1);
hp.type = USING_STRING;
hp.filter_fun=[](LPVOID data, size_t *size, HookParam *){
if(*size==2)return false;
StringCharReplacer(reinterpret_cast<char*>(data), size, "\\n", 2, '\n');
StringCharReplacer(reinterpret_cast<char*>(data), size, "\\N", 2, '\n');
return write_string_overwrite(data,size,std::regex_replace(std::string(reinterpret_cast<char*>(data),*size), std::regex("\\\\[0-7a-zA-Z]"), ""));
};
return NewHook(hp, "Jellyfish");
}
bool Jellyfish::attach_function(){
return Jellyfish_attach_function();
}