zoukankan      html  css  js  c++  java
  • 远程线程注入

    // remote06.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "windows.h"
    
    
    BOOL func(DWORD ProcessID,char* DllPathName)
    {
        DWORD ThreadID = NULL;
        //1.获取进程句柄
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);
        if (hProcess == NULL)
        {
            OutputDebugString("OpenProcess失败!");
            CloseHandle(hProcess);
            return FALSE;
        }
        //2.计算DLL路径长度,并且加上0结尾长度strlen
        DWORD LenOfDllPathName = strlen(DllPathName)+1;
    
        
        //3.在目标进程分配内存VirtualAllocEx
        LPVOID lpAllocAddr = VirtualAllocEx(hProcess,NULL,LenOfDllPathName,MEM_COMMIT,PAGE_READWRITE);
        if (lpAllocAddr == NULL)
        {
            OutputDebugString("VirtualAllocEx失败!");
            CloseHandle(hProcess);
            return FALSE;
        }
    
        //4.拷贝DLL路径到目标进程新分配的内存WriteProcessMemory
        DWORD bRet = WriteProcessMemory(hProcess,lpAllocAddr,DllPathName,LenOfDllPathName,NULL);
        if (!bRet)
        {
            OutputDebugString("WriteProcessMemory失败!");
            CloseHandle(hProcess);
            return FALSE;
        }
    
        //5.获得模块地址GetModuleHandle
        HMODULE hml = GetModuleHandle("Kernel32.dll");
        if (hml == NULL)
        {
            OutputDebugString("GetModuleHandle失败!");
            CloseHandle(hProcess);
            return FALSE;
        }
        
        //6.获得LoadLibraryA函数地址GetProcAddress
        DWORD lpLoadAddr = (DWORD)GetProcAddress(hml,"LoadLibraryA");
        if (!lpLoadAddr)
        {
            OutputDebugString("GetProcAddress失败!");
            CloseHandle(hProcess);
            CloseHandle(hml);
            return FALSE;
        }
        
        //7.创建远程线程,加载DLL
        HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)lpLoadAddr,lpAllocAddr,0,NULL);
        if (hThread == NULL)
        {
            OutputDebugString("CreateRemoteThread失败!");
            CloseHandle(hThread);
            CloseHandle(hml);
            CloseHandle(hProcess);
            return FALSE;
        }
    
        //关闭资源
        CloseHandle(hThread);
        CloseHandle(hml);
        CloseHandle(hProcess);
    
        return TRUE;
    
    }
    int main(int argc, char* argv[])
    {
    
        func(进程ID,DLL路径);
        
        
        return 0;
    }
  • 相关阅读:
    【JavaScript】照片库
    【JavaScript】事件介绍
    【JavaScript】函数返回值
    【JavaScript】打造自己的函数
    【JavaScript】函数—可重用的代码块
    【JavaScript】循环语句
    【JavaScript】笑话生成器
    【JavaScript】数组
    c#之线程通信
    c#之线程同步
  • 原文地址:https://www.cnblogs.com/ganxiang/p/13135004.html
Copyright © 2011-2022 走看看