From 573d430457e69c66d2381e0880c088364bb80c3e Mon Sep 17 00:00:00 2001 From: Changhua Date: Sat, 10 Jun 2023 16:57:54 +0800 Subject: [PATCH] Impl Functions_FUNC_EXEC_DB_QUERY --- spy/exec_sql.cpp | 40 ++++++++++------------------------------ spy/rpc_server.cpp | 2 +- 2 files changed, 11 insertions(+), 31 deletions(-) diff --git a/spy/exec_sql.cpp b/spy/exec_sql.cpp index faedd1c..6fc3e3a 100644 --- a/spy/exec_sql.cpp +++ b/spy/exec_sql.cpp @@ -15,31 +15,11 @@ #define OFFSET_DB_FUNCTION_MSG 0x11B0 #define OFFSET_DB_NAME 0x14 -extern WxCalls_t g_WxCalls; extern DWORD g_WeChatWinDllAddr; typedef map dbMap_t; static dbMap_t dbMap; -// 回调函数指针 -typedef int (*sqlite3_callback)(void *, int, char **, char **); - -// sqlite3_exec函数指针 -typedef int(__cdecl *Sqlite3_exec)(DWORD, /* The database on which the SQL executes */ - const char *, /* The SQL to be executed */ - sqlite3_callback, /* Invoke this callback routine */ - void *, /* First argument to xCallback() */ - char ** /* Write error messages here */ -); -typedef int(__cdecl *Sqlite3_prepare)(DWORD, const char *, int, DWORD **, int); -typedef int(__cdecl *Sqlite3_step)(DWORD *); -typedef int(__cdecl *Sqlite3_column_count)(DWORD *); -typedef const char *(__cdecl *Sqlite3_column_name)(DWORD *, int); -typedef int(__cdecl *Sqlite3_column_type)(DWORD *, int); -typedef const void *(__cdecl *Sqlite3_column_blob)(DWORD *, int); -typedef int(__cdecl *Sqlite3_column_bytes)(DWORD *, int); -typedef int(__cdecl *Sqlite3_finalize)(DWORD *); - static void GetDbHandle(DWORD base, DWORD offset) { wchar_t *wsp; @@ -108,9 +88,9 @@ DbTables_t GetDbTables(const string db) } const char *sql = "select name, sql from sqlite_master where type=\"table\";"; - Sqlite3_exec p_Sqlite3_exec = (Sqlite3_exec)(g_WeChatWinDllAddr + g_WxCalls.sql.exec); + Sqlite3_exec p_Sqlite3_exec = (Sqlite3_exec)(g_WeChatWinDllAddr + SQLITE3_EXEC_OFFSET); - p_Sqlite3_exec(it->second, sql, (sqlite3_callback)cbGetTables, (void *)&tables, 0); + p_Sqlite3_exec(it->second, sql, (Sqlite3_callback)cbGetTables, (void *)&tables, 0); return tables; } @@ -118,14 +98,14 @@ DbTables_t GetDbTables(const string db) DbRows_t ExecDbQuery(const string db, const string sql) { DbRows_t rows; - Sqlite3_prepare func_prepare = (Sqlite3_prepare)(g_WeChatWinDllAddr + 0x14227F0); - Sqlite3_step func_step = (Sqlite3_step)(g_WeChatWinDllAddr + 0x13EA780); - Sqlite3_column_count func_column_count = (Sqlite3_column_count)(g_WeChatWinDllAddr + 0x13EACD0); - Sqlite3_column_name func_column_name = (Sqlite3_column_name)(g_WeChatWinDllAddr + 0x13EB630); - Sqlite3_column_type func_column_type = (Sqlite3_column_type)(g_WeChatWinDllAddr + 0x13EB470); - Sqlite3_column_blob func_column_blob = (Sqlite3_column_blob)(g_WeChatWinDllAddr + 0x13EAD10); - Sqlite3_column_bytes func_column_bytes = (Sqlite3_column_bytes)(g_WeChatWinDllAddr + 0x13EADD0); - Sqlite3_finalize func_finalize = (Sqlite3_finalize)(g_WeChatWinDllAddr + 0x13E9730); + Sqlite3_prepare func_prepare = (Sqlite3_prepare)(g_WeChatWinDllAddr + SQLITE3_PREPARE_OFFSET); + Sqlite3_step func_step = (Sqlite3_step)(g_WeChatWinDllAddr + SQLITE3_STEP_OFFSET); + Sqlite3_column_count func_column_count = (Sqlite3_column_count)(g_WeChatWinDllAddr + SQLITE3_COLUMN_COUNT_OFFSET); + Sqlite3_column_name func_column_name = (Sqlite3_column_name)(g_WeChatWinDllAddr + SQLITE3_COLUMN_NAME_OFFSET); + Sqlite3_column_type func_column_type = (Sqlite3_column_type)(g_WeChatWinDllAddr + SQLITE3_COLUMN_TYPE_OFFSET); + Sqlite3_column_blob func_column_blob = (Sqlite3_column_blob)(g_WeChatWinDllAddr + SQLITE3_COLUMN_BLOB_OFFSET); + Sqlite3_column_bytes func_column_bytes = (Sqlite3_column_bytes)(g_WeChatWinDllAddr + SQLITE3_COLUMN_BYTES_OFFSET); + Sqlite3_finalize func_finalize = (Sqlite3_finalize)(g_WeChatWinDllAddr + SQLITE3_FINALIZE_OFFSET); if (dbMap.empty()) { dbMap = GetDbHandles(); diff --git a/spy/rpc_server.cpp b/spy/rpc_server.cpp index b33e9cc..1419c27 100644 --- a/spy/rpc_server.cpp +++ b/spy/rpc_server.cpp @@ -616,12 +616,12 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len ret = func_disable_recv_txt(out, out_len); break; } -#if 0 case Functions_FUNC_EXEC_DB_QUERY: { LOG_DEBUG("[Functions_FUNC_EXEC_DB_QUERY]"); ret = func_exec_db_query(req.msg.query.db, req.msg.query.sql, out, out_len); break; } +#if 0 case Functions_FUNC_ACCEPT_FRIEND: { LOG_DEBUG("[Functions_FUNC_ACCEPT_FRIEND]"); ret = func_accept_friend(req.msg.v.v3, req.msg.v.v4, req.msg.v.scene, out, out_len);