SelfInfo.cpp 1.2 KB
Newer Older
G
Gogs 已提交
1 2
#include "pch.h"

L
ljc545w 已提交
3 4 5 6
struct GetSelfInfoStruct
{
    DWORD message;
    DWORD length;
G
Gogs 已提交
7 8
};

L
ljc545w 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
std::wstring GetSelfInfo(DWORD pid)
{
    wstring SelfInfoString = L"";
    DWORD dwReadSize = 0;
    WeChatProcess hp(pid);
    if (!hp.m_init)
        return L"{}";
    DWORD GetSelfInfoRemoteAddr = hp.GetProcAddr(GetSelfInfoRemote);
    DWORD DeleteSelfInfoCacheRemoteAddr = hp.GetProcAddr(DeleteSelfInfoCacheRemote);
    if (GetSelfInfoRemoteAddr == 0)
        return L"{}";
    DWORD ret = CallRemoteFunction(hp.GetHandle(), GetSelfInfoRemoteAddr, NULL);
    if (ret == 0)
        return L"{}";
    GetSelfInfoStruct selfinfo = {0};
    ReadProcessMemory(hp.GetHandle(), (LPCVOID)ret, &selfinfo, sizeof(GetSelfInfoStruct), &dwReadSize);
    if (selfinfo.length)
    {
        wchar_t *wmessage = new wchar_t[selfinfo.length + 1];
        ZeroMemory(wmessage, (selfinfo.length + 1) * 2);
        ReadProcessMemory(hp.GetHandle(), (LPCVOID)selfinfo.message, wmessage, selfinfo.length * 2, &dwReadSize);
        SelfInfoString = (wstring)wmessage;
        delete[] wmessage;
        wmessage = NULL;
    }
    CallRemoteFunction(hp.GetHandle(), DeleteSelfInfoCacheRemoteAddr, NULL);
    return SelfInfoString;
L
ljc545w 已提交
36
}