无法将参数 '1' 的 'CHAR* {aka char*}' 转换为 'wchar_t*' 到 'wchar_t* wcscpy(wchar_t*, const wchar_t*)'

问题描述 投票:0回答:1

我正在尝试使用windws api (windows.h) 和tlhelp32.h 在C 中进行进程注入。但我无法执行它。首先,我获取进程并进行比较,以了解我想要注入的进程是否正在执行,但是当我进行比较时,我收到一条错误,指出类型错误:

PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Process32First(snapshot, &pe32);

do {
    if(wcscmp(pe32.szExeFile, L"mspaint.exe")==0) {
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
        LPVOID allocated_mem = VirtualAllocEx(hProcess, NULL, sizeof(shellcode), (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);

        if (allocated_mem == NULL){
            printf("Memory allocation failed: %u\n", GetLastError());
            return 1;
        }

        printf("Memory page allocated at: 0x%p\n", allocated_mem);
        WriteProcessMemory(hProcess, allocated_mem, shellcode, sizeof(shellcode), NULL);

        HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)allocated_mem, NULL, 0, NULL);

        if (hThread == NULL){
            printf("Failed to obtain handle to process: %u\n", GetLastError());
            return 1;
        }

        WaitForSingleObject(hThread, INFINITE);
        VirtualFreeEx(hThread, allocated_mem, 0, MEM_RELEASE);
        CloseHandle(hThread);
        CloseHandle(hProcess);
        break;
    } 

} while(Process32Next(snapshot, &pe32));

我也尝试过不检查这一点,只输入进程 ID,但它也不起作用。 shellcode(消息框)被注入到进程的内存中,但消息框没有显示,我不知道为什么。我需要帮助,蒂。

c winapi wchar-t wchar
1个回答
0
投票

您正在使用 TLHelp32 API 的

TCHAR
版本,并且正在针对 ANSI 而不是 UNICODE 编译项目,因此
PROCESSENTRY32
Process32(First|Next)
分别映射到
PROCESSENTRY32A
Process32(First|Next)A
。因此,
pe32.szExeFile
字段是一个
char
字符串,并且您尝试将其传递给
wcscmp()
,而它需要一个
wchar_t
字符串,因此会出现错误。

因此,您需要:

  1. 更改项目配置以启用

    UNICODE
    ,然后使用
    _tcscmp()
    ,而不是
    wcscmp()

  2. 保持项目不变,但使用

    strcmp()
    而不是
    wcscmp()

  3. 停止使用基于

    TCHAR
    的 API。请改用基于
    wchar_t
    的 API,以及
    wcscmp()

© www.soinside.com 2019 - 2024. All rights reserved.