mirror of
https://github.com/ttttupup/wxhelper.git
synced 2024-11-23 02:39:25 +08:00
3.9.2.23部分更新
This commit is contained in:
parent
1a1a1fe964
commit
789b4b6e75
20
README.md
20
README.md
@ -10,13 +10,13 @@
|
|||||||
10.取消hook消息
|
10.取消hook消息
|
||||||
11.hook图片
|
11.hook图片
|
||||||
12.取消hook图片
|
12.取消hook图片
|
||||||
<!-- 13.hook语音
|
13.hook语音
|
||||||
14.取消hook语音
|
14.取消hook语音
|
||||||
17.删除好友
|
<!-- 17.删除好友 -->
|
||||||
19.通过手机或qq查找微信
|
<!-- 19.通过手机或qq查找微信 -->
|
||||||
20.通过wxid添加好友
|
<!-- 20.通过wxid添加好友 -->
|
||||||
25.获取群成员
|
25.获取群成员
|
||||||
26.获取群成员昵称
|
<!-- 26.获取群成员昵称
|
||||||
27.删除群成员
|
27.删除群成员
|
||||||
28.增加群成员
|
28.增加群成员
|
||||||
31.修改群昵称 -->
|
31.修改群昵称 -->
|
||||||
@ -28,15 +28,15 @@
|
|||||||
44.退出登录
|
44.退出登录
|
||||||
<!-- 45.确认收款 -->
|
<!-- 45.确认收款 -->
|
||||||
46.联系人列表
|
46.联系人列表
|
||||||
<!-- 47.获取群详情
|
<!-- 47.获取群详情 -->
|
||||||
48.获取解密图片
|
48.获取解密图片
|
||||||
49.图片提取文字ocr
|
<!-- 49.图片提取文字ocr -->
|
||||||
50.拍一拍
|
50.拍一拍
|
||||||
51.群消息置顶消息
|
<!-- 51.群消息置顶消息
|
||||||
52.群消息取消置顶
|
52.群消息取消置顶 -->
|
||||||
53.朋友圈首页
|
53.朋友圈首页
|
||||||
54.朋友圈下一页
|
54.朋友圈下一页
|
||||||
55.获取联系人或者群名称
|
<!-- 55.获取联系人或者群名称
|
||||||
56.获取消息附件(图片,视频,文件) -->
|
56.获取消息附件(图片,视频,文件) -->
|
||||||
### 接口文档:
|
### 接口文档:
|
||||||
|
|
||||||
|
@ -228,6 +228,7 @@ void api_handle(mg_http_message *hm, struct mg_connection *c, string &ret) {
|
|||||||
{"signature",self_info.signature},
|
{"signature",self_info.signature},
|
||||||
{"dataSavePath",self_info.data_save_path},
|
{"dataSavePath",self_info.data_save_path},
|
||||||
{"currentDataPath",self_info.current_data_path},
|
{"currentDataPath",self_info.current_data_path},
|
||||||
|
{"dbKey",self_info.db_key},
|
||||||
};
|
};
|
||||||
ret_data["data"] = j_info;
|
ret_data["data"] = j_info;
|
||||||
}
|
}
|
||||||
|
@ -7,16 +7,16 @@
|
|||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#define WX_CHAT_ROOM_MGR_OFFSET 0x72cf60
|
#define WX_CHAT_ROOM_MGR_OFFSET 0x78cf20
|
||||||
#define WX_GET_CHAT_ROOM_DETAIL_INFO_OFFSET 0xb6f260
|
#define WX_GET_CHAT_ROOM_DETAIL_INFO_OFFSET 0xb6f260
|
||||||
#define WX_NEW_CHAT_ROOM_INFO_OFFSET 0xe15de0
|
#define WX_NEW_CHAT_ROOM_INFO_OFFSET 0xe15de0
|
||||||
#define WX_FREE_CHAT_ROOM_INFO_OFFSET 0xe160b0
|
#define WX_FREE_CHAT_ROOM_INFO_OFFSET 0xe160b0
|
||||||
#define WX_DEL_CHAT_ROOM_MEMBER_OFFSET 0xb64180
|
#define WX_DEL_CHAT_ROOM_MEMBER_OFFSET 0xb64180
|
||||||
#define WX_INIT_CHAT_MSG_OFFSET 0xed3be0
|
#define WX_INIT_CHAT_MSG_OFFSET 0xed3be0
|
||||||
#define WX_ADD_MEMBER_TO_CHAT_ROOM_OFFSET 0xb63c50
|
#define WX_ADD_MEMBER_TO_CHAT_ROOM_OFFSET 0xb63c50
|
||||||
#define WX_GET_MEMBER_FROM_CHAT_ROOM_OFFSET 0xB70260
|
#define WX_GET_MEMBER_FROM_CHAT_ROOM_OFFSET 0xbdf260
|
||||||
#define WX_INIT_CHAT_ROOM_OFFSET 0xe13b30
|
#define WX_INIT_CHAT_ROOM_OFFSET 0xe97890
|
||||||
#define WX_FREE_CHAT_ROOM_OFFSET 0xe13d50
|
#define WX_FREE_CHAT_ROOM_OFFSET 0xe97ab0
|
||||||
#define WX_MOD_CHAT_ROOM_MEMBER_NICK_NAME_OFFSET 0xb6adf0
|
#define WX_MOD_CHAT_ROOM_MEMBER_NICK_NAME_OFFSET 0xb6adf0
|
||||||
#define WX_NEW_CHAT_MSG_OFFSET 0x70e2a0
|
#define WX_NEW_CHAT_MSG_OFFSET 0x70e2a0
|
||||||
#define WX_FREE_CHAT_MSG_OFFSET 0x6f4ea0
|
#define WX_FREE_CHAT_MSG_OFFSET 0x6f4ea0
|
||||||
|
@ -143,3 +143,48 @@ void CloseConsole(){
|
|||||||
fclose(stderr);
|
fclose(stderr);
|
||||||
FreeConsole();
|
FreeConsole();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string EncodeHexString(const std::string &str) {
|
||||||
|
const std::string hex_table = "0123456789abcdef";
|
||||||
|
string sb;
|
||||||
|
for (int i = 0; i < str.length(); i++) {
|
||||||
|
sb += hex_table.at((str[i] & 0xf0) >> 4);
|
||||||
|
sb += hex_table.at((str[i] & 0x0f) >> 0);
|
||||||
|
}
|
||||||
|
return sb;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Hex2String(const std::string &hex_str) {
|
||||||
|
std::string ret;
|
||||||
|
const std::string hex_table = "0123456789abcdef";
|
||||||
|
for (int i = 0; i < hex_str.length(); i += 2) {
|
||||||
|
ret += BYTE(hex_table.find(hex_str.at(i)) << 4 |
|
||||||
|
hex_table.find(hex_str.at(i + 1)));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Bytes2Hex(const BYTE *bytes, const int length) {
|
||||||
|
if (bytes == NULL) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
std::string buff;
|
||||||
|
const int len = length;
|
||||||
|
for (int j = 0; j < len; j++) {
|
||||||
|
int high = bytes[j] / 16, low = bytes[j] % 16;
|
||||||
|
buff += (high < 10) ? ('0' + high) : ('a' + high - 10);
|
||||||
|
buff += (low < 10) ? ('0' + low) : ('a' + low - 10);
|
||||||
|
}
|
||||||
|
return buff;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Hex2Bytes(const std::string &hex, BYTE *bytes) {
|
||||||
|
int byte_len = hex.length() / 2;
|
||||||
|
std::string str;
|
||||||
|
unsigned int n;
|
||||||
|
for (int i = 0; i < byte_len; i++) {
|
||||||
|
str = hex.substr(i * 2, 2);
|
||||||
|
sscanf_s(str.c_str(), "%x", &n);
|
||||||
|
bytes[i] = n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -55,6 +55,14 @@ BOOL FindOrCreateDirectoryW(const wchar_t *path);
|
|||||||
|
|
||||||
void CloseConsole();
|
void CloseConsole();
|
||||||
|
|
||||||
|
std::string EncodeHexString(const std::string &str);
|
||||||
|
|
||||||
|
std::string Hex2String(const std::string &hex_str);
|
||||||
|
|
||||||
|
std::string Bytes2Hex(const BYTE *bytes, const int length);
|
||||||
|
|
||||||
|
void Hex2Bytes(const std::string &hex, BYTE *bytes);
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
std::vector<T1> split(T1 str, T2 letter) {
|
std::vector<T1> split(T1 str, T2 letter) {
|
||||||
vector<T1> arr;
|
vector<T1> arr;
|
||||||
|
@ -30,6 +30,7 @@ int ForwardMsg(wchar_t *wxid, unsigned long long msgid) {
|
|||||||
LEA ESI,to_user
|
LEA ESI,to_user
|
||||||
PUSH ESI
|
PUSH ESI
|
||||||
CALL init_chat_msg_addr
|
CALL init_chat_msg_addr
|
||||||
|
XOR ECX,ECX
|
||||||
CALL forward_msg_addr
|
CALL forward_msg_addr
|
||||||
MOVZX EAX,AL
|
MOVZX EAX,AL
|
||||||
MOV success,EAX
|
MOV success,EAX
|
||||||
|
@ -12,8 +12,8 @@ using namespace nlohmann;
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
#define WX_RECV_MSG_HOOK_OFFSET 0xd19a0b
|
#define WX_RECV_MSG_HOOK_OFFSET 0xd19a0b
|
||||||
#define WX_RECV_MSG_HOOK_NEXT_OFFSET 0x756960
|
#define WX_RECV_MSG_HOOK_NEXT_OFFSET 0x756960
|
||||||
#define WX_SNS_HOOK_OFFSET 0x143ef09
|
#define WX_SNS_HOOK_OFFSET 0x14f9e15
|
||||||
#define WX_SNS_HOOK_NEXT_OFFSET 0x143f1b0
|
#define WX_SNS_HOOK_NEXT_OFFSET 0x14fa0a0
|
||||||
|
|
||||||
// SyncMgr::addMsgListToDB
|
// SyncMgr::addMsgListToDB
|
||||||
// #define WX_RECV_MSG_HOOK_OFFSET 0xB9C919
|
// #define WX_RECV_MSG_HOOK_OFFSET 0xB9C919
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "wechat_data.h"
|
#include "wechat_data.h"
|
||||||
|
|
||||||
#define WX_PAT_MGR_OFFSET 0x8d0c00
|
#define WX_PAT_MGR_OFFSET 0x931730
|
||||||
#define WX_SEND_PAT_MSG_OFFSET 0x1369850
|
#define WX_SEND_PAT_MSG_OFFSET 0x1421940
|
||||||
#define WX_RET_OFFSET 0x1C94D34
|
#define WX_RET_OFFSET 0x1D58751
|
||||||
|
|
||||||
int SendPatMsg(wchar_t* chat_room_id, wchar_t* wxid) {
|
int SendPatMsg(wchar_t* chat_room_id, wchar_t* wxid) {
|
||||||
int success = -1;
|
int success = -1;
|
||||||
|
@ -141,6 +141,15 @@ int GetSelfInfo(SelfInfoInner &out) {
|
|||||||
*(DWORD *)(service_addr + 0x304 + 0x10));
|
*(DWORD *)(service_addr + 0x304 + 0x10));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*(DWORD *)(service_addr + 0x4CC) == 0 ||
|
||||||
|
*(DWORD *)(service_addr +0x4D0) == 0) {
|
||||||
|
out.db_key = string();
|
||||||
|
} else {
|
||||||
|
DWORD byte_addr = *(DWORD *)(service_addr + 0x4CC);
|
||||||
|
DWORD len = *(DWORD *)(service_addr +0x4D0);
|
||||||
|
out.db_key = Bytes2Hex((BYTE *)byte_addr,len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WeChatString data_save_path;
|
WeChatString data_save_path;
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "wechat_data.h"
|
#include "wechat_data.h"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
#define WX_SNS_DATA_MGR_OFFSET 0xbc4100
|
#define WX_SNS_DATA_MGR_OFFSET 0xc39680
|
||||||
#define WX_SNS_GET_FIRST_PAGE_OFFSET 0x1427be0
|
#define WX_SNS_GET_FIRST_PAGE_OFFSET 0x14e2140
|
||||||
#define WX_SNS_GET_NEXT_PAGE_OFFSET 0x1427c80
|
#define WX_SNS_GET_NEXT_PAGE_OFFSET 0x14e21e0
|
||||||
|
|
||||||
int GetFirstPage() {
|
int GetFirstPage() {
|
||||||
int success = -1;
|
int success = -1;
|
||||||
|
@ -153,6 +153,7 @@ struct SelfInfoInner{
|
|||||||
std::string data_save_path;
|
std::string data_save_path;
|
||||||
std::string signature;
|
std::string signature;
|
||||||
std::string current_data_path;
|
std::string current_data_path;
|
||||||
|
std::string db_key;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UserInfo {
|
struct UserInfo {
|
||||||
|
Loading…
Reference in New Issue
Block a user