首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【VC++累积】之五、进程注入技术

2012-10-13 
【VC++积累】之五、进程注入技术注入:就是把我的代码,添加到已经远行的远程进程的方法;在WinNT以后的系列操作

【VC++积累】之五、进程注入技术

注入:就是把我的代码,添加到已经远行的远程进程的方法;

在WinNT以后的系列操作系统中,每个进程都有自己的4GB私有进程地址空间,彼此互不相关。

如 :   进程A中的一个地址,比如:0x12345678,到了进程B中的相同地方,存的东西完全不一样,或者说不可预料。

           所以说如果进程A想要看看或者修改进程B地址空间中的内容,就必须深入到其地址空间中,因为DLL是可以被加载到任何进程当中的,所以在进程注入中,DLL应该是主角,也就是说一些核心的代码都应该放在DLL中编写。

来看一下步骤:

1、找到远程进程的processid
2、全权打开它
3、在远程进程中申请一块内存,大小为你要写入的东东的大小
4、在这个申请好的内存里面写入你要注入的东西
5、创建一个远程线程来运行这个内存
6、关闭进程


主要用到的API函数:

OpenProcess(...) //获取已知进程的句柄;

  BOOL AdjustTokenPrivileges(  HANDLE TokenHandle, // handle to token访问令牌的句柄  BOOL DisableAllPrivileges, // disabling option  决定所有权  PTOKEN_PRIVILEGES NewState, // privilege information指明要修改的权限  DWORD BufferLength, // size of buffer  结构的长度  PTOKEN_PRIVILEGES PreviousState, // original state buffer  存放修改前访问权限的信息  PDWORD ReturnLength // required buffer size  );

LookupPrivilegevalue   获取本地唯一的标识
 BOOL LookupPrivilegevalue(  LPCTSTR lpSystemName, // system name  LPCTSTR lpName, // privilege name  PLUID lpLuid // locally unique identifier  );

看一下封装好的函数:
BOOL EnablePrivilege(LPCTSTR lpszPrivilegeName, BOOL bEnable){HANDLE hToken = NULL;TOKEN_PRIVILEGES tp;LUID luid;if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY | TOKEN_READ, &hToken))return FALSE;if(!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid))return FALSE;tp.PrivilegeCount = 1;tp.Privileges[0].Luid = luid;tp.Privileges[0].Attributes = (bEnable)?SE_PRIVILEGE_ENABLED : 0;AdjustTokenPrivileges(hToken, FALSE, &tp, NULL, NULL, NULL);CloseHandle(hToken);return (GetLastError() == ERROR_SUCCESS);}


本文讲的是利用远程进程来注入DLL,  DLL注入技术还有: 用注册表来注入DLL,      用windows钩子来注入DLL,     用木马DLL来注入DLL,                                   用CreateProces来注入代码    用木马DLL 来注入DLL这些在后续的文章中还会讲到。

2012/10/8jofranks 于南昌

热点排行