C ++ / CX UWP API Windows Desktop не найдены - PullRequest
0 голосов
/ 16 мая 2019

Я создаю приложение UWP, которое позволит мне внедрить DLL в приложение. При использовании функций Windows API UWP считает, что функции не определены.

Я искал в Интернете исходные коды DLL, но ни один из них действительно не использует UWP. Я попытался использовать только исходный код для инъекций: https://github.com/saeedirha/DLL-Injector. Я подозреваю, что причина, по которой UWP не идентифицирует функции, заключается в том, что он не находится в нужном пространстве имен. Я могу ошибаться, но я подозреваю, что это и есть причина.

#include <ctype.h>
#include <Windows.h>
#include <tlhelp32.h>
#include <Shlwapi.h>
#include <tchar.h> 
#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "user32.lib")
bool InjectDLL(const int& pid, const std::string& DLL_Path)
{


long dll_size = DLL_Path.length() + 1;


HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);



if (hProc == NULL)
{
    //cerr << "[!]Fail to open target process!" << endl;
    return false;
}
//cout << "[+]Opening Target Process..." << endl;

LPVOID MyAlloc = VirtualAllocEx(hProc, NULL, dll_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (MyAlloc == NULL)
{
    //cerr << "[!]Fail to allocate memory in Target Process." << endl;
    return false;
}

//cout << "[+]Allocating memory in Targer Process." << endl;
int IsWriteOK = WriteProcessMemory(hProc, MyAlloc, DLL_Path.c_str(), dll_size, 0);
if (IsWriteOK == 0)
{
    //  cerr << "[!]Fail to write in Target Process memory." << endl;
    return false;
}
//cout << "[+]Creating Remote Thread in Target Process" << endl;

DWORD dWord;
LPTHREAD_START_ROUTINE addrLoadLibrary = (LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("kernel32"), "LoadLibraryA");
HANDLE ThreadReturn = CreateRemoteThread(hProc, NULL, 0, addrLoadLibrary, MyAlloc, 0, &dWord);
if (ThreadReturn == NULL)
{
    //cerr << "[!]Fail to create Remote Thread" << endl;
    return false;
}

if ((hProc != NULL) && (MyAlloc != NULL) && (IsWriteOK != ERROR_INVALID_HANDLE) && (ThreadReturn != NULL))
{
    //cout << "[+]DLL Successfully Injected :)" << endl;
    return true;
}

return false;

}

Я ожидаю, что при компиляции не будет сообщений об ошибках, но на самом деле я получаю:

C3861 'VirtualAllocEx': идентификатор не найден

C3861 'WriteProcessMemory': идентификатор не найден

C3861 'LoadLibrary': идентификатор не найден

C3861 'CreateRemoteThread': идентификатор не найден

1 Ответ

0 голосов
/ 17 мая 2019

Пожалуйста, посмотрите ответ Стефана из этого потока :

"Это сделано специально для процессов UWP. Контейнер приложений UWP не позволяет динамически загружать код, который не был частьюпакет развертывания. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...