#include "pch.h" #include "manager.h" #include "export.h" #include "wechat_function.h" namespace offset = wxhelper::V3_9_5_81::offset; namespace prototype = wxhelper::V3_9_5_81::prototype; namespace func = wxhelper::V3_9_5_81::function; namespace wxhelper { Manager::Manager(UINT64 base) : base_addr_(base) {} Manager::~Manager() {} INT64 Manager::CheckLogin() { INT64 success = -1; UINT64 accout_service_addr = base_addr_ + offset::kGetAccountServiceMgr; func::__GetAccountService GetSevice = (func::__GetAccountService)accout_service_addr; // UINT64 service_addr = _GetAccountService(accout_service_addr); UINT64 service_addr = GetSevice(); if (service_addr) { success = *(UINT64 *)(service_addr + 0x7F8); } return success; } INT64 Manager::GetSelfInfo(common::SelfInfoInner &out) { INT64 success = -1; UINT64 accout_service_addr = base_addr_ + offset::kGetAccountServiceMgr; UINT64 get_app_data_save_path_addr = base_addr_ + offset::kGetAppDataSavePath; UINT64 get_current_data_path_addr = base_addr_ + offset::kGetCurrentDataPath; // UINT64 service_addr = _GetAccountService(accout_service_addr); func::__GetAccountService GetSevice = (func::__GetAccountService)accout_service_addr; func::__GetDataSavePath GetDataSavePath = (func::__GetDataSavePath)get_app_data_save_path_addr; func::__GetCurrentDataPath GetCurrentDataPath = (func::__GetCurrentDataPath)get_current_data_path_addr; UINT64 service_addr = GetSevice(); if (service_addr) { if (*(INT64 *)(service_addr + 0x80) == 0 || *(INT64 *)(service_addr + 0x80 + 0x10) == 0) { out.wxid = std::string(); } else { if (*(INT64 *)(service_addr + 0x80 + 0x18) == 0xF) { out.wxid = std::string((char *)(service_addr + 0x80), *(INT64 *)(service_addr + 0x80 + 0x10)); } else { out.wxid = std::string(*(char **)(service_addr + 0x80), *(INT64 *)(service_addr + 0x80 + 0x10)); } } if (*(INT64 *)(service_addr + 0x108) == 0 || *(INT64 *)(service_addr + 0x108 + 0x10) == 0) { out.account = std::string(); } else { if (*(INT64 *)(service_addr + 0x108 + 0x18) == 0xF) { out.account = std::string((char *)(service_addr + 0x108), *(INT64 *)(service_addr + 0x108 + 0x10)); } else { out.account = std::string(*(char **)(service_addr + 0x108), *(INT64 *)(service_addr + 0x108 + 0x10)); } } if (*(INT64 *)(service_addr + 0x128) == 0 || *(INT64 *)(service_addr + 0x128 + 0x10) == 0) { out.mobile = std::string(); } else { if (*(INT64 *)(service_addr + 0x128 + 0x18) == 0xF) { out.mobile = std::string((char *)(service_addr + 0x128), *(INT64 *)(service_addr + 0x128 + 0x10)); } else { out.mobile = std::string(*(char **)(service_addr + 0x128), *(INT64 *)(service_addr + 0x128 + 0x10)); } } if (*(INT64 *)(service_addr + 0x148) == 0 || *(INT64 *)(service_addr + 0x148 + 0x10) == 0) { out.signature = std::string(); } else { if (*(INT64 *)(service_addr + 0x148 + 0x18) == 0xF) { out.signature = std::string((char *)(service_addr + 0x148), *(INT64 *)(service_addr + 0x148 + 0x10)); } else { out.signature = std::string(*(char **)(service_addr + 0x148), *(INT64 *)(service_addr + 0x148 + 0x10)); } } if (*(INT64 *)(service_addr + 0x168) == 0 || *(INT64 *)(service_addr + 0x168 + 0x10) == 0) { out.country = std::string(); } else { if (*(INT64 *)(service_addr + 0x168 + 0x18) == 0xF) { out.country = std::string((char *)(service_addr + 0x168), *(INT64 *)(service_addr + 0x168 + 0x10)); } else { out.country = std::string(*(char **)(service_addr + 0x168), *(INT64 *)(service_addr + 0x168 + 0x10)); } } if (*(INT64 *)(service_addr + 0x188) == 0 || *(INT64 *)(service_addr + 0x188 + 0x10) == 0) { out.province = std::string(); } else { if (*(INT64 *)(service_addr + 0x188 + 0x18) == 0xF) { out.province = std::string((char *)(service_addr + 0x188), *(INT64 *)(service_addr + 0x188 + 0x10)); } else { out.province = std::string(*(char **)(service_addr + 0x188), *(INT64 *)(service_addr + 0x188 + 0x10)); } } if (*(INT64 *)(service_addr + 0x1A8) == 0 || *(INT64 *)(service_addr + 0x1A8 + 0x10) == 0) { out.city = std::string(); } else { if (*(INT64 *)(service_addr + 0x1A8 + 0x18) == 0xF) { out.city = std::string((char *)(service_addr + 0x1A8), *(INT64 *)(service_addr + 0x1A8 + 0x10)); } else { out.city = std::string(*(char **)(service_addr + 0x1A8), *(INT64 *)(service_addr + 0x1A8 + 0x10)); } } if (*(INT64 *)(service_addr + 0x1E8) == 0 || *(INT64 *)(service_addr + 0x1E8 + 0x10) == 0) { out.name = std::string(); } else { if (*(INT64 *)(service_addr + 0x1E8 + 0x18) == 0xF) { out.name = std::string((char *)(service_addr + 0x1E8), *(INT64 *)(service_addr + 0x1E8 + 0x10)); } else { out.name = std::string(*(char **)(service_addr + 0x1E8), *(INT64 *)(service_addr + 0x1E8 + 0x10)); } } if (*(INT64 *)(service_addr + 0x450) == 0 || *(INT64 *)(service_addr + 0x450 + 0x10) == 0) { out.head_img = std::string(); } else { out.head_img = std::string(*(char **)(service_addr + 0x450), *(INT64 *)(service_addr + 0x450 + 0x10)); } if (*(INT64 *)(service_addr + 0x6E0) == 0 || *(INT64 *)(service_addr + 0x6E8) == 0) { out.db_key = std::string(); } else { INT64 byte_addr = *(INT64 *)(service_addr + 0x6E0); INT64 len = *(INT64 *)(service_addr + 0x6E8); out.db_key = Utils::Bytes2Hex((BYTE *)byte_addr, static_cast(len)); } UINT64 flag = *(UINT64 *)(service_addr + 0x7F8); if (flag == 1) { prototype::WeChatString current_data_path; // _GetCurrentDataPath(get_current_data_path_addr, // reinterpret_cast(¤t_data_path)); GetCurrentDataPath(reinterpret_cast(¤t_data_path)); if (current_data_path.ptr) { out.current_data_path = Utils::WstringToUTF8( std::wstring(current_data_path.ptr, current_data_path.length)); } else { out.current_data_path = std::string(); } } } prototype::WeChatString data_save_path; // _GetDataSavePath(get_app_data_save_path_addr, // reinterpret_cast(&data_save_path)); GetCurrentDataPath(reinterpret_cast(&data_save_path)); if (data_save_path.ptr) { out.data_save_path = Utils::WstringToUTF8( std::wstring(data_save_path.ptr, data_save_path.length)); } else { out.data_save_path = std::string(); } success = 1; return success; } INT64 Manager::SendTextMsg(const std::wstring& wxid, const std::wstring& msg){ INT64 success = -1; prototype::WeChatString to_user(wxid); prototype::WeChatString text_msg(msg); wchar_t** msg_pptr = &text_msg.ptr; UINT64 send_message_mgr_addr = base_addr_ + offset::kGetSendMessageMgr; UINT64 send_text_msg_addr = base_addr_ + offset::kSendTextMsg; UINT64 free_chat_msg_addr = base_addr_ + offset::kFreeChatMsg; char chat_msg[0x460] = {0}; UINT64 temp[3] ={0}; func::__GetSendMessageMgr mgr; mgr = (func::__GetSendMessageMgr)send_message_mgr_addr; func::__SendTextMsg send; send = (func::__SendTextMsg)send_text_msg_addr; func::__FreeChatMsg free; free = (func::__FreeChatMsg)free_chat_msg_addr; mgr(); send(reinterpret_cast(&chat_msg), reinterpret_cast(&to_user), reinterpret_cast(&text_msg), reinterpret_cast(&temp), 1, 1, 0, 0); free(reinterpret_cast(&chat_msg)); success = 1; return success; } } // namespace wxhelper`