From 34771acb29ac142b83fefb153541f32ebf12ab6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=81=8D=E5=85=AE=E6=83=9A=E5=85=AE?= <101191390+HIllya51@users.noreply.github.com> Date: Wed, 10 Jul 2024 21:13:08 +0800 Subject: [PATCH] elf --- LunaHook/engine32/Elf.cpp | 60 +++++++++++++++++++++++++++++++++++++-- LunaHook/util/textunion.h | 2 +- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/LunaHook/engine32/Elf.cpp b/LunaHook/engine32/Elf.cpp index 79e733c..0fcef5b 100644 --- a/LunaHook/engine32/Elf.cpp +++ b/LunaHook/engine32/Elf.cpp @@ -330,10 +330,66 @@ bool attach(ULONG startAddress, ULONG stopAddress) } // namespace ScenarioHook } // unnamed namespace - +namespace{ + + bool elf3(){ + bool succ=false; + BYTE sig[]={ + 0x83,XX,0x14,0x10, + 0x72,XX + }; + for(auto addr:Util::SearchMemory(sig,sizeof(sig),PAGE_EXECUTE,processStartAddress,processStopAddress)){ + auto check1=*(BYTE*)(addr+5); + if(check1!=0x02 && check1!=0x04)continue; + auto check=*(BYTE*)(addr+1); + HookParam hp; + hp.address=addr; + hp.user_value=check; + hp.type=USING_STRING|NO_CONTEXT; + hp.text_fun=[](hook_stack* stack, HookParam *hp, uintptr_t *data, uintptr_t *split, size_t *len){ + DWORD ptr; + switch (hp->user_value) + { + case 0x7a: + ptr=stack->edx; + break; + case 0x7b: + ptr=stack->ebx; + break; + case 0x79: + ptr=stack->ecx; + break; + case 0x78: + ptr=stack->eax; + break; + case 0x7e: + ptr=stack->esi; + break; + case 0x7f: + ptr=stack->edi; + break; + case 0x7d: + ptr=stack->ebp; + break; + //esp: + //83 7c 24 14 10 + default: + hp->type=HOOK_EMPTY; + break; + } + auto text= (TextUnionA*)ptr; + *data=(DWORD)text->getText(); + *len=text->size; + }; + hp.filter_fun=all_ascii_Filter; + succ|=NewHook(hp,"elf3"); + } + return succ; + } +} bool Elf::attach_function() { - auto _1= InsertElfHook()||__(); + auto _1= InsertElfHook()||__()||elf3(); return ScenarioHook::attach(processStartAddress,processStopAddress)||_1; } diff --git a/LunaHook/util/textunion.h b/LunaHook/util/textunion.h index c1257c1..aab62c2 100644 --- a/LunaHook/util/textunion.h +++ b/LunaHook/util/textunion.h @@ -25,7 +25,7 @@ struct TextUnion } const CharT *getText() const - { return size < ShortTextCapacity ? chars : text; } + { return capacity < ShortTextCapacity ? chars : text; } void setText(const CharT *_text, int _size) {