• CreateRemoteThread注入DLL


    DLL注入的常用方式之一远程线程注入,实现代码如下
    // CreateRemoteThread.cpp : Defines the entry point for the application.
    //

    #include "stdafx.h"
    #include <stdio.h>
    #include <tlhelp32.h>

    #pragma comment(lib,"th32.lib")

    DWORD GetProcessId()
    {
        char* targetFile = "notepad.exe";
        DWORD Pid=-1;
        HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        PROCESSENTRY32 lPrs;
        ZeroMemory(&lPrs,sizeof(lPrs));
        lPrs.dwSize=sizeof(lPrs);
        Process32First(hSnap,&lPrs);//取得系统快照里第一个进程信息
        if(strstr(targetFile,lPrs.szExeFile))
        {
        Pid=lPrs.th32ProcessID;
        return Pid;
        }

    while(1)
    {
        ZeroMemory(&lPrs,sizeof(lPrs));
        lPrs.dwSize=(&lPrs,sizeof(lPrs));
    if(!Process32Next(hSnap,&lPrs))
    {
    Pid=-1;
    break;
    }
    if(strstr(targetFile,lPrs.szExeFile))
    {
        Pid=lPrs.th32ProcessID;
    break;
    }
    }

    return Pid;

    }

    BOOL EnabledDebugPrivilege()
    {
        HANDLE hToken;
        TOKEN_PRIVILEGES tkp;

        if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
            return false;

        LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

        tkp.PrivilegeCount = 1;
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

        AdjustTokenPrivileges(hToken,false,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);

        if (GetLastError() != ERROR_SUCCESS)
            return false;

        return true;
    }

    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
         // TODO: Place code here.
        EnabledDebugPrivilege();

        char* dllName = "c:\hook.dll";
        //HMODULE hDll = LoadLibrary(dllName);    

        FARPROC farLoadLibrary = GetProcAddress(GetModuleHandle("Kernel32.dll"),"LoadLibraryA");
        DWORD dwProcessID = GetProcessId();

        if(dwProcessID == -1)
        {
            MessageBox(NULL,"dw not found","",0);
            return 0;
        }
        //HWND hwNotePad  =  FindWindow(NULL,"QQ用户登录"); 
        //if(hwNotePad == NULL)
            //return 0;

        //GetWindowThreadProcessId(hwNotePad,   &dwProcessID); 
        char* pid = new char[10];
        sprintf(pid,"0x%x",dwProcessID);


        HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwProcessID);
        if(hProcess == INVALID_HANDLE_VALUE)
        {
            MessageBox(NULL,"open error","",0);
            CloseHandle(hProcess);
            return 0;
        }
        LPVOID   lpDllAddr   =   VirtualAllocEx(hProcess,   NULL, strlen(dllName),   MEM_COMMIT,   PAGE_READWRITE); 
        if(lpDllAddr == NULL)
        {
            MessageBox(NULL,"alloc error","",0);
            CloseHandle(hProcess);
            return 0;
        }
        if(!WriteProcessMemory(hProcess,   lpDllAddr,   dllName,   strlen(dllName) ,NULL))
        {
            MessageBox(NULL,"Write error","",0);
            CloseHandle(hProcess);
            return 0;
        }
        HANDLE   hT   =   CreateRemoteThread(hProcess,   NULL,   0,   (LPTHREAD_START_ROUTINE)farLoadLibrary,   lpDllAddr,   0,   NULL);   
        CloseHandle(hT);
        CloseHandle(hProcess);
        MessageBox(NULL,"finish","",0);
        return 0;
    }



     
     
  • 相关阅读:
    Msql-51CTO笔记
    Elasticsearch 学习第一天
    大数据开发参考资料
    1.docker的安装
    java_根据实体字段中的中文汉字排序
    遍历set集合,进行数据的拼接
    关于integer 和int
    03.linux环境安装mysql8的安装包
    02.linux下面安装jdk8
    01.VMware15.5下安装Centos7
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8528957.html
Copyright © 2020-2023  润新知