之前那种办法发送消息还是不太稳定很容易崩溃闪退
发个稳定的方式吧:
void sendMessage(const WCHAR * pwxid,const WCHAR * pmessage)
{
const WCHAR * writestring = (WCHAR *)pmessage;
int * p = (int*)((int)pWinImplBase+0xDEC);
VString * ptemp1 = new VString;
memcpy(ptemp1,p,sizeof(VString));
wstring temp((WCHAR *)pwxid);
VString * pstring = new VString;
pstring->pstting = (WCHAR*)temp.c_str();
pstring->size = temp.size();
pstring->lsize = temp.size();
memcpy(p,pstring,sizeof(VString));
void * psendwxid = nullptr;
__asm{
pushfd
pushad
mov eax, pWinImplBase
mov ecx,dword ptr ds:[eax+0x9BC]
add ecx,0x9B0
lea eax,dword ptr ds:[ecx+0x14]
mov psendwxid,eax
popad
popfd
}
VString * ptemp2 = new VString;
memcpy(ptemp2,psendwxid,sizeof(VString));
memcpy(psendwxid,pstring,sizeof(VString));
__asm{
pushfd
pushad
mov eax ,writestring
push eax
mov ecx,g_input_richedit
mov eax,[g_input_richedit]
mov eax,[eax]
call [eax+0x2C]
popad
popfd
}
__asm{
pushfd
pushad
mov ecx,pWinImplBase
call g_sendText
popad
popfd
}
//恢复数据
memcpy(p,ptemp1,sizeof(VString));
memcpy(psendwxid,ptemp2,sizeof(VString));
if (ptemp2)
{
delete ptemp2;
}
if (ptemp1)
{
delete ptemp1;
}
if (pstring)
{
delete pstring;
}
}
这种挂机比较稳定,不会出现奇奇怪怪的崩溃闪退,进一步可以优化掉
g_input_richedit
void sendMessage(const WCHAR * pwxid,const WCHAR * pmessage)
{
const WCHAR * writestring = (WCHAR *)pmessage;
int * p = (int*)((int)pWinImplBase+0xDEC);
VString * ptemp1 = new VString;
memcpy(ptemp1,p,sizeof(VString));
wstring temp((WCHAR *)pwxid);
VString * pstring = new VString;
pstring->pstting = (WCHAR*)temp.c_str();
pstring->size = temp.size();
pstring->lsize = temp.size();
memcpy(p,pstring,sizeof(VString));
void * psendwxid = nullptr;
__asm{
pushfd
pushad
mov eax, pWinImplBase
mov ecx,dword ptr ds:[eax+0x9BC]
add ecx,0x9B0
lea eax,dword ptr ds:[ecx+0x14]
mov psendwxid,eax
popad
popfd
}
VString * ptemp2 = new VString;
memcpy(ptemp2,psendwxid,sizeof(VString));
memcpy(psendwxid,pstring,sizeof(VString));
__asm{
pushfd
pushad
mov eax ,writestring
push eax
mov ecx,g_input_richedit
mov eax,[g_input_richedit]
mov eax,[eax]
call [eax+0x2C]
popad
popfd
}
__asm{
pushfd
pushad
mov ecx,pWinImplBase
call g_sendText
popad
popfd
}
//恢复数据
memcpy(p,ptemp1,sizeof(VString));
memcpy(psendwxid,ptemp2,sizeof(VString));
if (ptemp2)
{
delete ptemp2;
}
if (ptemp1)
{
delete ptemp1;
}
if (pstring)
{
delete pstring;
}
}
void sendMessage(const WCHAR * pwxid,const WCHAR * pmessage)
{
const WCHAR * writestring = (WCHAR *)pmessage;
int * p = (int*)((int)pWinImplBase+0xDEC);
VString * ptemp1 = new VString;
memcpy(ptemp1,p,sizeof(VString));
wstring temp((WCHAR *)pwxid);
VString * pstring = new VString;
pstring->pstting = (WCHAR*)temp.c_str();
pstring->size = temp.size();
pstring->lsize = temp.size();
memcpy(p,pstring,sizeof(VString));
void * psendwxid = nullptr;
__asm{
pushfd
pushad
mov eax, pWinImplBase
mov ecx,dword ptr ds:[eax+0x9BC]
add ecx,0x9B0
lea eax,dword ptr ds:[ecx+0x14]
mov psendwxid,eax
popad
popfd
}
VString * ptemp2 = new VString;
memcpy(ptemp2,psendwxid,sizeof(VString));
memcpy(psendwxid,pstring,sizeof(VString));
__asm{
pushfd
pushad
mov eax ,writestring
push eax
mov ecx,g_input_richedit
mov eax,[g_input_richedit]
mov eax,[eax]
call [eax+0x2C]
popad
popfd
}
__asm{
pushfd
pushad
mov ecx,pWinImplBase
call g_sendText
popad
popfd
}
//恢复数据
memcpy(p,ptemp1,sizeof(VString));
memcpy(psendwxid,ptemp2,sizeof(VString));
if (ptemp2)
{
delete ptemp2;
}
if (ptemp1)
{
delete ptemp1;
}
if (pstring)
{
delete pstring;
}
void sendMessage(const WCHAR * pwxid,const WCHAR * pmessage)
{
const WCHAR * writestring = (WCHAR *)pmessage;
int * p = (int*)((int)pWinImplBase+0xDEC);
VString * ptemp1 = new VString;
memcpy(ptemp1,p,sizeof(VString));
wstring temp((WCHAR *)pwxid);
VString * pstring = new VString;
pstring->pstting = (WCHAR*)temp.c_str();
pstring->size = temp.size();
pstring->lsize = temp.size();
memcpy(p,pstring,sizeof(VString));
void * psendwxid = nullptr;
__asm{
pushfd
pushad
mov eax, pWinImplBase
mov ecx,dword ptr ds:[eax+0x9BC]
add ecx,0x9B0
lea eax,dword ptr ds:[ecx+0x14]
mov psendwxid,eax
popad
popfd
}
VString * ptemp2 = new VString;
memcpy(ptemp2,psendwxid,sizeof(VString));
memcpy(psendwxid,pstring,sizeof(VString));
__asm{
pushfd
pushad
mov eax ,writestring
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!