From a9be7b094d52cc94ff48d46066be0b9240f4107a Mon Sep 17 00:00:00 2001 From: Changhua Date: Fri, 7 Feb 2025 07:51:44 +0800 Subject: [PATCH] Refactoring --- WeChatFerry/spy/account_manager.cpp | 16 ++++++++++++---- WeChatFerry/spy/account_manager.h | 4 ++++ WeChatFerry/spy/misc_manager.cpp | 8 -------- WeChatFerry/spy/misc_manager.h | 3 --- WeChatFerry/spy/rpc_server.cpp | 2 +- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/WeChatFerry/spy/account_manager.cpp b/WeChatFerry/spy/account_manager.cpp index 52cb43d..d5f9608 100644 --- a/WeChatFerry/spy/account_manager.cpp +++ b/WeChatFerry/spy/account_manager.cpp @@ -11,10 +11,13 @@ extern UINT64 g_WeChatWinDllAddr; namespace account { -#define OS_USER_HOME 0x5932770 -#define OS_USER_WXID 0x595C270 -#define OS_USER_NAME 0x595C3D8 -#define OS_USER_MOBILE 0x595C318 +#define OS_LOGIN_STATUS 0x595C9E8 +#define OS_USER_HOME 0x5932770 +#define OS_USER_WXID 0x595C270 +#define OS_USER_NAME 0x595C3D8 +#define OS_USER_MOBILE 0x595C318 + +bool is_logged_in() { return util::get_qword(g_WeChatWinDllAddr + OS_LOGIN_STATUS) != 0; } std::string get_home_path() { @@ -68,6 +71,11 @@ UserInfo_t get_user_info() return ui; } +bool rpc_is_logged_in(uint8_t *out, size_t *len) +{ + return fill_response(out, len, [](Response &rsp) { rsp.msg.status = is_logged_in(); }); +} + bool rpc_get_self_wxid(uint8_t *out, size_t *len) { return fill_response( diff --git a/WeChatFerry/spy/account_manager.h b/WeChatFerry/spy/account_manager.h index 6e90715..e184475 100644 --- a/WeChatFerry/spy/account_manager.h +++ b/WeChatFerry/spy/account_manager.h @@ -8,6 +8,9 @@ namespace account { +// 登录状态 +bool is_logged_in(); + // 获取 WeChat 数据存储路径 std::string get_home_path(); @@ -18,6 +21,7 @@ std::string get_self_wxid(); UserInfo_t get_user_info(); // RPC 方法 +bool rpc_is_logged_in(uint8_t *out, size_t *len); bool rpc_get_self_wxid(uint8_t *out, size_t *len); bool rpc_get_user_info(uint8_t *out, size_t *len); diff --git a/WeChatFerry/spy/misc_manager.cpp b/WeChatFerry/spy/misc_manager.cpp index f6f1b3f..17e1e8e 100644 --- a/WeChatFerry/spy/misc_manager.cpp +++ b/WeChatFerry/spy/misc_manager.cpp @@ -28,7 +28,6 @@ namespace misc #define HEADER_GIF1 0x47 #define HEADER_GIF2 0x49 -#define OS_LOGIN_STATUS 0x595C9E8 #define OS_GET_SNS_DATA_MGR 0x21E2200 #define OS_GET_SNS_FIRST_PAGE 0x2E212D0 #define OS_GET_SNS_TIMELINE_MGR 0x2DB3390 @@ -54,8 +53,6 @@ using push_attach_task_t = QWORD (*)(QWORD, QWORD, QWORD, QWORD); using get_ocr_manager_t = QWORD (*)(); using do_ocr_task_t = QWORD (*)(QWORD, QWORD, QWORD, QWORD, QWORD, QWORD); -bool is_logged_in() { return util::get_qword(g_WeChatWinDllAddr + OS_LOGIN_STATUS) != 0; } - static std::string detect_image_extension(uint8_t header1, uint8_t header2, uint8_t &key) { if ((key = HEADER_PNG1 ^ header1) && (HEADER_PNG2 ^ key) == header2) return ".png"; @@ -351,11 +348,6 @@ int receive_transfer(const std::string &wxid, const std::string &transferid, con return -1; } -bool rpc_is_logged_in(uint8_t *out, size_t *len) -{ - return fill_response(out, len, [](Response &rsp) { rsp.msg.status = is_logged_in(); }); -} - bool rpc_get_audio(const AudioMsg &am, uint8_t *out, size_t *len) { return fill_response( diff --git a/WeChatFerry/spy/misc_manager.h b/WeChatFerry/spy/misc_manager.h index 2f995ae..0792c3f 100644 --- a/WeChatFerry/spy/misc_manager.h +++ b/WeChatFerry/spy/misc_manager.h @@ -13,8 +13,6 @@ namespace misc { -bool is_logged_in(); - std::string get_audio(uint64_t id, const std::filesystem::path &dir); std::string get_pcm_audio(uint64_t id, const std::filesystem::path &dir, int32_t sr); std::string decrypt_image(const std::filesystem::path &src, const std::filesystem::path &dst); @@ -29,7 +27,6 @@ int receive_transfer(const std::string &wxid, const std::string &transferid, con // RPC // clang-format off -bool rpc_is_logged_in(uint8_t *out, size_t *len); bool rpc_get_audio(const AudioMsg &am, uint8_t *out, size_t *len); bool rpc_get_pcm_audio(uint64_t id, const std::filesystem::path &dir, int32_t sr, uint8_t *out, size_t *len); bool rpc_decrypt_image(const DecPath &dec, uint8_t *out, size_t *len); diff --git a/WeChatFerry/spy/rpc_server.cpp b/WeChatFerry/spy/rpc_server.cpp index b237982..d238642 100644 --- a/WeChatFerry/spy/rpc_server.cpp +++ b/WeChatFerry/spy/rpc_server.cpp @@ -151,7 +151,7 @@ static bool rpc_disable_recv_msg(uint8_t *out, size_t *len) const std::unordered_map rpc_function_map = { // clang-format off - { Functions_FUNC_IS_LOGIN, [](const Request &r, uint8_t *out, size_t *len) { return misc::rpc_is_logged_in(out, len); } }, + { Functions_FUNC_IS_LOGIN, [](const Request &r, uint8_t *out, size_t *len) { return account::rpc_is_logged_in(out, len); } }, { Functions_FUNC_GET_SELF_WXID, [](const Request &r, uint8_t *out, size_t *len) { return account::rpc_get_self_wxid(out, len); } }, { Functions_FUNC_GET_USER_INFO, [](const Request &r, uint8_t *out, size_t *len) { return account::rpc_get_user_info(out, len); } }, { Functions_FUNC_GET_MSG_TYPES, [](const Request &r, uint8_t *out, size_t *len) { return handler.rpc_get_msg_types(out, len); } },