APPInit(Application Initialization) 是在应用程序启动时执行的一些初始化操作,它的基本原理和工作原理通常包括以下几个方面:注册表项也可以用于进程启动时自动加载DLL.自动加载DLL的选项。
AppInit DLL 和安全启动 - Win32 apps | Microsoft Learn
Windows 7 中的AppInit_DLLs - Win32 apps | Microsoft Learn
APPInit(Application Initialization) 是 Windows 操作系统中的一个注册表项,它通常与 APPInit_DLLs 一起使用,用于加载和注入动态链接库(DLL)到所有的用户进程中。这个功能通常用于一些系统级的扩展,比如提供额外的功能或监控。但是,由于它能控制系统级别的程序行为,也常被恶意软件利用来注入代码。
APPInit 和 APPInit_DLLs 相关位置:
-
注册表位置:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\
-
作用:
- 通过在这个注册表项中指定的 DLL 文件,Windows 系统可以在启动时自动加载这些 DLL 文件。这些文件会被注入到几乎所有用户模式的应用程序中。
- 这种机制可以让某些程序对其他所有程序进行修改或监控(比如系统级的调试工具、反病毒软件或广告软件)。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
@="mnmsrvc"
"AppInit_DLLs"=""
"DdeSendTimeout"=dword:00000000
"DesktopHeapLogging"=dword:00000001
"DeviceNotSelectedTimeout"="15"
"DwmInputUsesIoCompletionPort"=dword:00000001
"EnableDwmInputProcessing"=dword:00000007
"GDIProcessHandleQuota"=dword:00002710
"IconServiceLib"="IconCodecService.dll"
"LoadAppInit_DLLs"=dword:00000000
"NaturalInputHandler"="Ninput.dll"
"RapidHpdTimeoutMs"=dword:00000bb8
"RequireSignedAppInit_DLLs"=dword:00000001
"ShutdownWarningDialogTimeout"=dword:ffffffff
"Spooler"="yes"
"TransmissionRetryTimeout"="90"
"USERNestedWindowLimit"=dword:00000032
"USERPostMessageLimit"=dword:00002710
"USERProcessHandleQuota"=dword:00002710
"Win32kLastWriteTime"="1DC2493E21CB117"
"LeakTrackingAllocatorMode"=dword:00000000
"PoolLeakedState"=dword:00000000
"LeakedPoolTag0"=dword:00000000
"LeakedPoolTag1"=dword:00000000
"LeakedPoolTag2"=dword:00000000
"LeakedPoolTag3"=dword:00000000
"LeakedPoolTag4"=dword:00000000
"LeakedPoolTag5"=dword:00000000
"LeakedPoolTag6"=dword:00000000
"LeakedPoolTag7"=dword:00000000
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows]
@="mnmsrvc"
"AppInit_DLLs"=""
"DdeSendTimeout"=dword:00000000
"DesktopHeapLogging"=dword:00000001
"DeviceNotSelectedTimeout"="15"
"DwmInputUsesIoCompletionPort"=dword:00000001
"EnableDwmInputProcessing"=dword:00000007
"GDIProcessHandleQuota"=dword:00002710
"IconServiceLib"="IconCodecService.dll"
"LoadAppInit_DLLs"=dword:00000000
"NaturalInputHandler"="Ninput.dll"
"RapidHpdTimeoutMs"=dword:00000bb8
"RequireSignedAppInit_DLLs"=dword:00000001
"ShutdownWarningDialogTimeout"=dword:ffffffff
"Spooler"="yes"
"TransmissionRetryTimeout"="90"
"USERNestedWindowLimit"=dword:00000032
"USERPostMessageLimit"=dword:00002710
"USERProcessHandleQuota"=dword:00002710
为什么使用 APPInit(Application Initialization) :
-
合法用途:
- 安全和监控软件: 一些安全软件使用 APPInit(Application Initialization) 来注入其 DLL,以便监控或保护用户的应用程序。
- 系统扩展: 一些工具或库可能会利用这个机制提供增强的功能或系统修复。
-
不合法用途:
- 恶意软件: 恶意软件经常利用这个机制来在用户的计算机上注入恶意代码,窃取信息或执行其他不良操作。因此,很多防病毒程序会特别警惕这个注册表项的变化。
如何防范:
-
禁用 APPInit: 你可以禁用这个功能来防止不必要的 DLL 注入,尤其是在怀疑存在恶意软件时。禁用的方法可以通过组策略或者修改注册表来实现。
在注册表中将
APPInit_DLLs设置为空字符串或者删除它:bashHKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\APPInit_DLLs -
使用防病毒软件: 防病毒软件可以检测和清除恶意软件注入的 DLL 文件,保护你的系统免受利用 APPInit(Application Initialization) 的攻击。
APPInit(Application Initialization) 是 Windows 系统的一个正常功能,但由于它能被恶意软件滥用,所以需要特别注意它的使用情况。
APPInit(Application Initialization) 是在应用程序启动时执行的一些初始化操作,它的基本原理和工作原理通常包括以下几个方面:
1. 基本原理
APPInit(Application Initialization) 主要是应用程序在启动过程中执行的一些准备工作。它通常会在应用程序的启动阶段,或在用户请求操作前,进行必要的初始化操作。其主要目标是为后续的应用逻辑提供所需的资源、配置、数据或状态,以确保应用能够正常工作。
2. 工作原理
-
加载应用配置:大部分应用在启动时需要加载外部的配置文件(如
.env文件、数据库连接配置等),这也是APPInit(Application Initialization) 的一部分。加载这些配置通常是应用初始化过程中的第一个步骤。 -
初始化数据结构和对象:应用在启动时需要构造一些核心的数据结构或对象,比如数据库连接池、缓存系统、日志系统、权限管理系统等。这些对象的初始化是 APPInit 的关键部分,确保系统在运行过程中能够访问这些资源。
-
连接资源服务:比如连接数据库、外部 API 或缓存服务器等。APPInit(Application Initialization) 会确保这些资源在应用程序的整个生命周期内都能够正常访问。通常,开发者会在应用初始化时检查网络服务的可用性,或者预先加载一些常用的数据。
-
设置全局状态:一些全局状态如用户登录状态、会话管理等也会在 APPInit 中进行初始化,确保后续的操作可以顺利进行。
-
依赖注入:在现代的应用框架中,依赖注入(Dependency Injection,简称 DI)是常见的一种模式。APPInit 通常会在初始化时将依赖关系注入到不同模块或服务中,确保它们能够正确地协作。
-
启动事件监听:在许多应用中,APPInit(Application Initialization) 也可能会设置一些事件监听器或钩子,以便在应用启动时触发某些操作或日志记录等。
-
资源加载:在APPInit(Application Initialization) 阶段,应用程序会加载必要的资源(如静态文件、图片、字体等),确保后续的操作不会遇到资源缺失的情况。
3. 流程简述
- 加载配置:读取配置文件或环境变量,初始化配置参数。
- 初始化服务:创建和初始化数据库连接池、缓存、消息队列等服务。
- 依赖注入:将各个模块和服务所需的依赖注入到它们的构造函数中。
- 资源预加载:加载静态资源、图片等。
- 执行初始化逻辑:例如缓存预加载、日志系统初始化等。
4. 应用场景
- Web应用:Web服务器启动时需要初始化数据库连接池、缓存服务等。
- 桌面应用:启动时可能需要加载用户偏好设置、语言配置、连接服务器等。
- 移动应用:初始化应用的网络设置、推送通知服务、分析工具等。
APPInit(Application Initialization) 的基本原理是应用在启动时完成一系列初始化操作,确保所需资源和配置可用。工作原理通过加载配置、初始化服务、依赖注入和预加载资源等方式,为应用提供顺畅的运行环境。
AppInit_DLLs用于在每个用户界面线程启动时加载指定的DLL。以下是一些常见的用途和注意事项:
-
DLL路径:
- 可以指定一个或多个DLL的完整路径。
-
多DLL加载:
- 可以通过逗号分隔加载多个DLL。
-
影响性能:
- 加载的DLL可能影响应用程序的启动速度和系统性能。
-
安全风险:
- 不安全或恶意的DLL可能导致系统稳定性和安全性问题。
-
配置位置:
- 注册表位置为
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs。
- 注册表位置为
使用AppInit_DLLs时需谨慎,以确保加载的DLL是可信的。
COM劫持通常涉及通过注册恶意COM组件来控制软件行为。以下是一些常见的COM劫持方式:
-
注册表劫持:
- 修改
HKEY_CLASSES_ROOT\CLSID或HKEY_CLASSES_ROOT\TypeLib中的注册信息,指向恶意DLL。
- 修改
-
替换合法组件:
- 替换系统或应用程序中的合法COM组件,使其加载恶意代码。
-
操控应用程序调用:
- 劫持常用应用程序的COM接口,使其调用恶意功能。
-
使用全局接口标识符(GUID):
- 创建恶意组件时使用已知的GUID,确保被目标程序加载。
-
浏览器扩展劫持:
- 通过注册COM对象劫持浏览器行为,实现恶意脚本执行。
进行COM劫持时需警惕安全隐患,确保软件环境的安全性。
注册表项主要涉及Windows操作系统的初始化和安全机制。
-
AppInit_DLLs:
- 路径:
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls和HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls。 - 功能:用于指定在每个用户界面进程加载时自动加载的DLL。这可以用于应用程序的功能扩展或增强,例如添加日志记录或监控功能。
- 路径:
-
AppCertDlls:
- 路径:
HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。 - 功能:用于指定应用程序认证DLL,这些DLL会在应用程序启动时检查程序的完整性和安全性,帮助防止不安全的程序运行。
- 路径:
-
image:
- 路径:
HKLM\Software\Microsoft\Windows NT\CurrentVersion\image(具体条目需进一步确认)。 - 功能:通常与操作系统的映像文件有关,可能用于存储系统映像或程序的路径和相关配置。
- 路径:
这些项在系统安全、性能优化和功能扩展中起着重要作用,尤其是在处理第三方软件和驱动程序时。
对这些注册表项的使用方法及示例:
-
AppInit_DLLs:
- 使用方法:可以在此注册表项添加DLL文件路径,使其在每个用户界面进程启动时自动加载。
- 示例:在
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls中添加C:\Path\To\YourDLL.dll,使该DLL在每次启动时加载。
-
AppCertDlls:
- 使用方法:指定DLL路径用于应用程序的安全验证。
- 示例:在
HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls中添加C:\Path\To\YourCertDLL.dll,以检查运行的程序是否安全。
-
image:
- 使用方法:存储系统映像或程序的相关信息。
- 示例:可以用于记录操作系统映像的路径,例如在
HKLM\Software\Microsoft\Windows NT\CurrentVersion\image下设置映像路径,帮助系统识别和验证当前运行的操作系统版本。
HKLM\Software\Microsoft\Windows NT\CurrentVersion\image,虽然具体的注册表项可能没有广泛文档化,但它通常用于存储与Windows映像相关的信息。以下是一个假设性的示例和用途:
示例
假设你想记录当前操作系统的映像路径,你可能会看到类似的条目:
- 名称:
CurrentImagePath - 类型:
REG_SZ - 数据:
C:\Windows\System32\kernel32.dll
使用方法
-
查看当前映像路径:
- 打开注册表编辑器(regedit)。
- 导航到
HKLM\Software\Microsoft\Windows NT\CurrentVersion\image。 - 查找
CurrentImagePath以确认操作系统的映像文件路径。
-
更新映像信息(如果需要):
- 右键点击
CurrentImagePath,选择“修改”。 - 输入新的路径(例如,如果你安装了新的系统映像)。
- 右键点击
还有几个注册表项也可以用于进程启动时自动加载DLL:
-
HKLM\Software\Microsoft\Windows\CurrentVersion\Run:- 通过添加DLL或其包装程序,可以在系统启动时加载。
-
HKCU\Software\Microsoft\Windows\CurrentVersion\Run:- 类似于上面,但适用于当前用户登录时加载。
-
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs:- 控制是否启用
AppInit_DLLs的加载。
- 控制是否启用
-
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options:- 可以指定特定可执行文件在启动时加载的DLL。
-
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce:- 适用于只在下次登录时加载DLL。
可以用于自动加载DLL的选项:
-
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices:- 用于在系统服务启动时加载DLL。
-
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx:- 在下一次用户登录时加载DLL或程序。
-
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run:- 可用于在资源管理器启动时加载特定DLL或程序。
-
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run:- 针对当前用户,在资源管理器启动时加载。
一些其他选项可以用于自动加载DLL:
-
HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\State:- 可用于在系统设置状态改变时加载特定DLL。
-
HKLM\System\CurrentControlSet\Services\<ServiceName>\ImagePath:- 在Windows服务启动时加载的DLL路径。
-
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall:- 在安装程序中可能会调用DLL。
-
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce:- 用于一次性服务启动时加载。
-
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce:- 适用于当前用户的下一次登录加载。
一些其他方法可以用于自动加载DLL:
-
COM组件注册:
- 注册DLL为COM组件,可以在应用程序需要时自动加载。
-
Windows任务计划程序:
- 创建任务在特定事件或时间点运行,加载指定的DLL或应用程序。
-
Shell扩展:
- 使用DLL作为Windows Shell扩展,可以在文件资源管理器等环境中自动加载。
-
组策略:
- 通过组策略设置在特定用户或计算机登录时加载程序。
-
服务启动:
- 配置系统服务以加载DLL,通常在
HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\下进行设置。
- 配置系统服务以加载DLL,通常在

浙公网安备 33010602011771号