Add PYQ control flag
This commit is contained in:
parent
fed3143b19
commit
2d5097ee3d
@ -44,6 +44,7 @@ message Request
|
|||||||
DecPath dec = 10;
|
DecPath dec = 10;
|
||||||
Transfer tf = 11;
|
Transfer tf = 11;
|
||||||
uint64 ui64 = 12; // 64 位整数,通用
|
uint64 ui64 = 12; // 64 位整数,通用
|
||||||
|
bool flag = 13;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
#include "spy_types.h"
|
#include "spy_types.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
extern bool gIsListeningPyq;
|
||||||
extern WxCalls_t g_WxCalls;
|
extern WxCalls_t g_WxCalls;
|
||||||
extern DWORD g_WeChatWinDllAddr;
|
extern DWORD g_WeChatWinDllAddr;
|
||||||
|
|
||||||
@ -62,6 +64,11 @@ static int GetNextPage(uint64_t id)
|
|||||||
|
|
||||||
int RefreshPyq(uint64_t id)
|
int RefreshPyq(uint64_t id)
|
||||||
{
|
{
|
||||||
|
if (!gIsListeningPyq) {
|
||||||
|
LOG_ERROR("没有启动朋友圈消息接收,参考:enable_receiving_msg");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
return GetFirstPage();
|
return GetFirstPage();
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
// Defined in rpc_server.cpp
|
// Defined in rpc_server.cpp
|
||||||
extern bool gIsListening;
|
extern bool gIsListening, gIsListeningPyq;
|
||||||
extern mutex gMutex;
|
extern mutex gMutex;
|
||||||
extern condition_variable gCV;
|
extern condition_variable gCV;
|
||||||
extern queue<WxMsg_t> gMsgQueue;
|
extern queue<WxMsg_t> gMsgQueue;
|
||||||
@ -31,7 +31,6 @@ static DWORD recvPyqHookAddr = 0;
|
|||||||
static DWORD recvPyqCallAddr = 0;
|
static DWORD recvPyqCallAddr = 0;
|
||||||
static DWORD recvPyqJumpBackAddr = 0;
|
static DWORD recvPyqJumpBackAddr = 0;
|
||||||
static CHAR recvPyqBackupCode[5] = { 0 };
|
static CHAR recvPyqBackupCode[5] = { 0 };
|
||||||
static bool gIsListeningPyq = false;
|
|
||||||
|
|
||||||
MsgTypes_t GetMsgTypes()
|
MsgTypes_t GetMsgTypes()
|
||||||
{
|
{
|
||||||
@ -172,7 +171,6 @@ void ListenMessage()
|
|||||||
|
|
||||||
HookAddress(recvMsgHookAddr, RecieveMsgFunc, recvMsgBackupCode);
|
HookAddress(recvMsgHookAddr, RecieveMsgFunc, recvMsgBackupCode);
|
||||||
gIsListening = true;
|
gIsListening = true;
|
||||||
ListenPyq();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnListenMessage()
|
void UnListenMessage()
|
||||||
@ -182,7 +180,6 @@ void UnListenMessage()
|
|||||||
}
|
}
|
||||||
UnHookAddress(recvMsgHookAddr, recvMsgBackupCode);
|
UnHookAddress(recvMsgHookAddr, recvMsgBackupCode);
|
||||||
gIsListening = false;
|
gIsListening = false;
|
||||||
UnListenPyq();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DispatchPyq(DWORD reg)
|
void DispatchPyq(DWORD reg)
|
||||||
|
@ -39,7 +39,8 @@
|
|||||||
|
|
||||||
extern int IsLogin(void); // Defined in spy.cpp
|
extern int IsLogin(void); // Defined in spy.cpp
|
||||||
|
|
||||||
bool gIsListening;
|
bool gIsListening = false;
|
||||||
|
bool gIsListeningPyq = false;
|
||||||
mutex gMutex;
|
mutex gMutex;
|
||||||
condition_variable gCV;
|
condition_variable gCV;
|
||||||
queue<WxMsg_t> gMsgQueue;
|
queue<WxMsg_t> gMsgQueue;
|
||||||
@ -377,7 +378,7 @@ static void PushMessage()
|
|||||||
nng_close(msg_sock);
|
nng_close(msg_sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool func_enable_recv_txt(uint8_t *out, size_t *len)
|
bool func_enable_recv_txt(bool pyq, uint8_t *out, size_t *len)
|
||||||
{
|
{
|
||||||
Response rsp = Response_init_default;
|
Response rsp = Response_init_default;
|
||||||
rsp.func = Functions_FUNC_ENABLE_RECV_TXT;
|
rsp.func = Functions_FUNC_ENABLE_RECV_TXT;
|
||||||
@ -385,6 +386,9 @@ bool func_enable_recv_txt(uint8_t *out, size_t *len)
|
|||||||
rsp.msg.status = -1;
|
rsp.msg.status = -1;
|
||||||
|
|
||||||
ListenMessage();
|
ListenMessage();
|
||||||
|
if (pyq) {
|
||||||
|
ListenPyq();
|
||||||
|
}
|
||||||
HANDLE msgThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PushMessage, NULL, NULL, NULL);
|
HANDLE msgThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PushMessage, NULL, NULL, NULL);
|
||||||
if (msgThread != 0) {
|
if (msgThread != 0) {
|
||||||
CloseHandle(msgThread);
|
CloseHandle(msgThread);
|
||||||
@ -408,6 +412,7 @@ bool func_disable_recv_txt(uint8_t *out, size_t *len)
|
|||||||
rsp.which_msg = Response_status_tag;
|
rsp.which_msg = Response_status_tag;
|
||||||
rsp.msg.status = 0;
|
rsp.msg.status = 0;
|
||||||
|
|
||||||
|
UnListenPyq();
|
||||||
UnListenMessage(); // 可能需要1秒之后才能退出,见 PushMessage
|
UnListenMessage(); // 可能需要1秒之后才能退出,见 PushMessage
|
||||||
|
|
||||||
pb_ostream_t stream = pb_ostream_from_buffer(out, *len);
|
pb_ostream_t stream = pb_ostream_from_buffer(out, *len);
|
||||||
@ -650,7 +655,8 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len
|
|||||||
#endif
|
#endif
|
||||||
case Functions_FUNC_ENABLE_RECV_TXT: {
|
case Functions_FUNC_ENABLE_RECV_TXT: {
|
||||||
LOG_DEBUG("[Functions_FUNC_ENABLE_RECV_TXT]");
|
LOG_DEBUG("[Functions_FUNC_ENABLE_RECV_TXT]");
|
||||||
ret = func_enable_recv_txt(out, out_len);
|
LOG_BUFFER(in, in_len);
|
||||||
|
ret = func_enable_recv_txt(req.msg.flag, out, out_len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Functions_FUNC_DISABLE_RECV_TXT: {
|
case Functions_FUNC_DISABLE_RECV_TXT: {
|
||||||
|
@ -358,7 +358,7 @@ class Wcf():
|
|||||||
"""
|
"""
|
||||||
return self.msgQ.get(block, timeout=1)
|
return self.msgQ.get(block, timeout=1)
|
||||||
|
|
||||||
def enable_receiving_msg(self) -> bool:
|
def enable_receiving_msg(self, pyq=False) -> bool:
|
||||||
"""允许接收消息,成功后通过 `get_msg` 读取消息"""
|
"""允许接收消息,成功后通过 `get_msg` 读取消息"""
|
||||||
def listening_msg():
|
def listening_msg():
|
||||||
rsp = wcf_pb2.Response()
|
rsp = wcf_pb2.Response()
|
||||||
@ -379,13 +379,14 @@ class Wcf():
|
|||||||
|
|
||||||
req = wcf_pb2.Request()
|
req = wcf_pb2.Request()
|
||||||
req.func = wcf_pb2.FUNC_ENABLE_RECV_TXT # FUNC_ENABLE_RECV_TXT
|
req.func = wcf_pb2.FUNC_ENABLE_RECV_TXT # FUNC_ENABLE_RECV_TXT
|
||||||
|
req.flag = pyq
|
||||||
rsp = self._send_request(req)
|
rsp = self._send_request(req)
|
||||||
if rsp.status != 0:
|
if rsp.status != 0:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self._is_receiving_msg = True
|
self._is_receiving_msg = True
|
||||||
# 阻塞,把控制权交给用户
|
# 阻塞,把控制权交给用户
|
||||||
# self._rpc_get_message(callback)
|
# self.listening_msg(callback)
|
||||||
|
|
||||||
# 不阻塞,启动一个新的线程来接收消息
|
# 不阻塞,启动一个新的线程来接收消息
|
||||||
Thread(target=listening_msg, name="GetMessage", daemon=True).start()
|
Thread(target=listening_msg, name="GetMessage", daemon=True).start()
|
||||||
@ -541,7 +542,6 @@ class Wcf():
|
|||||||
rsp = self._send_request(req)
|
rsp = self._send_request(req)
|
||||||
return rsp.status
|
return rsp.status
|
||||||
|
|
||||||
|
|
||||||
def decrypt_image(self, src: str, dst: str) -> bool:
|
def decrypt_image(self, src: str, dst: str) -> bool:
|
||||||
"""解密图片:
|
"""解密图片:
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user