wxdata.h 6.2 KB
Newer Older
1
#pragma once
L
ljc545w 已提交
2
#include <windows.h>
3 4
using namespace std;

5
// 用于Hook到数据后,给主线程发送信号
L
ljc545w 已提交
6
#define WM_WAIT_HOOK_DATA WM_USER + 0x1
7

8
/*
9 10 11 12 13 14 15 16
 * 微信中的基础数据结构
 * buffer:UNICODE字符串
 * length:`buffer`字符数
 * maxLength:`buffer`最大字符数
 * fill1:占位成员1,默认为0
 * fill2:占位成员2,默认为0
 * WxString:默认构造函数
 */
L
ljc545w 已提交
17
typedef struct WxStringW
18
{
L
ljc545w 已提交
19 20 21
    wchar_t *buffer = NULL;
    DWORD length = 0;
    DWORD maxLength = 0;
22 23
    DWORD fill1 = 0;
    DWORD fill2 = 0;
L
ljc545w 已提交
24 25
    WxStringW() {}
    WxStringW(wstring &str)
L
ljc545w 已提交
26 27 28 29 30
    {
        buffer = (wchar_t *)str.c_str();
        length = str.length();
        maxLength = str.length() * 2;
    }
L
ljc545w 已提交
31
    WxStringW(const wchar_t *pStr)
L
ljc545w 已提交
32
    {
L
ljc545w 已提交
33 34 35
        buffer = (wchar_t *)pStr;
        length = wcslen(pStr);
        maxLength = wcslen(pStr) * 2;
L
ljc545w 已提交
36
    }
L
ljc545w 已提交
37
    WxStringW(int tmp)
L
ljc545w 已提交
38 39 40 41 42
    {
        buffer = NULL;
        length = 0x0;
        maxLength = 0x0;
    }
L
ljc545w 已提交
43
    WxStringW(wchar_t *pStr)
L
ljc545w 已提交
44 45 46 47 48
    {
        buffer = pStr;
        length = wcslen(pStr);
        maxLength = wcslen(pStr) * 2;
    }
L
ljc545w 已提交
49 50 51 52 53 54
    void set_value(const wchar_t *pStr)
    {
        buffer = (wchar_t *)pStr;
        length = wcslen(pStr);
        maxLength = wcslen(pStr) * 2;
    }
L
ljc545w 已提交
55
} WxString;
56 57

/*
58 59 60 61 62 63 64
 * 保存单条信息的结构
 * messagetype:消息类型
 * sender:发送者wxid
 * wxid:如果sender是群聊id,则此成员保存具体发送人wxid,否则与`sender`一致
 * message:消息内容,非文本消息是xml格式
 * filepath:图片、文件及其他资源的保存路径
 */
L
ljc545w 已提交
65 66 67 68 69 70 71 72 73 74 75
struct ReceiveMsgStruct
{
    DWORD pid = 0;
    DWORD messagetype = 0;
    BOOL isSendMessage = 0;
    unsigned long long msgid = 0;
    wstring sender;
    wstring wxid;
    wstring message;
    wstring filepath;
    wstring time;
76
    wstring extrainfo;
L
ljc545w 已提交
77 78
    ~ReceiveMsgStruct()
    {
L
ljc545w 已提交
79
    }
80 81 82
};

// vector在内存中的表现形式
L
ljc545w 已提交
83 84
struct VectorStruct
{
85 86 87 88 89 90 91 92
#ifdef _DEBUG
    DWORD v_head;
#endif
    DWORD v_data;
    DWORD v_end1;
    DWORD v_end2;
};

L
ljc545w 已提交
93 94
struct UserInfo
{
95
    int errcode;
L
ljc545w 已提交
96
    wchar_t *keyword;
97
    int l_keyword;
L
ljc545w 已提交
98
    wchar_t *v3;
99
    int l_v3;
L
ljc545w 已提交
100
    wchar_t *NickName;
101
    int l_NickName;
L
ljc545w 已提交
102
    wchar_t *Signature;
103
    int l_Signature;
L
ljc545w 已提交
104
    wchar_t *v2;
105
    int l_v2;
L
ljc545w 已提交
106
    wchar_t *Nation;
107
    int l_Nation;
L
ljc545w 已提交
108
    wchar_t *Province;
109
    int l_Province;
L
ljc545w 已提交
110
    wchar_t *City;
111
    int l_City;
L
ljc545w 已提交
112
    wchar_t *BigAvatar;
113
    int l_BigAvatar;
L
ljc545w 已提交
114
    wchar_t *SmallAvatar;
115 116 117 118 119 120
    int l_SmallAvatar;
    DWORD sex;
    BOOL over;
};

/*
121 122 123 124 125 126
 * 保存数据库单个表信息的结构体
 * name:表名;l_name:`name`字符数
 * tbl_name:表名;l_tbl_name:`tbl_name`字符数
 * sql:建表语句;l_sql:`sql`字符数
 * rootpage:表编号;l_rootpage:`rootpage`字符数
 */
L
ljc545w 已提交
127 128 129
struct TableInfoStruct
{
    char *name;
130
    DWORD l_name;
L
ljc545w 已提交
131
    char *tbl_name;
132
    DWORD l_tbl_name;
L
ljc545w 已提交
133
    char *sql;
134
    DWORD l_sql;
L
ljc545w 已提交
135
    char *rootpage;
136 137 138 139
    DWORD l_rootpage;
};

/*
140 141 142 143 144 145 146
 * 保存数据库信息的结构体
 * handle:数据库句柄
 * dbname:数据库名
 * l_dbname:`dbname`字符数
 * tables:保存库中所有表信息的容器
 * count:库中表的数量
 */
L
ljc545w 已提交
147 148
struct DbInfoStruct
{
L
ljc545w 已提交
149 150 151
    DWORD handle = 0;
    wchar_t *dbname = NULL;
    DWORD l_dbname = 0;
152
    vector<TableInfoStruct> tables;
L
ljc545w 已提交
153 154
    DWORD count = 0;
    DWORD extrainfo = 0;
155 156 157
};

/*
158 159 160 161 162 163 164
 * 保存单个好友信息的结构体
 * wxIdAddr:wxid保存地址
 * wxNumberAddr:微信号保存地址
 * wxNickNameAddr:昵称保存地址
 * wxRemarkAddr:备注保存地址
 * WxFriendStructW:默认构造函数
 */
L
ljc545w 已提交
165 166
struct WxFriendStruct
{
167 168 169 170
    DWORD wxIdAddr;
    DWORD wxNumberAddr;
    DWORD wxNickNameAddr;
    DWORD wxRemarkAddr;
171 172 173 174 175
    DWORD wxTypeAddr;
    DWORD wxVerifyFlagAddr;
    WxFriendStruct(DWORD wxIdAddr, DWORD wxNumberAddr,
                   DWORD wxNickNameAddr, DWORD wxRemarkAddr,
                   DWORD wxTypeAddr, DWORD wxVerfifyFlagAddr)
L
ljc545w 已提交
176
    {
177 178 179 180
        this->wxIdAddr = wxIdAddr;
        this->wxNumberAddr = wxNumberAddr;
        this->wxNickNameAddr = wxNickNameAddr;
        this->wxRemarkAddr = wxRemarkAddr;
181 182
        this->wxTypeAddr = wxTypeAddr;
        this->wxVerifyFlagAddr = wxVerfifyFlagAddr;
183
    }
L
ljc545w 已提交
184
};
L
ljc545w 已提交
185

L
ljc545w 已提交
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
typedef struct CHAT_MSGTag
{
    DWORD handle1 = 0;
    DWORD null_value1 = 0;
    ULONG64 sequence = 0x0;
    DWORD null_value2[2] = {0};
    ULONG64 msgsequence = 0x0;
    DWORD localId = 0;
    DWORD null_value3[3] = {0};
    ULONG64 msgid = 0x0;
    DWORD type = 0x1;
    DWORD isSendMsg = 0x1;
    DWORD unknown_value1 = 0x2;
    DWORD create_time = 0x0;
    WxString takler = {0};
    WxString null_string1 = {0};
    WxString content = {0};
    DWORD null_value4[2] = {0};
    DWORD extrabuf = 0;
    DWORD extrabuf_len = 0;
    DWORD null_value5[17] = {0};
    BOOL isSyncMsg = 0x1;
    DWORD null_value6[21] = {0};
    DWORD handle2 = 0;
    DWORD handle3 = 0;
    void *unknown_ptr1 = NULL;
    DWORD null_value7[13] = {0};
    WxString chatroom_member = {0};
    WxString md5 = {0};
    WxString thumbnail = {0};
    WxString file_save_path = {0};
    DWORD null_value8[11] = {0};
    WxString extra_info = {0};
    DWORD null_value9[16] = {0};
    DWORD unknown_value2 = 0x1;
    DWORD unknown_value3 = 0x1;
    DWORD null_value10[7] = {0};
    DWORD unknown_value4 = 0x1;
    DWORD null_value11 = 0;
    DWORD unknown_value5 = 0xFF;
    DWORD unknown_value6 = 0x1;
    DWORD null_value12[6] = {0};
    void *unknown_ptr2 = NULL;
    DWORD null_value13[2] = {0};
} CHAT_MSG, *PCHAT_MSG;

struct WxStringA
L
ljc545w 已提交
233
{
L
ljc545w 已提交
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278
    char buffer[0x10] = {0};
    int length;
    int maxLength;
    WxStringA(string &str)
    {
        this->length = str.length();
        this->maxLength = this->length - (this->length % 0x10) + 0xF;
        if (this->length == 0)
        {
            *(DWORD *)this->buffer = 0;
        }
        else if (this->length < 0x10)
        {
            memcpy(this->buffer, str.c_str(), this->length + 1);
        }
        else
        {
            *(DWORD *)this->buffer = (DWORD)str.c_str();
        }
    }
    WxStringA(const char *buf)
    {
        this->length = strlen(buf);
        this->maxLength = this->length - (this->length % 0x10) + 0xF;
        if (this->length == 0)
        {
            *(DWORD *)this->buffer = 0;
        }
        else if (this->length < 0x10)
        {
            memcpy(this->buffer, buf, this->length + 1);
        }
        else
        {
            *(DWORD *)this->buffer = (DWORD)buf;
        }
    }
    char *get()
    {
        if (this->length < 0x10)
        {
            return this->buffer;
        }
        return (char *)(*(DWORD *)this->buffer);
    }
L
ljc545w 已提交
279
};