一、DLL注入概述
1.简介
dll注入是一种将Windows动态链接库注入到目标进程中的技术,具体的说,就是将dll文件加载到一个进程的虚拟地址空间中。对某个进程进行dll注入,也就意味着dll模块与该进程共用一个进程空间,则这个dll文件就有了操纵这个进程空间的能力,以达到执行dll模块中的代码修改进程数据的能力。
2. 原理
DLL注入的工作原理是将自己的dll文件强制注入进其他进程,同时,被注入的DLL拥有目标进程的内存访问权限从而实现一些有用的功能。
例如:
改善功能与修复BUg
消息钩取
API钩取
恶意代码
....
二、几种常见的DLL注入手段
各个方式都分为注入程序和DLL程序两部分,其中DLL基本都是一样的,我们的目标是把我们自己的DLL注入程序中,不同的方式使用不同的注入程序,从而实现DLL注入。
1.远程线程注入
所用主要API
LoadLibrary():用来加载DLL文件,
CreateRemoteThread() :在其他程序中启动远程线程,使程序自动启用LoadLibrary()函数,从而加载DLL文件
WriteProcessMemory():在其他进程中写入数据
程序源码
BOOL InjectProgram(DWORD dwPID, LPCTSTR path){
HANDLE hProcess = NULL, hThread = NULL;HMODULE hMod = NULL;LPVOID pRemoteBuf = NULL;DWORD dwBufSize = (DWORD)(_tcslen(path) + 1) * sizeof(TCHAR);LPTHREAD_START_ROUTINE pThreadProc;//用获取的PID找到注入进程的句柄hProcess = OpenProcess(PROCESS_ALL_ACCES