【问题标题】:Inject a dll file to UWP将 dll 文件注入 UWP
【发布时间】:2018-10-16 10:23:30
【问题描述】:

我制作了一个简单的 UWP 应用和一个桌面应用。此代码将 ConsoleApplication1.dll 文件注入桌面是正常的,但我无法注入 UWP 应用程序。 我有两个问题: 为什么此代码无法注入 UWP 应用程序? 以及如何解决?

此代码注入一个 DLL 文件

#include "pch.h"
#include <vector>
#include <string>
#include <windows.h>
#include <Tlhelp32.h>

using std::vector;
using std::string;

int main(void)
{
while (true)
{
    vector<string>processNames;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    BOOL bProcess = Process32First(hTool32, &pe32);
    if (bProcess == TRUE)
    {
        while ((Process32Next(hTool32, &pe32)) == TRUE)
        {
            processNames.push_back(pe32.szExeFile);
            if (strcmp(pe32.szExeFile, "ConsoleApplication4.exe") == 0 || strcmp(pe32.szExeFile, "UWP.exe") == 0)
            {
                printf("Hooked %s, %d \n", pe32.szExeFile, pe32.th32ProcessID);
                char* DirPath = new char[MAX_PATH];
                char* FullPath = new char[MAX_PATH];
                GetCurrentDirectory(MAX_PATH, DirPath);
                sprintf_s(FullPath, MAX_PATH, "%s\\..\\ConsoleApplication1\\ConsoleApplication1.dll", DirPath);
                FILE *pFile;
                if (fopen_s(&pFile, FullPath, "r") || !pFile)
                {
                    OutputDebugString("[Hook] File name or file does not exist");
                    OutputDebugString(FullPath);
                    return -1;
                }
                fclose(pFile);

                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
                LPVOID LoadLibraryAddr = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
                LPVOID LLParam = (LPVOID)VirtualAllocEx(hProcess, NULL, strlen(FullPath), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);

                bool result = WriteProcessMemory(hProcess, LLParam, FullPath, strlen(FullPath), NULL);
                CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, LLParam, NULL, NULL);

                CloseHandle(hProcess);
                delete[] DirPath;
                delete[] FullPath;

                OutputDebugString("[Hook] Hooked success");

                system("pause");

                return 0;
            }
        }
    }
    CloseHandle(hTool32);
}
return 0;
}

谢谢

【问题讨论】:

    标签: c++ uwp hook


    【解决方案1】:

    DLL 注入 UWP 应用程序与注入 Win32 程序没有什么不同;相同的技术和通用 DLL 注入器将适用于 UWP 应用程序。但是,如果只是尝试将任何常规 DLL 注入 UWP 应用程序,则 DLL 可能不会加载。这样做的原因是所有应用程序包组必须对被注入的 DLL 具有读取和执行权限。

    要手动设置这些权限:右键单击 DLL,进入属性,进入安全选项卡,点击编辑,点击添加,在弹出的对话框中输入“ALL”并点击确定。在英文系统上,这会将所有应用程序包添加到默认启用读取/执行的权限列表中;对于非英语系统,该组将被命名为不同的名称。

    https://www.unknowncheats.me/forum/general-programming-and-reversing/177183-basic-intermediate-techniques-uwp-app-modding.html

    谢谢

    【讨论】:

      【解决方案2】:

      这是为 UWP 进程设计的。 UWP 应用容器不允许动态加载不属于部署包的代码。

      【讨论】:

      • 你知道将 DLL 文件注入 UWP 应用吗?
      • 这是不可能的。但是,如果您可以扩展您的问题并解释您真正想要完成的工作,我们可能会提出替代解决方案。例如,您可以将桌面扩展添加到您的 UWP 包,然后它可以在其进程中加载​​和注入 DLL。不确定这是否适合您的情况。无论如何,要了解有关向 UWP 添加桌面扩展的更多信息,我在这里有一个教程:stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1
      • 谢谢,这个教程很好,我以前看过,但对我没有帮助。我正在一个文件 DLL 中使用 MS-Detours 编写 detour 地址,并尝试将其注入 UWP 应用程序codeproject.com/Articles/30140/API-Hooking-with-MS-Detours
      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多