基于QT(C++)实现Windows 自启动项查看和分析
♻️ 资源大小3.47MB➡️资源下载https://download.csdn.net/download/s1t16/87453199Windows 自启动项查看和分析简介此时实验中我们主要需要掌握下面的内容注册表读取注册表的读写是本次实验的重点内容主要的读取流程如下打开在注册表中的键查询打开键的数据信息比如说子键的数量键下值的个数修改时间等等读取键下值的信息以及对应的子键处理完成之后关闭打开的键定时任务读取读取定时任务的时候我们需要使用另外一个不同的 windows API 接口主要流程如下过程相对而言比较复杂这里不再赘诉可以参考官方文档:文件属性获取Windows 并没有提供一个直接获取文件版本属性的 API我们需要调用多个 API才能读取到我们需要的属性比如说我们想要获取到文件的 Description我们应该读取文件版本信息内容的大小申请对应大小的缓冲区将文件版本信息读取到缓冲区中调用 API 解析内容获取需要的属性文件的遍历在获取基于目录的自启动文件的时候我们需要遍历一个目录下的文件。我们可以使用 Windows 提供的 API实验时使用 Qt 进行展示所以直接使用 Qt 提供的相比较更加简单具体流程如下获取到文件路径之后我们便可以通过上述方式获取文件的属性签名验证Windows 中提供了相应的两个库 wintrust.hwincrypt.h我们使用其检查是否包含签名签名是否可信任。Logon基于启动目录和注册表原理Windows 启动目录主要有两个%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup在启动目录的程序在系统启动的时候会自动加载并运行我们只需要遍历其中的文件即可在注册表中添加对应的数据也可以实现自启动主要的键有HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\Current Version\RunHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 通过读取键下面的值我们也可以获取到自启动项读取实现对于启动目录我们可以只要遍历这两个目录下的所有文件即可可以使用 Qt 中提供的 API 进行实现比如 QDir, QFileinfo 等具体流程见[文件属性获取]对于注册表中注册的所有自启动项通过对注册表键的读取即可具体流程见 [注册表读取]隐秘性对于在启动目录中的程序会显式的显示在 Windows 菜单栏容易被发觉对于在注册表中定义的自启动项目难以被发现Services: 系统服务原理系统服务的自启动项位于下面的注册表键中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 3.2 读取实现借助 Autoruns 工具我们可以发现对应注册表键下的子键为对应的服务名子键中包含一些对应的值信息比如说 ImagePath, Type通过判断 Type 类型我们便可以获取到自启动服务项ImagePath 指定了启动服务的镜像文件描述信息并不是直接读取 ImagePath 中的文件描述而是应该检查值 Description 中的 dll 文件的描述信息在这里我们需要进行过滤Start 小于 2 的才能视为自启动服务隐秘性系统服务自启动设置基于注册表隐秘性较高且有很多共享程序均使用svchost.exe但是需要加载额外的 dll 文件这样比较容易让恶意的 dll 文件隐藏难以发现Drivers系统驱动程序原理系统驱动程序自启动项和系统服务所在的注册表位置一致均在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services虽然在同一个注册表键中但是这两个还是有区别的我们可以通过值中的Type 加以区分对于系统驱动程序而言一般其对应的 Type 为 1,2,8通过判断 Type 对应的值我们便可以挑选出系统驱动程序其实还有另外一个不同的地方系统驱动程序 ImagePath 一般为 sys 文件而系统服务一般都是可执行文件以 exe 结尾但是相比较而言使用Type 进行比较更加严谨读取实现与系统服务的读取一致隐秘性系统驱动程序自启动设置基于注册表隐秘性较高难以发觉如果是与内核相关的系统驱动系统级别高对系统造成的危害更大Scheduled Tasks 计划任务原理计划任务是系统提供的一项常用的功能我们可以在其中添加一个定时的任务这样系统就可以在指定的时间运行该任务通过 Task Scheduler 我们可以观察到下面的内容其中 General 中保存一些基本的信息Triggers 中指定对应的触发条件Actions 表示触发之后需要执行的动作比如打开一个服务Conditions 常常用来配合Triggers指定在什么时候运行如果 Conditions 中定义的条件不满足那么不会运行任务读取实现具体流程见[定时任务读取]官方提供了一个简单的示例我们可以通过改写这个示例实现需要的功能。因为我们需要遍历所有的任务我这里使用的是递归实现首先读取根目录如果存在子目录读取子目录如果没有子目录遍历读取目录中的任务大概代码框架如下void walkFolders(ITaskFolder *rootFolder, HRESULT hr, vectorinfo inf os) { ITaskFolderCollection *pFolders NULL; // 获取rootFolder下面的目录 hr rootFolder-GetFolders(0, pFolders); LONG numFolders 0; // 获取子目录个数 hr pFolders-get_Count(numFolders); for (LONG i 0; i numFolders; i) { ITaskFolder *pRootFolder NULL; // 遍历子目录 hr pFolders-get_Item(_variant_t(i 1), pRootFolder); // 递归遍历 walkFolders(pRootFolder, hr, infos); // 遍历tasks IRegisteredTaskCollection *pTaskCollection NULL; hr pRootFolder-GetTasks(NULL, pTaskCollection); // .... } }隐秘性任务计划程序隐秘性很好一般用于定时任务KnownDLLs知名动态链接库原理Known DLLs 是 Windows NT 内核的一种机制可以用来缓存经常性使用的系统 dll 文件如果一个可执行文件需要调用一个 dll 文件那么首先会在这个注册表中找到对应的文件如果找到那么会直接使用这里面的文件隐秘性Known DLLs 位于注册表隐秘性好是保证用 LoadLibrary 装载系统 DLL 时只从特定的系统目录装载防止装载错误的系统 DLL读取实现Known DLLs 保存在注册表中读取内容方式与[Logon]等一致Boot Execute启动执行原理Boot Execute 所指定的内容会在系统开机的时候进行执行其信息保存在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 下的 Boot Execute 值中默认情况下为 autocheck autochk *读取实现首先读取到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager 子键的信息然后通过 RegQueryValueEx 或者遍历所有值的方式获取到Boot Execute 所对应的信息隐秘性位于注册表隐秘性好系统启动的时候执行遇到的问题运行的时候提示库不存在按照微软的官方文档使用 comment 引入库文件但是实际上运行的时候发现仍然无法引入实际上本地使用的是 MinGW在网上查找资料发现应该通过.pro 添加最后项目中的 LIBS 如下LIBS -lVersion \ -ltaskschd \ -lole32 \ -luser32 \ -loleaut32 \ -lwintrustrelease 的之后打开执行文件失败提示找不到 dll 文件默认情况下Windows 下没有这些 dll 文件在 Qt 提供的环境下编译的时候会自动链接这些 dll 文件我们发布的时候不会将这些 dll 文件包含在可执行文件中我们可以在 Qt 提供控制台的使用 windeployqt 命令进行部署# 生成Autoruns需要的dll文件 windeployqt Autoruns.exe运行程序之后有时候会 crash运行 Qt 界面之后有时候会出现 crash 的现象有时候是正常的刚开始没有注意后来到网上查了一下发现是可能访问了没有分配的地址空间。对照代码进行 review发现有一处进行字符转换的的位置出现了问题后来采用下面的转换方式成功解决该问题。QString Byte2Qs(BYTE *str) { return QString::fromWCharArray((LPCTSTR)str); }软件框架实验中使用 Qt6.1.0 套件进行开发使用 Qt Creator 作为主要的开发 IDE代码结构每一个项目使用一个类进行保存向外提供一个 setTableData 函数用以设置表格的内容内部各自实现对应的数据获取代码结构如下优化在代码中使用 cache 数组标记已经设置数据的 table下次访问的时候不用再去请求数据使用上一次的数据另外提供 Tools Refresh 刷新当前标签页的数据效果LogonServiceDriversTasksKnowndllsBootExecute

相关新闻

手机应用权限管理:风险与防护指南

手机应用权限管理:风险与防护指南

1. 手机应用权限管理的现状与风险上周三早上,我像往常一样打开手机相册准备查看前几天拍摄的照片,却发现整个相册空空如也。那一刻的恐慌感至今记忆犹新——孩子出生以来的所有照片、工作重要文档的扫描件、积累多年的设计素材,全都不翼而飞。…

2026/10/10 1:41:56 阅读更多 →
魔兽争霸3终极优化指南:用WarcraftHelper解锁完美游戏体验

魔兽争霸3终极优化指南:用WarcraftHelper解锁完美游戏体验

魔兽争霸3终极优化指南:用WarcraftHelper解锁完美游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的…

2026/10/14 16:10:15 阅读更多 →
深入解析TMS320F2807x CLB模块:从寄存器到Driverlib的高效开发实战

深入解析TMS320F2807x CLB模块:从寄存器到Driverlib的高效开发实战

1. 项目概述如果你正在使用TI的TMS320F2807x系列微控制器开发电机控制、数字电源或者任何需要高度定制化逻辑的实时系统,那么你肯定绕不开一个强大的模块:可配置逻辑块,也就是CLB。这个模块的魅力在于,它把一部分FPGA的灵活性搬到…

2026/10/13 3:09:43 阅读更多 →

最新新闻

UDP广播实战:从原理到跨平台稳定收发的完整指南

UDP广播实战:从原理到跨平台稳定收发的完整指南

1. 项目概述:为什么一个“UDP广播demo”值得花一整天认真写透UDP广播这个概念,听起来像教科书里被翻旧了的一页纸——很多刚学网络编程的人,第一反应是:“不就是发个包,让局域网里所有机器都收到吗?”但真当…

2026/10/15 6:14:42 阅读更多 →
Spring事件机制实战:用ApplicationEventPublisher实现业务解耦

Spring事件机制实战:用ApplicationEventPublisher实现业务解耦

做后端开发的人应该都有过这种经历:一个下单接口,业务代码越堆越多。一开始只是保存订单,后面要扣库存、发短信、发优惠券、加积分、通知财务……新需求一个接一个,每次都要打开核心 Service 往里面塞代码。改到后面,下…

2026/10/15 6:14:42 阅读更多 →
Java工程师24周转型Agent工程师:从LLM基础到多Agent协作实战

Java工程师24周转型Agent工程师:从LLM基础到多Agent协作实战

1. 为什么Java老手转Agent工程师反而有优势这两年Agent Engineer这个岗位火得有点不讲道理。招聘网站上挂出来的JD,薪资区间普遍比同级别的后端开发高出30%到50%,而且很多岗位明确写着“有后端经验者优先”。我身边不少写了五六年Java的朋友都在问同一个…

2026/10/15 6:14:42 阅读更多 →
IDEA+Maven+Tomcat:从零创建JSP Web项目完整实战指南

IDEA+Maven+Tomcat:从零创建JSP Web项目完整实战指南

1. 项目概述:为什么现在还要学JSP,以及你将从这篇文章里得到什么先别急着划走。我知道很多人一看到JSP这仨字母,第一反应是"这不是上个时代的东西了吗?现在不都是前后端分离、Vue/React一把梭吗?"——这话没…

2026/10/15 6:14:42 阅读更多 →
机房UPS备用电源监控实战:电池巡检与告警配置全解析

机房UPS备用电源监控实战:电池巡检与告警配置全解析

说起来有点丢人,我们这套机房UPS备用电源监控系统,是被一次本可以避免的机房掉电事故逼出来的。那会儿机房规模不大,两台某品牌的200kVA主机做11冗余,带大约60多路机柜,负载不算重,约40%左右。当时我们对UP…

2026/10/15 6:14:42 阅读更多 →
对抗样本攻击方法全解析:从FGSM到物理世界攻击

对抗样本攻击方法全解析:从FGSM到物理世界攻击

1. 对抗样本攻击的底层逻辑与整体分类框架搞机器学习安全这块的人,迟早会碰到对抗样本这个绕不开的坎。我第一次接触这个概念是在做一个图像分类的小项目时,模型在测试集上准确率跑到98%以上,结果把一张熊猫照片加上一层肉眼几乎看不出来的噪…

2026/10/15 6:13:42 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →