注入技术--远程线程注入

本文介绍了一种经典的DLL注入技术,通过使用Windows API函数实现DLL文件的远程加载。具体步骤包括:提升当前进程权限、为目标进程分配内存、写入DLL路径、创建远程线程并调用LoadLibrary函数。

1.简介

最经典的注入方式, 容易实现但是监控LoadLibrary系列函数即可

还可以注入中转,如先将模块注入到系统进程中,利用系统进程再次注入到目标进程,然后从系统进程卸载掉模块

 

2.代码

DWORD threadInject(WCHAR* dllpath,DWORD pid)
{
    //先激活权限
    HANDLE hToken;
    LUID newLuid;
    TOKEN_PRIVILEGES tr;
    tr.PrivilegeCount = 1;
    tr.Privileges->Attributes = SE_PRIVILEGE_ENABLED;
    OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &newLuid);
    tr.Privileges->Luid = newLuid;
    AdjustTokenPrivileges(hToken, FALSE, &tr, sizeof(tr), 0, 0);
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, pid);
    //获取进程句柄
    if (hProcess==0||hProcess==INVALID_HANDLE_VALUE)
    {
        CloseHandle(hToken);
        return 0;
    }
    //申请内存存放参数
    LPVOID p = VirtualAllocEx(hProcess, 0, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if (!p)
    {
        CloseHandle(hProcess);
        CloseHandle(hToken);
        return 0;
    }
    //写参数
    if (!WriteProcessMemory(hProcess, p, (LPVOID)(dllpath), sizeof(dllpath), NULL))
    {
        VirtualFreeEx(hProcess, p, 0x1000, MEM_FREE);
        CloseHandle(hProcess);
        CloseHandle(hToken);
        return 0;
    }
    //创建远程线程并执行LoadLibraryW加载dll
    HANDLE cThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)(GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "LoadLibraryW")), p, 0, 0);
    if (cThread==0||cThread==INVALID_HANDLE_VALUE)
    {
        VirtualFreeEx(hProcess, p, 0x1000, MEM_FREE);
        CloseHandle(hProcess);
        CloseHandle(hToken);
        return 0;
    }
    CloseHandle(cThread);
    CloseHandle(hProcess);
    CloseHandle(hToken);

}

 

转载于:https://www.cnblogs.com/freesec/p/6568269.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值