修改一下第二次课服务枚举等问题

news2024/11/29 11:37:30

关于AutoRuns 的总结里面,有个错误,Image hijacks 这个准确的描述应该是镜像劫持
和系统运行相关的image,我们通常指的是二进制镜像文件

Image hijacks镜像劫持

简单来说就是,在注册表中,有部分设置,是规定了对于某些后缀的文件关联的处理程序,如果这些设置被修改以后,就导致默认的处理流程被替换,也就是被劫持了,这个就是镜像劫持技术

服务枚举

服务的二进制路径枚举,有一类是进程代理启动类型的服务,它的二进制路径并不在image path 这键里面
进程代理启动的imagepath 路径有个特点,一般是包含"svchost.exe -k" 字段
svchost.exe 这个进程就是系统代理进程,通过命令行 的方式把已经注册在注册表中的其他服务的二进制文件(exe或者在这里插入图片描述
dll,或者其他后缀的二进制程序)加载起来

这种类型的服务二进制真正的位置在主键下的Parameters里面的ServiceDLL
在这里插入图片描述

改一下代码

检测一下枚举出来的imagepath 字段中是否有svchost.exe -k 字段如果有,就去找子键 Parameters 里面的 serviceDLL 作为该服务的二进制路径
imagepath 字段中是否有svchost.exe -k 字段 实现这个功能,需要用到字符串搜索函数
字符串处理的函数,实际编程中,用到非常频繁的,头文件 是string.h

#include <iostream>
#include <string>
#include <Windows.h>

void EnumerateServices()
{
    HKEY hKey;

    if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
    {
        DWORD numSubKeys;
        if (RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &numSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
        {
            for (DWORD i = 0; i < numSubKeys; i++)
            {
                WCHAR subKeyName[MAX_PATH];
                DWORD subKeyNameSize = MAX_PATH;

                if (RegEnumKeyExW(hKey, i, subKeyName, &subKeyNameSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
                {
                    HKEY subKey;
                    if (RegOpenKeyExW(hKey, subKeyName, 0, KEY_READ, &subKey) == ERROR_SUCCESS)
                    {
                        WCHAR imagePath[MAX_PATH];
                        DWORD imagePathSize = MAX_PATH;

                        // 获取 ImagePath 字段的值
                        if (RegGetValueW(subKey, NULL, L"ImagePath", RRF_RT_REG_SZ, NULL, imagePath, &imagePathSize) == ERROR_SUCCESS)
                        {
                            std::wstring imagePathStr(imagePath);
                            if (imagePathStr.find(L"svchost.exe -k") != std::wstring::npos)
                            {
                                HKEY parametersKey;
                                if (RegOpenKeyExW(subKey, L"Parameters", 0, KEY_READ, &parametersKey) == ERROR_SUCCESS)
                                {
                                    WCHAR serviceDLL[MAX_PATH];
                                    DWORD serviceDLLSize = MAX_PATH;

                                    // 获取 ServiceDLL 字段的值
                                    if (RegGetValueW(parametersKey, NULL, L"ServiceDLL", RRF_RT_REG_SZ, NULL, serviceDLL, &serviceDLLSize) == ERROR_SUCCESS)
                                    {
                                        std::wcout << "Service Name: " << subKeyName << std::endl;
                                        std::wcout << "Binary Path: " << serviceDLL << std::endl;
                                        std::wcout << std::endl;
                                    }

                                    RegCloseKey(parametersKey);
                                }
                            }
                        }
                    }

                    RegCloseKey(subKey);
                }
            }
        }

        RegCloseKey(hKey);
    }
}

int main()
{
    EnumerateServices();

    return 0;
}


以下是一些常见功能对应的注册表路径,以及与之相关的功能说明:

启动项(Startup Items):
    注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    功能说明:这些项定义了系统启动时自动运行的程序。通过添加、修改或删除这些注册表项,可以控制开机启动的应用程序。

服务(Services):
    注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
    功能说明:这些项包含了系统中已安装的服务的配置信息。通过修改这些项,可以管理和配置系统级别的服务。

Shell 扩展(Shell Extensions):
    注册表路径:HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers、HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers 等等
    功能说明:这些项定义了在 Windows 资源管理器中显示的上下文菜单扩展程序。通过修改这些注册表项,可以添加或删除特定文件类型或文件夹的上下文菜单选项。

定时任务(Scheduled Tasks):
    注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks
    功能说明:这些项定义了系统中预定的定时任务。通过修改这些注册表项,可以添加、修改或删除计划任务。

驱动程序(Drivers):
    注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
    功能说明:这些项包含了系统中已加载的驱动程序的配置信息。通过修改这些项,可以管理和配置系统级别的驱动程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云二级域名绑定与宝塔Nginx反向代理配置

在阿里或者腾讯...各大域名商买好域名&#xff0c;备案解析好&#xff0c;目标URL&#xff0c;是真正的地址&#xff0c;比如一些端口&#xff0c;后者会自动填写。 注意ssl配置好&#xff0c;这里不要带反代端口

分享一次无线话筒和接收机的配对经历BK9521/9522

最近老婆喜欢上了唱歌。我就需要为她准备歌曲和设备。装了台点歌机&#xff0c;买了软件&#xff0c;用4天的时间下了4T容量的歌曲&#xff0c;听过的没听过的都在里面&#xff0c;真的是太多了。 有了歌曲&#xff0c;就要有唱歌设备了。当我准备买无线话筒的时候&#xff0c…

Javascript知识点详解:正则表达式

目录 RegExp 对象 概述 实例属性 实例方法 RegExp.prototype.test() RegExp.prototype.exec() 字符串的实例方法 String.prototype.match() String.prototype.search() String.prototype.replace() String.prototype.split() 匹配规则 字面量字符和元字符 转义符…

5.数据表基本操作

目录 1.创建数据表 创建数据表的语法格式&#xff1a; 查看当前数据库的表&#xff1a; 主键 1.单字段主键 (1)在定义列的同时指定主键&#xff0c;语法规则如下&#xff1a; (2)在定义完所有列之后指定主键。 2.多字段联合主键 外键&#xff1a; 非空约束&#xff1…

用户态内存映射

内存映射不仅仅是物理内存和虚拟内存之间的映射&#xff0c;还包括将文件中的内容映射到虚拟内存空间。这个时候&#xff0c;访问内存空间就能够访问到文件里面的数据。而仅有物理内存和虚拟内存的映射&#xff0c;是一种特殊情况。 对于堆的申请来讲&#xff0c;mmap 是映射内…

试试流量回放,不用人工写自动化测试case了

大家好&#xff0c;我是洋子&#xff0c;接触过接口自动化测试的同学都知道&#xff0c;我们一般要基于某种自动化测试框架&#xff0c;编写自动化case&#xff0c;编写自动化case的依据来源于接口文档&#xff0c;对照接口文档里面的请求参数进行人工添加接口自动化case 其实…

应用安全四十二:SSO安全

一、什么是SSO SSO是单点登录(Single Sign On)的缩写,是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的企业业务整合的解决方案之一。 身份验证过程依赖于双方之间的信任关…

大数据毕业设计选题推荐-智慧小区大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

2022年ISSCC会议报告分析

Tutorial Fundamentals of Self-Sensing Processor Systems AMD Zen架构的CCD die中有很多传感器检测die的频率、电压、电压和温度 HBM DRAM and 3D Stacked Memory Advances in Digital vs. Analog AI Accelerators Nvidia的Multi-chip架构的DNN加速器 Form1: Compute-in…

Pycharm-community-2021版安装和配置

一、下载Pycharm-community-2021 1.从官网下载pycharm-community Pycharm 版本官网 二、安装PyCharm 1.打开下载完成的安装包&#xff0c;点击Next 2.安装PyCharm到其他位置,点击Next 3.一定把更新PATH变量勾上,可以创建桌面快捷方式&#xff0c;创建关联&#xff0c;最后…

apache-maven-3.6.3 安装配置教程

链接&#xff1a;https://pan.baidu.com/s/1RkMXipnvac9EKcZyUStfGQ?pwdl32m 提取码&#xff1a;l32m 1. 将 maven 压缩包解压至指定文件夹 2. 配置环境变量 &#xff08;1&#xff09;打开此电脑-> 鼠标右键选择属性->点击高级系统设置 &#xff08;2&#xff09;点…

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG 文章目录 导入库初始化PWM开启PWMPWM硬件BUG附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 导入库 from misc import PWM_V2或者 from misc import PWM但我觉得PWM_V2好用 初…

嵌入式中如何把C++代码改写成C语言代码

由于C&#xff0b;&#xff0b;解释器比C语言解释器占用的存储空间要大500k左右。为了节省有限的存储空间、降低成本&#xff0c;同时也为了提高效率&#xff0c;将用C&#xff0b;&#xff0b;语言写的源程序用C语言改写是很有必要的。 C&#xff0b;&#xff0b;与C最大的区…

高位片选与低位交叉编址、芯片扩展与多模块存储器、多通道内存

多模块存储器 是一种空间并行技术&#xff0c;利用多个结构完全相同的存储模块的并行工作来增加存储器的吞吐率。根据不同的编址方式&#xff0c;多模块存储器分为连续编址和交叉编址两种结构 连续编址方式&#xff1a;主存地址的高位表示模块号&#xff08;体号&#xff09;…

Python--快速入门二

Python--快速入门二 1.Python数据类型 1.可以通过索引获取字符串中特定位置的字符&#xff1a; a "Hello" print(a[3]) 2.len函数获取字符串的长度&#xff1a; a "Hello" print(a) print(len(a)) 3.空值类型表示完全没有值&#xff1a; 若不确定当…

【嵌入式项目应用】__物联网小知识:不同通讯线的通讯距离是多少,你知道吗?

目录 前言 不同协议通讯线的传输距离 无线传输协议与距离 1. 蓝牙 2. Zigbee 3. LoRa 4. Wi-Fi 5. 蜂窝网络 6. Sigfox 7. LoRaWAN (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 前言 在物联网中&#xff0c;通讯线的作用是…

leetcode经典面试150题---5.多数元素

目录 题目描述 前置知识 代码 方法一 排序法 思路 实现 复杂度 方法二 哈希表 思路 实现 题目描述 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给…

pg14-sql基础(四)-多表联查

多表联查 内联查询 SELECT e.department_id, e.first_name, d.department_name FROM employees e INNER JOIN departments d -- JOIN departments d ON e.department_id d.department_id;左外联查询 SELECT e.department_id, e.first_name, d.department_name FROM employees…

【C语言基础】第01章_C语言入门

讲师&#xff1a;康师傅 视频&#xff1a;https://www.bilibili.com/video/BV1Bh4y1q7Nt?p1&vd_source3eaa9d17f2454e1ae80abc50d16e66b5 文章目录 本章专题脉络1初识计算机语言1.1 计算机语言是什么1.2 计算机语言简史 2初识C语言2.1 C语言的由来2.2 为什么要学习C语言2.…

英语——分享篇——每日200词——1-200

1——ball——[bɔːl]——n.球——ball——ba爸(拼音)ll筷子(象形)——爸爸用筷子夹球——The kid is playing the ball. ——孩子在玩皮球。 2——boat——[bəʊt]——n.船——boat——bo60(象形)at在(熟词)——60个人在船上——I have 60 boats.——我有60艘船。 3——bag—…