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 相关位置:

  1. 注册表位置:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\
    • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\
  2. 作用:

    • 通过在这个注册表项中指定的 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 设置为空字符串或者删除它:

    bash
    HKEY_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. 流程简述

  1. 加载配置:读取配置文件或环境变量,初始化配置参数。
  2. 初始化服务:创建和初始化数据库连接池、缓存、消息队列等服务。
  3. 依赖注入:将各个模块和服务所需的依赖注入到它们的构造函数中。
  4. 资源预加载:加载静态资源、图片等。
  5. 执行初始化逻辑:例如缓存预加载、日志系统初始化等。

4. 应用场景

  • Web应用:Web服务器启动时需要初始化数据库连接池、缓存服务等。
  • 桌面应用:启动时可能需要加载用户偏好设置、语言配置、连接服务器等。
  • 移动应用:初始化应用的网络设置、推送通知服务、分析工具等。

APPInit(Application Initialization) 的基本原理是应用在启动时完成一系列初始化操作,确保所需资源和配置可用。工作原理通过加载配置、初始化服务、依赖注入和预加载资源等方式,为应用提供顺畅的运行环境。


AppInit_DLLs用于在每个用户界面线程启动时加载指定的DLL。以下是一些常见的用途和注意事项:

  1. DLL路径

    • 可以指定一个或多个DLL的完整路径。
  2. 多DLL加载

    • 可以通过逗号分隔加载多个DLL。
  3. 影响性能

    • 加载的DLL可能影响应用程序的启动速度和系统性能。
  4. 安全风险

    • 不安全或恶意的DLL可能导致系统稳定性和安全性问题。
  5. 配置位置

    • 注册表位置为HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

使用AppInit_DLLs时需谨慎,以确保加载的DLL是可信的。


COM劫持通常涉及通过注册恶意COM组件来控制软件行为。以下是一些常见的COM劫持方式:

  1. 注册表劫持

    • 修改HKEY_CLASSES_ROOT\CLSIDHKEY_CLASSES_ROOT\TypeLib中的注册信息,指向恶意DLL。
  2. 替换合法组件

    • 替换系统或应用程序中的合法COM组件,使其加载恶意代码。
  3. 操控应用程序调用

    • 劫持常用应用程序的COM接口,使其调用恶意功能。
  4. 使用全局接口标识符(GUID)

    • 创建恶意组件时使用已知的GUID,确保被目标程序加载。
  5. 浏览器扩展劫持

    • 通过注册COM对象劫持浏览器行为,实现恶意脚本执行。

进行COM劫持时需警惕安全隐患,确保软件环境的安全性。


注册表项主要涉及Windows操作系统的初始化和安全机制。

  1. AppInit_DLLs

    • 路径HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls 和 HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls
    • 功能:用于指定在每个用户界面进程加载时自动加载的DLL。这可以用于应用程序的功能扩展或增强,例如添加日志记录或监控功能。
  2. AppCertDlls

    • 路径HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls
    • 功能:用于指定应用程序认证DLL,这些DLL会在应用程序启动时检查程序的完整性和安全性,帮助防止不安全的程序运行。
  3. image

    • 路径HKLM\Software\Microsoft\Windows NT\CurrentVersion\image(具体条目需进一步确认)。
    • 功能:通常与操作系统的映像文件有关,可能用于存储系统映像或程序的路径和相关配置。

这些项在系统安全、性能优化和功能扩展中起着重要作用,尤其是在处理第三方软件和驱动程序时。


对这些注册表项的使用方法及示例:

  1. AppInit_DLLs

    • 使用方法:可以在此注册表项添加DLL文件路径,使其在每个用户界面进程启动时自动加载。
    • 示例:在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_Dlls中添加C:\Path\To\YourDLL.dll,使该DLL在每次启动时加载。
  2. AppCertDlls

    • 使用方法:指定DLL路径用于应用程序的安全验证。
    • 示例:在HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls中添加C:\Path\To\YourCertDLL.dll,以检查运行的程序是否安全。
  3. image

    • 使用方法:存储系统映像或程序的相关信息。
    • 示例:可以用于记录操作系统映像的路径,例如在HKLM\Software\Microsoft\Windows NT\CurrentVersion\image下设置映像路径,帮助系统识别和验证当前运行的操作系统版本。

HKLM\Software\Microsoft\Windows NT\CurrentVersion\image,虽然具体的注册表项可能没有广泛文档化,但它通常用于存储与Windows映像相关的信息。以下是一个假设性的示例和用途:

示例

假设你想记录当前操作系统的映像路径,你可能会看到类似的条目:

  • 名称CurrentImagePath
  • 类型REG_SZ
  • 数据C:\Windows\System32\kernel32.dll

使用方法

  1. 查看当前映像路径

    • 打开注册表编辑器(regedit)。
    • 导航到 HKLM\Software\Microsoft\Windows NT\CurrentVersion\image
    • 查找 CurrentImagePath 以确认操作系统的映像文件路径。
  2. 更新映像信息(如果需要):

    • 右键点击 CurrentImagePath,选择“修改”。
    • 输入新的路径(例如,如果你安装了新的系统映像)。

还有几个注册表项也可以用于进程启动时自动加载DLL:

  1. HKLM\Software\Microsoft\Windows\CurrentVersion\Run

    • 通过添加DLL或其包装程序,可以在系统启动时加载。
  2. HKCU\Software\Microsoft\Windows\CurrentVersion\Run

    • 类似于上面,但适用于当前用户登录时加载。
  3. HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs

    • 控制是否启用AppInit_DLLs的加载。
  4. HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

    • 可以指定特定可执行文件在启动时加载的DLL。
  5. HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

    • 适用于只在下次登录时加载DLL。

可以用于自动加载DLL的选项:

  1. HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices

    • 用于在系统服务启动时加载DLL。
  2. HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx

    • 在下一次用户登录时加载DLL或程序。
  3. HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

    • 可用于在资源管理器启动时加载特定DLL或程序。
  4. HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

    • 针对当前用户,在资源管理器启动时加载。

一些其他选项可以用于自动加载DLL:

  1. HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\State

    • 可用于在系统设置状态改变时加载特定DLL。
  2. HKLM\System\CurrentControlSet\Services\<ServiceName>\ImagePath

    • 在Windows服务启动时加载的DLL路径。
  3. HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall

    • 在安装程序中可能会调用DLL。
  4. HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce

    • 用于一次性服务启动时加载。
  5. HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

    • 适用于当前用户的下一次登录加载。

一些其他方法可以用于自动加载DLL:

  1. COM组件注册

    • 注册DLL为COM组件,可以在应用程序需要时自动加载。
  2. Windows任务计划程序

    • 创建任务在特定事件或时间点运行,加载指定的DLL或应用程序。
  3. Shell扩展

    • 使用DLL作为Windows Shell扩展,可以在文件资源管理器等环境中自动加载。
  4. 组策略

    • 通过组策略设置在特定用户或计算机登录时加载程序。
  5. 服务启动

    • 配置系统服务以加载DLL,通常在HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\下进行设置。

 

posted @ 2024-10-23 13:49  suv789  阅读(242)  评论(0)    收藏  举报