您的位置:首页 > 其它

[转载]Dll注入技术之注册表注入

2015-02-02 21:02 288 查看
转自:黑客反病毒论坛

DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等。

REG注入原理是利用在Windows 系统中,当REG以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件。当如果遇到有多个DLL文件时,需要用逗号或者空格隔开多个DLL文件的路径。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows

REG注入就好比在食堂(Windows 系统)发放给学生(EXE文件)饭菜(DLL文件)的过程中,食堂在将原有饭菜的基础上多发给一份紫菜鸡蛋汤(AppInit_DLL中的DLL文件),这个紫菜鸡蛋汤可以是英伟达的UI加速的DLL文件,也可以是是病毒文件的DLL,这就要看使用者是怎么利用这个特性了。

我们可以利用这个特性来进行DLL的注入,接下来需要解决的就是关于注册表操作的Windows API了,如下列表格所示:

RegOpenKeyEx
打开注册表键值
RegQueryValueEx
查询键值
RegSetValueEx
设置键值
RegCloseKey
关闭键值
主要代码如下:

BOOL CALLBACK lpEnumFunc(HWND hwnd, LPARAM lParam)
02.{
03.    TCHAR str[MAXBYTE] = {0};
04.    //得到窗口名称
05.    GetWindowText(hwnd,str,sizeof(str));
06.    //是否名称是计算器
07.    if(0 == _tcscmp(str,_T("计算器")))
08.    {
09.        //由于存在可能多个计算器,需要过滤线程ID
10.        //得到本身线程的ID
11.        DWORD dwCurrentProcessId = GetCurrentProcessId();
12.        DWORD dwFindCurrentProcessId = 0;
13.        //得到窗口线程ID
14.        GetWindowThreadProcessId(hwnd,&dwFindCurrentProcessId);
15.        //比较
16.        if (dwCurrentProcessId == dwFindCurrentProcessId)
17.        {
18.            *(PDWORD)lParam = 1;
19.            return FALSE;
20.        }
21.    }
22.    return TRUE;
23.}
24.
25.
26.DWORD ThreadProc(LPVOID lParam)
27.{
28.    //等待1秒时间以便于让windows创建窗口
29.    Sleep(1000);
30.    DWORD dwFind = 0;
31.    //遍历窗口,过滤窗口名称
32.    EnumWindows(lpEnumFunc,(LPARAM)&dwFind);
33.
34.    if (!dwFind) return 0;
35.
36.    // 运行代码
37.
38.    return 0;
39.}
40.
41.BOOL InitInstance()
42.{
43.    DWORD dwThreadId;
44.    m_hThread = ::CreateThread(NULL, NULL,
45.        (LPTHREAD_START_ROUTINE)ThreadProc,
46.        this, NULL,&dwThreadId);
47.
48.    return TRUE;
49.}


View Code

REG注入操作简单易懂,甚至不用写程序都可以完成注入操作,但是正是由于他的简单性,每个EXE都被注入,效率低,程序的扩展性差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: