Я создаю приложение 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': идентификатор не найден