#ifndef WXHELPER_WECHAT_FUNCTION_H_ #define WXHELPER_WECHAT_FUNCTION_H_ namespace wxhelper { namespace common { /***************************sqlite3***************************************/ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ #define SQLITE_ERROR 1 /* Generic error */ #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ #define SQLITE_BUSY 5 /* The database file is locked */ #define SQLITE_LOCKED 6 /* A table in the database is locked */ #define SQLITE_NOMEM 7 /* A malloc() failed */ #define SQLITE_READONLY 8 /* Attempt to write a readonly database */ #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/ #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */ #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ #define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */ #define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ #define SQLITE_PROTOCOL 15 /* Database lock protocol error */ #define SQLITE_EMPTY 16 /* Internal use only */ #define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ #define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */ #define SQLITE_MISMATCH 20 /* Data type mismatch */ #define SQLITE_MISUSE 21 /* Library used incorrectly */ #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ #define SQLITE_AUTH 23 /* Authorization denied */ #define SQLITE_FORMAT 24 /* Not used */ #define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */ #define SQLITE_NOTADB 26 /* File opened that is not a database file */ #define SQLITE_NOTICE 27 /* Notifications from sqlite3_log() */ #define SQLITE_WARNING 28 /* Warnings from sqlite3_log() */ #define SQLITE_ROW 100 /* sqlite3_step() has another row ready */ #define SQLITE_DONE 101 /* sqlite3_step() has finished executing */ /* end-of-error-codes */ #define SQLITE_INTEGER 1 #define SQLITE_FLOAT 2 #define SQLITE_BLOB 4 #define SQLITE_NULL 5 #define SQLITE_TEXT 3 typedef int (*sqlite3_callback)(void*, int, char**, char**); typedef int(__cdecl* sqlite3_exec)(UINT64, /* An open database */ const char* sql, /* SQL to be evaluated */ sqlite3_callback, /* Callback function */ void*, /* 1st argument to callback */ char** errmsg /* Error msg written here */ ); typedef int(__cdecl* sqlite3_prepare)( UINT64 db, /* Database handle */ const char* zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ UINT64** ppStmt, /* OUT: Statement handle */ const char** pzTail /* OUT: Pointer to unused portion of zSql */ ); typedef int(__cdecl* sqlite3_open)(const char* filename, UINT64** ppDb); typedef int(__cdecl* sqlite3_sleep)(int); typedef int(__cdecl* sqlite3_errcode)(UINT64* db); typedef int(__cdecl* sqlite3_close)(UINT64*); typedef int(__cdecl* sqlite3_step)(UINT64*); typedef int(__cdecl* sqlite3_column_count)(UINT64* pStmt); typedef const char*(__cdecl* sqlite3_column_name)(UINT64*, int N); typedef int(__cdecl* sqlite3_column_type)(UINT64*, int iCol); typedef const void*(__cdecl* sqlite3_column_blob)(UINT64*, int iCol); typedef int(__cdecl* sqlite3_column_bytes)(UINT64*, int iCol); typedef int(__cdecl* sqlite3_finalize)(UINT64* pStmt); /***************************sqlite3 end*************************************/ struct TableInfo { char *name; INT64 name_len; char *table_name; INT64 table_name_len; char *sql; INT64 sql_len; char *rootpage; INT64 rootpage_len; }; struct DatabaseInfo { UINT64 handle = 0; wchar_t *db_name = NULL; INT64 db_name_len = 0; std::vector tables; INT64 count = 0; INT64 extrainfo = 0; }; struct SqlResult { char *column_name; INT64 column_name_len; char *content; INT64 content_len; BOOL is_blob; }; struct InnerMessageStruct { char *buffer; int length; ~InnerMessageStruct() { if (this->buffer != NULL) { delete[] this->buffer; this->buffer = NULL; } } }; struct SelfInfoInner { std::string name; std::string city; std::string province; std::string country; std::string account; std::string wxid; std::string mobile; std::string head_img; std::string data_save_path; std::string signature; std::string current_data_path; std::string db_key; }; struct ContactInner { std::string wxid; std::string custom_account; std::string encrypt_name; std::string nickname; std::string pinyin; std::string pinyin_all; DWORD type; DWORD verify_flag; DWORD reserved1; DWORD reserved2; ContactInner(){ wxid = ""; custom_account = ""; encrypt_name = ""; nickname =""; pinyin =""; pinyin_all =""; type = -1; verify_flag = -1; reserved1 = -1; reserved2 = -1; } }; struct ChatRoomInfoInner { std::string chat_room_id; std::string notice; std::string admin; std::string xml; ChatRoomInfoInner(){ chat_room_id = ""; notice = ""; admin = ""; xml = ""; } }; struct VectorInner { #ifdef _DEBUG INT64 head; #endif INT64 start; INT64 finsh; INT64 end; }; struct ChatRoomMemberInner { std::string chat_room_id; std::string admin; std::string admin_nickname; std::string member_nickname; std::string member; ChatRoomMemberInner() : chat_room_id(""), admin(""), admin_nickname(""), member_nickname(""), member("") {} }; } // namespace common namespace V3_9_5_81 { namespace function { typedef UINT64(*__GetAccountService)(); typedef UINT64(*__GetDataSavePath)(UINT64); typedef UINT64(*__GetCurrentDataPath)(UINT64); typedef UINT64(*__GetSendMessageMgr)(); typedef UINT64 (*__SendTextMsg)(UINT64, UINT64, UINT64, UINT64, UINT64, UINT64, UINT64, UINT64); typedef UINT64 (*__FreeChatMsg)(UINT64); typedef UINT64 (*__SendImageMsg)(UINT64, UINT64, UINT64, UINT64, UINT64); typedef UINT64 (*__NewChatMsg)(UINT64); typedef UINT64 (*__SendFile)(UINT64, UINT64, UINT64, UINT64, UINT64,UINT64, UINT64, UINT64, UINT64, UINT64, UINT64, UINT64); typedef UINT64(*__GetAppMsgMgr)(); typedef UINT64(*__OperatorNew)(UINT64); typedef UINT64(*__Free)(); typedef UINT64 (*__GetContactMgr)(); typedef UINT64 (*__GetContactList)(UINT64,UINT64); typedef UINT64 (*__GetChatRoomMgr)(); typedef UINT64 (*__NewChatRoomInfo)(UINT64); typedef UINT64 (*__FreeChatRoomInfo)(UINT64); typedef UINT64 (*__GetChatRoomDetailInfo)(UINT64,UINT64,UINT64,UINT64); typedef UINT64 (*__DoAddMemberToChatRoom)(UINT64,UINT64,UINT64,UINT64); typedef UINT64 (*__DoModChatRoomMemberNickName)(UINT64,UINT64,UINT64,UINT64); typedef UINT64 (*__DoDelMemberFromChatRoom)(UINT64,UINT64,UINT64); typedef UINT64 (*__GetMemberFromChatRoom)(UINT64,UINT64,UINT64); typedef UINT64 (*__NewChatRoom)(UINT64); typedef UINT64 (*__FreeChatRoom)(UINT64); typedef UINT64 (*__DoTopMsg)(UINT64,UINT64); typedef UINT64 (*__RemoveTopMsg)(UINT64,UINT64,UINT64); typedef UINT64 (*__InviteMemberToChatRoom)(UINT64,UINT64,UINT64,UINT64); typedef UINT64 (*__CreateChatRoom)(UINT64,UINT64,UINT64); typedef UINT64 (*__QuitChatRoom)(UINT64,UINT64,UINT64); typedef UINT64 (*__ForwardMsg)(UINT64,UINT64,UINT64,UINT64); typedef UINT64 (*__GetSNSFirstPage)(UINT64,UINT64,UINT64); typedef UINT64 (*__GetSNSNextPageScene)(UINT64,UINT64); typedef UINT64 (*__GetSNSDataMgr)(); typedef UINT64 (*__GetSnsTimeLineMgr)(); typedef UINT64 (*__GetMgrByPrefixLocalId)(UINT64,UINT64); typedef UINT64 (*__AddFavFromMsg)(UINT64,UINT64); typedef UINT64 (*__GetChatMgr)(); typedef UINT64 (*__GetFavoriteMgr)(); typedef UINT64 (*__AddFavFromImage)(UINT64,UINT64,UINT64); } // namespace function namespace prototype { #include #include struct WeChatString { wchar_t *ptr; DWORD length; DWORD max_length; INT64 c_ptr = 0; DWORD c_len = 0; WeChatString() { WeChatString(NULL); } WeChatString(const std::wstring &s) { ptr = (wchar_t *)(s.c_str()); length = static_cast(s.length()); max_length = static_cast(s.length()); } WeChatString(const wchar_t *pStr) { WeChatString((wchar_t *)pStr); } WeChatString(int tmp) { ptr = NULL; length = 0x0; max_length = 0x0; } WeChatString(wchar_t *pStr) { ptr = pStr; length = static_cast(wcslen(pStr)); max_length = static_cast(wcslen(pStr)); } void set_value(const wchar_t *pStr) { ptr = (wchar_t *)pStr; length = static_cast(wcslen(pStr)); max_length = static_cast(wcslen(pStr) * 2); } }; } // namespace prototype namespace offset { const UINT64 kGetAccountServiceMgr = 0x8c1230; const UINT64 kSyncMsg = 0xc39680; const UINT64 kSyncMsgNext = 0xc39680; const UINT64 kGetCurrentDataPath = 0xf5d130; const UINT64 kGetAppDataSavePath = 0x12d7040; const UINT64 kGetSendMessageMgr = 0x8c00e0; const UINT64 kSendTextMsg = 0xfcd8d0; const UINT64 kFreeChatMsg = 0x8aaa00; const UINT64 kDoAddMsg = 0x1010d80; const UINT64 kSendImageMsg = 0xfc3d30; const UINT64 kChatMsgInstanceCounter = 0x8c7fd0; const UINT64 kSendFileMsg = 0xdd27f0; const UINT64 kGetAppMsgMgr = 0x8c33f0; const UINT64 kGetContactMgr = 0x8ae3d0; const UINT64 kGetContactList = 0xeab270; const UINT64 k_sqlite3_exec = 0x252e340; const UINT64 k_sqlite3_prepare = 0x2535eb0; const UINT64 k_sqlite3_open = 0x256d6b0; const UINT64 k_sqlite3_backup_init= 0x24e8450; const UINT64 k_sqlite3_errcode = 0x256bfb0; const UINT64 k_sqlite3_close = 0x256a110; const UINT64 k_sqlite3_step = 0x24f2350; const UINT64 k_sqlite3_column_count = 0x24f2b70; const UINT64 k_sqlite3_column_name = 0x24f3570; const UINT64 k_sqlite3_column_type = 0x24f33c0; const UINT64 k_sqlite3_column_blob = 0x24f2ba0; const UINT64 k_sqlite3_column_bytes = 0x24f2c90; const UINT64 k_sqlite3_finalize = 0x24f1400; const UINT64 kGPInstance = 0x3a6f908; const UINT64 kMicroMsgDB = 0xb8; const UINT64 kChatMsgDB = 0x2c8; const UINT64 kMiscDB = 0x5f0; const UINT64 kEmotionDB = 0x838; const UINT64 kMediaDB = 0xef8; const UINT64 kBizchatMsgDB = 0x1a70; const UINT64 kFunctionMsgDB = 0x1b48; const UINT64 kDBName = 0x28; const UINT64 kStorageStart = 0x0; const UINT64 kStorageEnd = 0x0; const UINT64 kMultiDBMgr = 0x3acfb68; const UINT64 kPublicMsgMgr = 0x3acc268; const UINT64 kFavoriteStorageMgr = 0x3acf0d0; const UINT64 kChatRoomMgr = 0x8e9d30; const UINT64 kGetChatRoomDetailInfo = 0xe73590; const UINT64 kNewChatRoomInfo = 0x12006b0; const UINT64 kFreeChatRoomInfo = 0x1200890; const UINT64 kDoAddMemberToChatRoom = 0xe63c70; const UINT64 kDoModChatRoomMemberNickName = 0xe6db00; const UINT64 kDelMemberFromChatRoom = 0xe64290; const UINT64 kGetMemberFromChatRoom = 0xe74de0; const UINT64 kNewChatRoom = 0x11fde50; const UINT64 kFreeChatRoom = 0x11fe030; const UINT64 kTopMsg = 0xa5e4f0; const UINT64 kRemoveTopMsg = 0xe787b0; const UINT64 kInviteMember = 0xe63650; const UINT64 kHookLog = 0x1304e60; const UINT64 kCreateChatRoom = 0xe63340; const UINT64 kQuitChatRoom = 0xe6e3b0; const UINT64 kForwardMsg = 0xfcd0f0; const UINT64 kOnSnsTimeLineSceneFinish = 0x1a73150; const UINT64 kSNSGetFirstPage = 0x1a51dd0; const UINT64 kSNSGetNextPageScene = 0x1a77240; const UINT64 kSNSDataMgr = 0xeebda0; const UINT64 kSNSTimeLineMgr = 0x19e83a0; const UINT64 kGetMgrByPrefixLocalId = 0xe4add0; const UINT64 kAddFavFromMsg = 0x1601520; const UINT64 kGetChatMgr = 0x8f0400; const UINT64 kGetFavoriteMgr = 0x8c69b0; const UINT64 kAddFavFromImage = 0x160b920; } // namespace offset } // namespace V3_9_5_81 } // namespace wxhelper #endif