From 8b030c45c5e1f097e0e407d99793c43f797c717e Mon Sep 17 00:00:00 2001 From: simplxs Date: Mon, 1 Jul 2024 05:23:52 +0800 Subject: [PATCH] update --- include/moehoo/hook.h | 6 ++---- include/moehoo/proc_maps.h | 8 ++++---- src/main.cpp | 2 +- src/run_as_node.cpp | 16 ++++++++-------- src/sign.cpp | 14 +++----------- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/include/moehoo/hook.h b/include/moehoo/hook.h index 5a46b46..989d472 100644 --- a/include/moehoo/hook.h +++ b/include/moehoo/hook.h @@ -1,13 +1,11 @@ #ifndef _HOOK_H_ #define _HOOK_H_ -#include #include #if defined(_WIN_PLATFORM_) #include #elif defined(_LINUX_PLATFORM_) || defined(_MAC_PLATFORM_) #include "proc_maps.h" -#include #include #endif @@ -88,7 +86,7 @@ inline void *moehoo::search_and_fill_jump(uint64_t baseAddress, void *targetAddr } searchStart += mbi.RegionSize; } -#elif defined(_LINUX_PLATFORM_) +#elif defined(_LINUX_PLATFORM_) || defined(_MAC_PLATFORM_) // 保证地址对齐 searchStart &= 0xfffffffffffff000; searchStart += 0x1000; @@ -163,7 +161,7 @@ inline bool moehoo::hook(uint8_t *callAddr, void *lpFunction) return false; } return true; -#elif defined(_LINUX_PLATFORM_) +#elif defined(_LINUX_PLATFORM_) || defined(_MAC_PLATFORM_) // printf("Hooking %p to %p, distance: %ld\n", callAddr, lpFunction, distance); auto get_page_addr = [](void *addr) -> void * diff --git a/include/moehoo/proc_maps.h b/include/moehoo/proc_maps.h index 6de1e0f..bbf9f76 100644 --- a/include/moehoo/proc_maps.h +++ b/include/moehoo/proc_maps.h @@ -1,14 +1,13 @@ #ifndef PROC_MAPS_H #define PROC_MAPS_H -#if defined(_MAC_PLATFORM_) || defined(_LINUX_PLATFORM_) +#if defined(_LINUX_PLATFORM_) || defined(_MAC_PLATFORM_) + +#include #include #include #include -#include -#include #include -#include namespace hak { @@ -179,4 +178,5 @@ inline auto hak::get_maps(pid_t pid) -> std::shared_ptr } #endif + #endif // PROC_MAPS_H \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index a533398..f5bd911 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -110,7 +110,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) } return TRUE; } -#elif defined(_MAC_PLATFORM_) || defined(_LINUX_PLATFORM_) +#elif defined(_LINUX_PLATFORM_) || defined(_MAC_PLATFORM_) void __attribute__((constructor)) my_init(void) { init(); diff --git a/src/run_as_node.cpp b/src/run_as_node.cpp index fc92a05..a38ad22 100644 --- a/src/run_as_node.cpp +++ b/src/run_as_node.cpp @@ -1,14 +1,14 @@ #if defined(_WIN_PLATFORM_) #include "run_as_node.h" -#include -#include -#include #include +#include +#include +#include #if defined(_X64_ARCH_) // {call winmain, check run as node function} -std::map> mainAddrMap = { - {"9.9.12-25234", {0x457A76D, 0x3A5D70}}}; +std::map> mainAddrMap = { + {"9.9.12-25234", {0x457A76D, 0x3A5D70, 0x1FFF710}}}; #endif int(__stdcall *oriWinMain)(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); @@ -86,12 +86,12 @@ bool RunAsNode::Init(const std::string &version) if (baseAddr == 0) throw std::runtime_error("Can't find hook address"); - auto [callptr, funcptr] = mainAddrMap[version]; + auto [callptr, func1ptr, func2ptr] = mainAddrMap[version]; uint8_t *abscallptr = reinterpret_cast(baseAddr + callptr); oriWinMain = reinterpret_cast(moehoo::get_call_address(abscallptr)); - checkRunAsNode = reinterpret_cast(baseAddr + funcptr); - nodeInitializeOncePerProcess = reinterpret_cast (*)(const std::vector &, uint32_t)>(baseAddr + 0x1FFF710); + checkRunAsNode = reinterpret_cast(baseAddr + func1ptr); + nodeInitializeOncePerProcess = reinterpret_cast (*)(const std::vector &, uint32_t)>(baseAddr + func2ptr); return moehoo::hook(abscallptr, &fakeWinMain); } diff --git a/src/sign.cpp b/src/sign.cpp index 109f84e..0b8a646 100644 --- a/src/sign.cpp +++ b/src/sign.cpp @@ -1,22 +1,14 @@ #include "sign.h" -#include -#include #include - +#include #include - -// #define _LINUX_PLATFORM_ -// #define _WIN_PLATFORM_ - -// #define _X64_ARCH_ +#include #if defined(_WIN_PLATFORM_) #include -#include -#elif defined(_MAC_PLATFORM_) || defined(_LINUX_PLATFORM_) +#elif defined(_LINUX_PLATFORM_) || defined(_MAC_PLATFORM_) #include "../include/moehoo/proc_maps.h" -#include #endif typedef int (*SignFunctionType)(const char *cmd, const unsigned char *src, size_t src_len, int seq, unsigned char *result);