c++ 进程注入代码

unicoce c语言 变量声明要放在前面

BOOL WINAPI InjectIt(LPCTSTR DllPath, const DWORD dwRemoteProcessld)//注入主函数
{
    HANDLE hrp = NULL;
	LPTSTR psLibFileRemote = NULL;
	 //计算LoadLibraryA的入口地址
	
    PTHREAD_START_ROUTINE pfnStartAddr=(PTHREAD_START_ROUTINE)
        GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryW");

	  HANDLE hrt = NULL;

	  printf("%p\n",pfnStartAddr);
    if((hrp=OpenProcess(PROCESS_CREATE_THREAD|//允许远程创建线程
				PROCESS_VM_OPERATION|//允许远程VM操作
			   PROCESS_VM_WRITE,//允许远程VM写
				FALSE,dwRemoteProcessld)) == NULL)
    {
        // OpenProcess Error
		printf("打开目标进程失败");
        return FALSE;
    }

      printf("%0x\n",hrp);
    //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲
    psLibFileRemote=(LPTSTR)VirtualAllocEx(hrp, NULL, (lstrlen(DllPath)+1)* sizeof(WCHAR),
								  MEM_COMMIT, PAGE_READWRITE);

    if(psLibFileRemote == NULL)
    {
        // VirtualAllocEx Error
		printf("VirtualAllocEx Error");
        return FALSE;
    }
	printf("%p\n",psLibFileRemote);
    //使用WriteProcessMemory函数将DLL的路径名复制到远程的内存空间
    if(WriteProcessMemory(hrp, psLibFileRemote, (void *)DllPath, (lstrlen(DllPath)+1)* sizeof(WCHAR), NULL) == 0)
    {
        // WriteProcessMemory Error
		printf("WriteProcessMemory Error");
        return FALSE;
    }

   

    if(pfnStartAddr == NULL)
    {
        // GetProcAddress Error!
        return FALSE;
    }

	 printf("%p\n",pfnStartAddr);
    //pfnStartAddr地址就是LoadLibraryA的入口地址


  

    if((hrt = CreateRemoteThread(hrp,
        NULL,
        0,
        pfnStartAddr,
        psLibFileRemote,
        0,
        NULL)) == NULL)
    {
        // CreateRemote Error
		printf("创建远程线程失败");
        return FALSE;
    }

	printf("创建远程线程成功");
    return TRUE;
}


使用多字节字符集 c++

BOOL WINAPI InjectIt(LPCTSTR DllPath, const DWORD dwRemoteProcessld)//注入主函数
{
    HANDLE hrp = NULL;

    if((hrp=OpenProcess(PROCESS_CREATE_THREAD|//允许远程创建线程
				PROCESS_VM_OPERATION|//允许远程VM操作
			   PROCESS_VM_WRITE,//允许远程VM写
				FALSE,dwRemoteProcessld)) == NULL)
    {
        // OpenProcess Error
        return FALSE;
    }

    LPTSTR psLibFileRemote = NULL;

    //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲
    psLibFileRemote=(LPTSTR)VirtualAllocEx(hrp, NULL, lstrlen(DllPath)+1,
								  MEM_COMMIT, PAGE_READWRITE);

    if(psLibFileRemote == NULL)
    {
        // VirtualAllocEx Error
        return FALSE;
    }

    //使用WriteProcessMemory函数将DLL的路径名复制到远程的内存空间
    if(WriteProcessMemory(hrp, psLibFileRemote, (void *)DllPath, lstrlen(DllPath)+1, NULL) == 0)
    {
        // WriteProcessMemory Error
        return FALSE;
    }

    //计算LoadLibraryA的入口地址
    PTHREAD_START_ROUTINE pfnStartAddr=(PTHREAD_START_ROUTINE)
        GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA");

    if(pfnStartAddr == NULL)
    {
        // GetProcAddress Error!
        return FALSE;
    }
    //pfnStartAddr地址就是LoadLibraryA的入口地址


    HANDLE hrt = NULL;

    if((hrt = CreateRemoteThread(hrp,
        NULL,
        0,
        pfnStartAddr,
        psLibFileRemote,
        0,
        NULL)) == NULL)
    {
        // CreateRemote Error
        return FALSE;
    }
    return TRUE;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值