inject.cpp 1.3 KB
Newer Older
1 2 3
#include "pch.h"
#include "driver.h"

L
ljc545w 已提交
4
BOOL InjectDll(DWORD pid, const wchar_t *szPath)
5
{
L
ljc545w 已提交
6 7 8 9
    WeChatProcess hp(pid);
    if (hp.m_init == false)
        return FALSE;
    WeChatData<wchar_t *> pRemoteAddress(hp.GetHandle(), (wchar_t *)szPath, TEXTLENGTH(szPath));
10
#ifdef _WIN64
L
ljc545w 已提交
11
    PVOID pFunc = GetSystem32ProcAddr(L"\\KnownDlls32\\kernel32.dll", "LoadLibraryW");
12 13 14
#else
    PVOID pFunc = LoadLibraryW;
#endif
L
ljc545w 已提交
15
    if (pFunc == NULL)
16
        return false;
L
ljc545w 已提交
17
    DWORD ret = CallRemoteFunction(hp.GetHandle(), pFunc, pRemoteAddress.GetAddr());
18 19 20
    return true;
}

L
ljc545w 已提交
21 22 23 24 25 26 27
BOOL RemoveDll(DWORD pid)
{
    WeChatProcess hp(pid);
    if (hp.m_init == false)
        return FALSE;
    DWORD dwHandle = hp.WeChatRobotBase();
    if (dwHandle == 0)
28
        return true;
L
ljc545w 已提交
29
    PVOID pFunc = NULL;
30 31 32 33 34
#ifdef _WIN64
    pFunc = GetSystem32ProcAddr(L"\\KnownDlls32\\kernel32.dll", "FreeConsole");
#else
    pFunc = FreeConsole;
#endif
L
ljc545w 已提交
35
    if (pFunc == NULL)
36
        return false;
L
ljc545w 已提交
37
    CallRemoteFunction(hp.GetHandle(), pFunc, NULL);
38 39 40 41 42
#ifdef _WIN64
    pFunc = GetSystem32ProcAddr(L"\\KnownDlls32\\kernel32.dll", "FreeLibrary");
#else
    pFunc = FreeLibrary;
#endif
L
ljc545w 已提交
43
    if (pFunc == NULL)
44
        return false;
L
ljc545w 已提交
45 46 47
    do
        CallRemoteFunction(hp.GetHandle(), pFunc, dwHandle);
    while (hp.WeChatRobotBase() != 0);
48
    return true;
L
ljc545w 已提交
49
}