吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 896|回复: 2
收起左侧

[求助] 求助:各位高手,这边注入DLL提示创建线程失败,拒绝访问,错误代码5

[复制链接]
Galaxyou 发表于 2023-8-18 17:48
本帖最后由 Galaxyou 于 2023-8-18 17:57 编辑

写了一个C++程序来注入DLL提示没有权限,CMD和程序都是管理员运行,代码如下:

int main()
{

const CHAR* DLLPath = "C:\\Users\\Administrator\\Downloads\\Compressed\\WeChatX64.dll";
DWORD pid = 0;
scanf_s("%d", &pid);
HANDLE hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (!hprocess) {
    DWORD errorCode = GetLastError();
    LPSTR errorMessage = nullptr;
    DWORD result = FormatMessageA(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        nullptr,
        errorCode,
        0,
        reinterpret_cast<LPSTR>(&errorMessage),
        0,
        nullptr
    );

    if (result != 0) {
        std::cout << "无法打开进程句柄,错误代码:" << errorCode << std::endl;
        std::cout << "错误消息:" << errorMessage << std::endl;
        LocalFree(errorMessage);
    }
    else {
        std::cout << "无法打开进程句柄,错误代码:" << errorCode << std::endl;
    }
    return 1;
}

SIZE_T PathSize = (strlen(DLLPath) + 1) * sizeof(TCHAR);
LPVOID StartAddress = VirtualAllocEx(hprocess, NULL, PathSize, MEM_COMMIT, PAGE_READWRITE);
if (!StartAddress) {
    std::cout << "开辟内存失败" << std::endl;
    return 1;
}
if (!WriteProcessMemory(hprocess, StartAddress, DLLPath, PathSize, NULL)) {
    std::cout << "无法写入DLL路径" << std::endl;
    return 1;
}
PTHREAD_START_ROUTINE pfnStartAddress = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "LoadLibraryA");
if (!pfnStartAddress) {
    std::cout << "无法获取函数地址" << std::endl;
    return 1;
}
HANDLE hThread = CreateRemoteThreadEx(hprocess, NULL, NULL, pfnStartAddress, StartAddress, NULL, NULL, NULL);
if (!hThread) {
    DWORD errorCode = GetLastError();
    LPSTR errorMessage = nullptr;
    DWORD result = FormatMessageA(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
        nullptr,
        errorCode,
        0,
        reinterpret_cast<LPSTR>(&errorMessage),
        0,
        nullptr
    );
    if (result != 0) {
        std::cout << "创建线程失败,错误代码:" << errorCode << std::endl;
        std::cout << "错误消息:" << errorMessage << std::endl;
        LocalFree(errorMessage);
    }
    return 1;
}
//WaitForSingleObject(hThread, INFINITE);//等待DLL结束
std::cout << "注入成功!\n";
CloseHandle(hThread);
CloseHandle(hprocess);
system("pause");
return 0;

}



报错如下:
1692351696452.jpg

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

renpeng009 发表于 2023-8-19 09:55
楼主  result  的生命周期仅限于if (!hprocess) {}内吧,你判断result的时候已经失去了意义
yes2 发表于 2023-8-20 21:36
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表