#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 ;
//申请存放文件名的空间
UINTnLen = (UINT)strlen ( szDllPath ) + 1;
LPVOIDlpRemoteDllName = 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 ) ;
// 生成注入模块DLL的路径全名
strcat ( szDllPath, "\\DLL.dll" ) ;
DWORD dwProcessId = 0 ;
// 接收用户输入的目标进程ID
while ( printf ( "请输入目标进程ID:" ) && cin >> dwProcessId && dwProcessId > 0 )
{
BOOL bRet = InjectModuleToProcessById ( dwProcessId ) ;
printf ( bRet ? "注入成功!\n":"注入失败!\n") ;
}
return 0;
}
分享到:
相关推荐
vc++键盘鼠标钩子程序vc++键盘鼠标钩子程序
vc++ hook 键盘钩子 visual c++编写的键盘钩子hook 程序
VC++鼠标键盘钩子,VC6.0调试通过...
易语言钩子DLL注入易语言钩子DLL注入易语言钩子DLL注入
VC++使用dll注入实现全局键盘钩子
一个简单的鼠标钩子程序,适合于初学者,简单易懂,高手不用看了
钩子注入的通用模块
(含源码) 注入dll 卸载进程模块 UM(含源码) 注入dll 卸载进程模块 UM
Hook、注册表修改 VC++ 简单病毒 全局钩子VC++ 简单病毒 全局钩子VC++ 简单病毒 全局钩子VC++ 简单病毒 全局钩子VC++ 简单病毒 全局钩子VC++ 简单病毒 全局钩子
这是一个vc++6.0编写的内部钩子程序。
用c++语言写的键盘钩子,带实验报告,希望大家希望用c++语言写的键盘钩子,带实验报告,希望大家希望
[易语言源码]-安装钩子DLL
易语言内存DLL注入模块源码 内存DLL注入模块
vc++通过键盘钩子开发按键发音程序,你按A键电脑就念A.zip visual c++输入文字,就会发出语音
摘要:VC/C++源码,系统相关,键盘钩子 VC++编写实现的最简单的键盘钩子+源代码,分享给VC++入学者,本源代码可以实现键盘钩子的安装与卸载,是个不错的示范程序。
VC++ hook 挂机锁 带钩子过程dll源码
线程钩子和键盘钩子(dll注入)模块+例程
可遍历进程和模块,注入,尽可能安全卸载模块保证进程不会崩溃
安装钩子DLL.e
用C++编写的键盘钩子过程,可以实现全局键盘消息截获,在此基础上做了一个小工具,快速打开应用程序,为平时工作中快速记录提供了方便,当同时按下Alt+F2是就打开excel文件。