zoukankan      html  css  js  c++  java
  • 动态库注入注册表注入

    • 利用注册表注入就是在特定的键值下写入动态库的路径,

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

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

    • 实现流程

      其实现流程也就是操作注册表。

    • 代码实现
        1 // RegInject.cpp : 定义控制台应用程序的入口点。
        2 //
        3 
        4 #include "stdafx.h"
        5 #include <Windows.h>
        6 #include <iostream>
        7 using namespace std;
        8 wstring GetExeDirectory();
        9 wstring GetParent(const std::wstring& FullPath);
       10 int main()
       11 {
       12 
       13     
       14     LONG ReturnValue = 0;
       15     HKEY hKey;
       16     WCHAR  RegPath[] = L"SOFTWARE\\Microsoft\\Windows\ NT\\CurrentVersion\\Windows";
       17     const wchar_t* DllName = L"Dll.dll";
       18     wstring InjectFileFullPath;
       19     InjectFileFullPath = GetExeDirectory() +
       20         L"\\" + DllName;
       21     RegEnableReflectionKey(HKEY_LOCAL_MACHINE);
       22     //打开键值  
       23     ReturnValue = RegOpenKeyEx(
       24         HKEY_LOCAL_MACHINE,
       25         RegPath,
       26         0,
       27         KEY_ALL_ACCESS,
       28         &hKey);
       29     
       30     if (ReturnValue != ERROR_SUCCESS)
       31     {
       32         return FALSE;
       33     }
       34 
       35     //查询键值  
       36     DWORD dwReadType;
       37     DWORD dwReadCount;
       38     WCHAR szReadBuff[1000] = { 0 };
       39     ReturnValue = RegQueryValueEx(hKey,
       40         L"AppInit_DLLs",
       41         NULL,
       42         &dwReadType,
       43         (BYTE*)&szReadBuff,
       44         &dwReadCount);
       45 
       46     if (ReturnValue != ERROR_SUCCESS)
       47     {
       48         return FALSE;
       49     }
       50     //是否dll名称已经在内容中  
       51     wstring strCmpBuff(szReadBuff);
       52     //strCmpBuff = szReadBuff;
       53     int a = strCmpBuff.find(InjectFileFullPath);
       54     if (strCmpBuff.find(InjectFileFullPath))
       55     {
       56         return FALSE;
       57     }
       58 
       59     //有字符串就加入空格  
       60     if (wcscmp(szReadBuff, L" ") != 0)
       61     {
       62         wcscat_s(szReadBuff, L" ");
       63     }
       64 
       65     wcscat_s(szReadBuff, InjectFileFullPath.c_str());
       66 
       67     //把dll路径设置到注册表中  
       68     ReturnValue = RegSetValueEx(hKey,
       69         L"AppInit_DLLs",
       70         0,
       71         REG_SZ,
       72         (CONST BYTE*)szReadBuff,
       73         (_tcslen(szReadBuff) + 1) * sizeof(TCHAR));
       74     DWORD v1 = 0;
       75     ReturnValue = RegSetValueEx(hKey,
       76         L"LoadAppInit_DLLs",
       77         0,
       78         REG_DWORD,
       79         (CONST BYTE*)&v1,
       80         sizeof(DWORD));
       81     return 0;
       82 }
       83 
       84 wstring GetExeDirectory()
       85 {
       86     wchar_t ProcessFullPath[MAX_PATH] = { 0 };
       87     DWORD ProcessFullPathLength = ARRAYSIZE(ProcessFullPath);
       88     GetModuleFileName(NULL, ProcessFullPath, ProcessFullPathLength);
       89 
       90     return GetParent(ProcessFullPath);
       91 }
       92 
       93 wstring GetParent(const std::wstring& FullPath)
       94 {
       95     if (FullPath.empty())
       96     {
       97         return FullPath;
       98     }
       99     auto v1 = FullPath.rfind(L"\\");
      100     if (v1 == FullPath.npos)
      101     {
      102         v1 = FullPath.rfind(L'/');
      103     }
      104     if (v1 != FullPath.npos)
      105     {
      106         return FullPath.substr(0, v1);
      107     }
      108     else
      109     {
      110         return FullPath;
      111     }
      112 }
  • 相关阅读:
    html-标题标签、水平线标签和特殊字符
    htm-文字标签和注释标签
    html-html简介
    scss-函数
    scss-!optional
    scss-@extend
    解决SecureCRT下spark-shell中scala无法删除问题
    Python list降序排序
    Python 字典的一键多值,即一个键对应多个值
    python 数组中如何根据值,获取索引,如何根据索引删除值 , 以及如何根据值删除值
  • 原文地址:https://www.cnblogs.com/banchen/p/6682915.html
Copyright © 2011-2022 走看看