码迷,mamicode.com
首页 > 其他好文 > 详细

dll注入简单实现

时间:2014-10-22 23:23:03      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:blog   io   os   ar   使用   for   sp   文件   div   

// InjectDll.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <string>
#include "stdio.h"
#include <iostream>
using namespace std;

#define DEF_BUF_SIZE 1024
//用于存储注入模块DLL的路径全名
char szDllPath[DEF_BUF_SIZE] ={0};
//使用远程线程向指定ID的进程注入模块
BOOL InjectModuleToProcessById(DWORD dwProcessId){
	if(dwProcessId == 0)
	{
		return FALSE;
	}

	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE ,dwProcessId);
	if(hProcess == NULL){
		return FALSE;
	}
	//申请存放文件名的空间
	UINT nLen = (UINT)strlen(szDllPath)+1;
	LPVOID lpRemoteDllName = VirtualAllocEx(hProcess ,NULL ,nLen,MEM_COMMIT,PAGE_READWRITE);
	if (lpRemoteDllName == NULL)
	{
		printf("[ERROR]VirtualAllocEx(%d)/n", GetLastError() );
		return FALSE;
	}
	//把dll文件名写入申请的空间
	if (WriteProcessMemory(hProcess,lpRemoteDllName,szDllPath,nLen,NULL) ==FALSE)
	{
		printf ( "[ERROR]WriteProcessMemory(%d)/n", GetLastError() ); 
		return FALSE ;
	}

	//获取动态库函数地址
	HMODULE hModule = GetModuleHandle(L"kernel32.dll");
	LPTHREAD_START_ROUTINE fnStartAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hModule ,"LoadLibraryA");
	if ((DWORD)fnStartAddr ==0)
	{
		printf ( "[ERROR]GetProcAddress(%d)/n", GetLastError() ); 
		return FALSE ;
	}


	//创建远程线程
	HANDLE hRemoteThread = CreateRemoteThread(hProcess ,NULL ,0,fnStartAddr ,lpRemoteDllName ,0,NULL);
	if(hRemoteThread == NULL){
		printf ( "[ERROR]CreateRemoteThread(%d)/n", GetLastError() ); 
		return FALSE ;
	}

	//等待远程线程结束
	if(WaitForSingleObject(hRemoteThread,INFINITE)!= WAIT_OBJECT_0 ){
		printf ( "[ERROR]WaitForSingleObject(%d)/n", GetLastError() ); 
		return FALSE ;
	}

	CloseHandle(hRemoteThread);
	CloseHandle(hModule);
	CloseHandle(hProcess);
	return TRUE;

}

int _tmain(int argc, _TCHAR* argv[])
{
	
	GetCurrentDirectoryA(DEF_BUF_SIZE ,szDllPath);
	strcat(szDllPath ,"dll");

	DWORD dwProcessId = 0;
	while (printf("请输入目标进程ID")&& cin>> dwProcessId && dwProcessId>0)
	{
		BOOL bRet = InjectModuleToProcessById(dwProcessId);
		printf (bRet ? "注入成功!/n":"注入失败!/n") ;
	}
	return 0;
}

  

dll注入简单实现

标签:blog   io   os   ar   使用   for   sp   文件   div   

原文地址:http://www.cnblogs.com/sz-xxc-1234/p/4044508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!