Compare commits

...

6 Commits

Author SHA1 Message Date
ttttupup
fa90a0ea87
Merge pull request #515 from npt-1707/fix-CVE-2023-2905
fixed mqtt variable length header issue
2025-04-23 17:25:30 +08:00
npt-1707
335a4771fe fixed mqtt variable length header issue 2025-04-23 04:08:11 +08:00
ttttupup
24bb7212fa
Merge pull request #505 from FantasyZhou/main
fix:修正GetPIDForProcess获取不到进程ID的bug
2025-01-20 08:41:25 +08:00
Ferris
1528b66b94 fix:修正GetPIDForProcess获取不到进程ID的bug 2025-01-17 10:24:45 +08:00
ttttupup
62a641d7f7
Merge pull request #446 from aiwillcoming/main
add postman doc
2024-07-31 20:58:02 +08:00
aiwillcoming
49188b7ef0
add postman doc 2024-07-28 23:13:11 +08:00
3 changed files with 657 additions and 17 deletions

640
doc/postman.json Normal file
View File

@ -0,0 +1,640 @@
{
"info": {
"name": "Wechat Hook 395",
"_postman_id": "d2b6a4f2-6d7d-4a21-9bbf-65b5a5a3a5a",
"description": "A collection of Wechat Hook 395 API requests.",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "checkLogin",
"request": {
"url": {
"raw": "http://127.0.0.1:19088/api/checkLogin",
"protocol": "http",
"host": [
"127.0.0.1"
],
"port": "19088",
"path": [
"api",
"checkLogin"
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to check login status."
}
},
{
"name": "userInfo",
"request": {
"url": {
"raw": "http://127.0.0.1:19088/api/userInfo",
"protocol": "http",
"host": [
"127.0.0.1"
],
"port": "19088",
"path": [
"api",
"userInfo"
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to get user information."
}
},
{
"name": "sendTextMsg",
"request": {
"url": {
"raw": "http://127.0.0.1:19088/api/sendTextMsg",
"protocol": "http",
"host": [
"127.0.0.1"
],
"port": "19088",
"path": [
"api",
"sendTextMsg"
]
},
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\"wxid\": \"filehelper\",\"msg\": \"12www\"}"
},
"description": "API to send text messages."
}
},
{
"name": "sendImagesMsg",
"request": {
"url": "http://127.0.0.1:19088/api/sendImagesMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"wxid\": \"filehelper\",\"imagePath\": \"C:\\pic.png\"}"
},
"description": "API to send image messages."
}
},
{
"name": "sendFileMsg",
"request": {
"url": "http://127.0.0.1:19088/api/sendFileMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"wxid\": \"filehelper\",\"filePath\": \"C:\\test.zip\"}"
},
"description": "API to send file messages."
}
},
{
"name": "hookSyncMsg",
"request": {
"url": "http://127.0.0.1:19088/api/hookSyncMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"port\": \"19099\",\"ip\": \"127.0.0.1\",\"url\": \"http://localhost:8080\",\"timeout\": \"3000\",\"enableHttp\": \"0\"}"
},
"description": "API to hook sync messages."
}
},
{
"name": "unhookSyncMsg",
"request": {
"url": "http://127.0.0.1:19088/api/unhookSyncMsg",
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to unhook sync messages."
}
},
{
"name": "getContactList",
"request": {
"url": "http://127.0.0.1:19088/api/getContactList",
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to get the contact list."
}
},
{
"name": "getDBInfo",
"request": {
"url": "http://127.0.0.1:19088/api/getDBInfo",
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to get database information."
}
},
{
"name": "execSql",
"request": {
"url": "http://127.0.0.1:19088/api/execSql",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"dbHandle\": 1713425147584,\"sql\": \"select * from MSG where localId =100;\"}"
},
"description": "API to execute SQL queries."
}
},
{
"name": "getChatRoomDetailInfo",
"request": {
"url": "http://127.0.0.1:19088/api/getChatRoomDetailInfo",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"123333@chatroom\"}"
},
"description": "API to get chat room detail information."
}
},
{
"name": "addMemberToChatRoom",
"request": {
"url": "http://127.0.0.1:19088/api/addMemberToChatRoom",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"123@chatroom\",\"memberIds\": \"wxid_123\"}"
},
"description": "API to add member to chat room."
}
},
{
"name": "delMemberFromChatRoom",
"request": {
"url": "http://127.0.0.1:19088/api/delMemberFromChatRoom",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"21363231004@chatroom\",\"memberIds\": \"wxid_123\"}"
},
"description": "API to delete member from chat room."
}
},
{
"name": "modifyNickname",
"request": {
"url": "http://127.0.0.1:19088/api/modifyNickname",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"123@chatroom\",\"wxid\": \"wxid_123\",\"nickName\": \"test\"}"
},
"description": "API to modify a nickname in a chat room."
}
},
{
"name": "getMemberFromChatRoom",
"request": {
"url": "http://127.0.0.1:19088/api/getMemberFromChatRoom",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"123@chatroom\"}"
},
"description": "API to get members from a chat room."
}
},
{
"name": "topMsg",
"request": {
"url": "http://127.0.0.1:19088/api/topMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"msgId\": 1222222}"
},
"description": "API to top a message."
}
},
{
"name": "removeTopMsg",
"request": {
"url": "http://127.0.0.1:19088/api/removeTopMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"123@chatroom\",\"msgId\": 123}"
},
"description": "API to remove a topped message."
}
},
{
"name": "InviteMemberToChatRoom",
"request": {
"url": "http://127.0.0.1:19088/api/InviteMemberToChatRoom",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"123@chatroom\",\"memberIds\": \"wxid_123\"}"
},
"description": "API to invite members to a chat room."
}
},
{
"name": "hookLog",
"request": {
"url": "http://127.0.0.1:19088/api/hookLog",
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to hook logs."
}
},
{
"name": "unhookLog",
"request": {
"url": "http://127.0.0.1:19088/api/unhookLog",
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to unhook logs."
}
},
{
"name": "createChatRoom",
"request": {
"url": "http://127.0.0.1:19088/api/createChatRoom",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"memberIds\": \"wxid_8yn4k908tdqp22,wxid_oyb662qhop4422\"}"
},
"description": "API to create a chat room."
}
},
{
"name": "quitChatRoom",
"request": {
"url": "http://127.0.0.1:19088/api/quitChatRoom",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"chatRoomId\": \"123@chatroom\"}"
},
"description": "API to quit a chat room."
}
},
{
"name": "forwardMsg",
"request": {
"url": "http://127.0.0.1:19088/api/forwardMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"wxid\": \"filehelper\",\"msgId\": \"12331\"}"
},
"description": "API to forward a message."
}
},
{
"name": "getSNSFirstPage",
"request": {
"url": "http://127.0.0.1:19088/api/getSNSFirstPage",
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": ""
},
"description": "API to get the first page of SNS data."
}
},
{
"name": "getSNSNextPage",
"request": {
"url": "http://127.0.0.1:19088/api/getSNSNextPage",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"snsId\": \"\"}"
},
"description": "API to get the next page of SNS data."
}
},
{
"name": "addFavFromMsg",
"request": {
"url": "http://127.0.0.1:19088/api/addFavFromMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"msgId\": \"1222222\"}"
},
"description": "API to add a favorite from a message."
}
},
{
"name": "addFavFromImage",
"request": {
"url": "http://127.0.0.1:19088/api/addFavFromImage",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"wxid\": \"\",\"imagePath\": \"\"}"
},
"description": "API to add a favorite from an image."
}
},
{
"name": "getContactProfile",
"request": {
"url": "http://127.0.0.1:19088/api/getContactProfile",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"wxid\": \"\"}"
},
"description": "API to get contact profile."
}
},
{
"name": "sendAtText",
"request": {
"url": "http://127.0.0.1:19088/api/sendAtText",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"wxids\": \"notify@all\",\"chatRoomId\": \"123@chatroom\",\"msg\": \"你好啊\"}"
},
"description": "API to send an at-text message."
}
},
{
"name": "forwardPublicMsg",
"request": {
"url": "http://127.0.0.1:19088/api/forwardPublicMsg",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"appName\": \"\",\"userName\": \"\",\"title\": \"\",\"url\": \"\",\"thumbUrl\": \"\",\"digest\": \"\",\"wxid\": \"filehelper\"}"
},
"description": "API to forward a public message."
}
},
{
"name": "forwardPublicMsgByMsgId",
"request": {
"url": "http://127.0.0.1:19088/api/forwardPublicMsgByMsgId",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"msgId\": 123,\"wxid\": \"filehelper\"}"
},
"description": "API to forward a public message by message ID."
}
},
{
"name": "downloadAttach",
"request": {
"url": "http://127.0.0.1:19088/api/downloadAttach",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"msgId\": 123}"
},
"description": "API to download an attachment."
}
},
{
"name": "decodeImage",
"request": {
"url": "http://127.0.0.1:19088/api/decodeImage",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"filePath\": \"C:\\66664816980131.dat\",\"storeDir\": \"C:\\test\"}"
},
"description": "API to decode an image."
}
},
{
"name": "getVoiceByMsgId",
"request": {
"url": "http://127.0.0.1:19088/api/getVoiceByMsgId",
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"description": "Specify that the request body is in JSON format."
}
],
"body": {
"mode": "raw",
"raw": "{\"msgId\": 7880439644200,\"storeDir\": \"c:\\test\"}"
},
"description": "API to get voice by message ID."
}
}
]
}

View File

@ -526,7 +526,7 @@ DWORD GetPIDForProcess(wchar_t* process)
if (!hSnapshot) {
return 0;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
pe32.dwSize = sizeof(PROCESSENTRY32W);
for (working = Process32FirstW(hSnapshot, &pe32); working; working = Process32NextW(hSnapshot, &pe32))
{
if (!wcscmp(pe32.szExeFile, process))
@ -933,7 +933,7 @@ int InjectDll(wchar_t* szPName, wchar_t* szDllPath)
result = 1;
}
else
{
{
DWORD dErrorCode = GetLastError();
printf("dll inject fail");
printf("error code : %d ", dErrorCode);

View File

@ -3000,21 +3000,20 @@ static int encode_variable_length(uint8_t *buf, size_t value) {
return len;
}
static uint32_t decode_variable_length(const char *buf,
uint32_t *bytes_consumed) {
uint32_t value = 0, multiplier = 1, offset;
static size_t decode_varint(const uint8_t *buf, size_t len, size_t *value) {
uint32_t multiplier = 1;
size_t offset;
*value = 0;
for (offset = 0; offset < 4; offset++) {
uint8_t encoded_byte = ((uint8_t *) buf)[offset];
value += (encoded_byte & 0x7F) * multiplier;
for (offset = 0; offset < 4 && offset < len; offset++) {
uint8_t encoded_byte = buf[offset];
*value += (encoded_byte & 0x7F) * multiplier;
multiplier *= 128;
if (!(encoded_byte & 0x80)) break;
if (!(encoded_byte & 0x80)) return offset + 1;
}
if (bytes_consumed != NULL) *bytes_consumed = offset + 1;
return value;
return 0;
}
static int mqtt_prop_type_by_id(uint8_t prop_id) {
@ -3107,8 +3106,8 @@ static void mg_send_mqtt_properties(struct mg_connection *c,
size_t mg_mqtt_next_prop(struct mg_mqtt_message *msg, struct mg_mqtt_prop *prop,
size_t ofs) {
uint8_t *i = (uint8_t *) msg->dgram.ptr + msg->props_start + ofs;
size_t new_pos = ofs;
uint32_t bytes_consumed;
uint8_t *end = (uint8_t *) msg->dgram.ptr + msg->dgram.len;
size_t new_pos = ofs, len;
prop->id = i[0];
if (ofs >= msg->dgram.len || ofs >= msg->props_start + msg->props_size)
@ -3148,8 +3147,8 @@ size_t mg_mqtt_next_prop(struct mg_mqtt_message *msg, struct mg_mqtt_prop *prop,
new_pos += 2 + prop->val.len;
break;
case MQTT_PROP_TYPE_VARIABLE_INT:
prop->iv = decode_variable_length((char *) i, &bytes_consumed);
new_pos += bytes_consumed;
len = decode_varint(i, (size_t) (end - i), (size_t *) &prop->iv);
new_pos = (!len) ? 0 : new_pos + len;
break;
default: new_pos = 0;
}
@ -3314,7 +3313,8 @@ int mg_mqtt_parse(const uint8_t *buf, size_t len, uint8_t version,
}
if (p > end) return MQTT_MALFORMED;
if (version == 5 && p + 2 < end) {
m->props_size = decode_variable_length((char *) p, &len_len);
len_len = (uint32_t) decode_varint(p, (size_t) (end - p), &m->props_size);
if (!len_len) return MQTT_MALFORMED;
m->props_start = (size_t) (p + len_len - buf);
p += len_len + m->props_size;
}