• 第二次课10.28


    hash 计算接口 Crypto API (证书,对称加密,非对称加密,编码和解码)
    CryptAcquireContext
    CryptCreateHash
    CryptReleaseContext
    CryptHashData
    CryptDestroyHash
    CryptGetHashParam

    注册表操作接口
    RegEnumKeyEx
    RegEnumValueW
    RegOpenKeyExW
    RegQueryValueExW
    RegQueryInfoKeyW

    服务注册表的路径:\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services

    AutoRuns 和 AutoRuncs 下载地址
    https://learn.microsoft.com/zh-cn/sysinternals/downloads/autoruns

    目标:
    1、在上次课的基础上把所有枚举出来的进程以及进程模块的文件hash值[MD5 sha-1,sha256]计算出来;存在父进程id的进程一并把父进程信息给关联起来一并输出;涉及运行中文件的打开,可以考虑先复制到其他地方再读取内容进行计算。
    2、使用注册表接口,把注册表中的服务信息枚举出来,并输出关联的二进制路径,思考一下使用服务接口枚举的服务和注册表枚举的服务如何关联。
    3、使用注册表接口,枚举当前计算启动项信息,启动项注册表路径自己查阅资料。
    扩展内容:可以在进程,模块hash的基础上增加文件签名校验:参考内容链接:https://blog.csdn.net/StanfordZhang/article/details/8255605

    1、hash CRC32–开销比较小 ,MD5,SHA1,SHA256 --运行开销,自定义的简单hash ,oxxxdxg.exe 长度,第一个字符是0 第四个字符是d 第六个是g 存在碰撞的可能。FFFFXAC VALUE ^ KEY = ENCODE;ENCODE ^ KEY = VALUE;

    1231234535–》calc_proc—>data_spect

    运行时解密。

    框架原始的串 --》calc——proc -》FFFFXAC ollydbg.exe

    注册表,这个就是WINDOWS 自带的数据库,或者说是一个配置库。

    自启动

    总结:白名单技术。云查(网络接口)

       CryptAcquireContext:
            phProv:指向 HCRYPTPROV 类型的句柄变量的指针。
            pszContainer:指向包含密钥容器名称的字符串的指针。
            pszProvider:指向加密服务提供程序的名称的字符串的指针。
            dwProvType:加密服务提供程序的类型。
            dwFlags:标志,用于指定加密服务提供程序的行为。
    
        CryptCreateHash:
            hProv:与已获取的加密服务提供程序关联的加密服务提供程序句柄。
            Algid:标识要使用的哈希算法的常数值。
            hKey:可选参数,与哈希对象关联的对称加密算法的密钥句柄。
            dwFlags:标志,用于指定创建哈希对象的行为。
            phHash:指向 HCRYPTHASH 类型的句柄变量的指针。
    
        CryptReleaseContext:
            hProv:与要释放的加密服务提供程序相关联的加密服务提供程序句柄。
            dwFlags:标志,用于指定释放上下文时的行为。
    
        CryptHashData:
            hHash:要使用的哈希对象的句柄。
            pbData:指向要进行哈希计算的数据的缓冲区的指针。
            dwDataLen:要进行哈希计算的数据的长度。
            dwFlags:标志,用于指定哈希数据时的行为。
    
        CryptDestroyHash:
            hHash:要销毁的哈希对象的句柄。
    
        CryptGetHashParam:
            hHash:要获取参数的哈希对象的句柄。
            dwParam:要获取的哈希参数的标识符。
            pbData:指向接收参数数据的缓冲区的指针。
            pdwDataLen:指向接收参数数据长度的变量的指针。
            dwFlags:标志,用于指定获取哈希参数时的行为。
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
      RegEnumKeyEx:
            hKey:要枚举子键的注册表键句柄。
            dwIndex:子键的索引,从0开始计数。
            lpName:指向接收子键名称的缓冲区的指针。
            lpcName:指向接收子键名称长度的变量的指针。
    
        RegEnumValueW:
            hKey:要枚举值的注册表键句柄。
            dwIndex:值的索引,从0开始计数。
            lpValueName:指向接收值名称的缓冲区的指针。
            lpcbValueName:指向接收值名称长度的变量的指针。
            lpReserved:保留参数,应设置为NULL。
            lpType:指向接收值类型的变量的指针。
            lpData:指向接收值数据的缓冲区的指针。
            lpcbData:指向接收值数据长度的变量的指针。
    
        RegOpenKeyExW:
            hKey:父键的注册表键句柄。
            lpSubKey:要打开的子键的路径。
            ulOptions:打开选项和标志。
            samDesired:权限控制标志。
    
        RegQueryValueExW:
            hKey:要查询值的注册表键句柄。
            lpValueName:要查询的值的名称。
            lpReserved:保留参数,应设置为NULL。
            lpType:指向接收值类型的变量的指针。
            lpData:指向接收值数据的缓冲区的指针。
            lpcbData:指向接收值数据长度的变量的指针。
    
        RegQueryInfoKeyW:
            hKey:要查询信息的注册表键句柄。
            lpClass:指向接收类名的缓冲区的指针。
            lpcchClass:指向接收类名长度的变量的指针。
            lpReserved:保留参数,应设置为NULL。
            lpcSubKeys:指向接收子键数量的变量的指针。
            lpcbMaxSubKeyLen:指向接收最长子键名长度的变量的指针。
            lpcbMaxClassLen:指向接收最大类名长度的变量的指针。
            lpcValues:指向接收值数量的变量的指针。
            lpcbMaxValueNameLen:指向接收最长值名称长度的变量的指针。
            lpcbMaxValueLen:指向接收最大值数据长度的变量的指针。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    路径 \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services

    路径 \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services 是 Windows 注册表中存储系统服务配置信息的位置。在这个路径下,每个注册表项对应一个系统服务,并包含了该服务的配置和属性。
    在 Services 路径下的每个子项代表一个单独的系统服务。这些子项的名称是服务的标识符(通常是服务名称),而键值则包含了服务的各种配置信息,如服务的启动类型、路径、依赖关系及其他参数等。
    HKEY_LOCAL_MACHINE:这是注册表的根键之一,表示本地计算机上的注册表。它包含了计算机的硬件和操作系统相关的配置信息。
    SYSTEM:这是 HKEY_LOCAL_MACHINE 下的一个子键,用于存储系统级别的配置数据,包括操作系统设置、设备驱动程序等。
    ControlSet001:这是 SYSTEM 下的一个子键,代表当前正在使用的控制集(Control Set)。Windows 操作系统通常会有多个控制集,每个控制集对应不同的启动配置或系统状态。
    Services:这是 ControlSet001 下的一个子键,用于存储系统服务的配置信息。每个子项对应一个已安装的服务,并包含了该服务的各种属性和配置选项。
    通过访问这个注册表路径下的子项和键值,可以管理和配置系统中已安装的服务,例如启用/禁用服务、更改服务的启动类型、配置服务参数等

    Control Set

    Control Set(控制集)是 Windows 操作系统注册表中用于存储操作系统配置信息的一组相关注册表项。它们位于 HKEY_LOCAL_MACHINE\SYSTEM 下的多个子键中,例如 ControlSet001、ControlSet002 等。
    每个 Control Set 对应着不同的系统启动配置或系统状态。在正常情况下,Windows 操作系统会根据当前系统的启动配置选择其中一个 Control Set 来加载并作为当前运行的配置。
    当系统引导时,Windows 会自动选择最近的有效 Control Set 并加载其配置。这通常是基于上次成功启动的 Control Set。如果某个 Control Set 配置存在问题导致无法启动,Windows 可以尝试加载备份 Control Set 或进入安全模式等手段来解决问题。
    每个 Control Set 存储了各种操作系统和设备驱动程序的配置信息,包括服务配置、硬件配置、启动选项等。在注册表中,Control Set 的配置信息主要存储在以下几个子键中:
    ControlSetXXX\Services:存储系统服务的配置信息。
    ControlSetXXX\Control:存储操作系统相关的配置信息。
    ControlSetXXX\Enum:存储设备枚举和配置信息。
    注意,XXX 表示具体的数字,如 ControlSet001、ControlSet002 等。
    通过使用 Control Set,Windows 可以支持多个系统配置,并能够根据需要切换配置以满足不同的需求,例如修复系统故障或恢复到先前的正常工作状态

    HCRYPTHASH

    HCRYPTHASH 是 Crypto API 中定义的哈希对象的句柄类型。它是一个指向哈希对象的句柄,用于标识和操作哈希对象。
    在使用 Crypto API 进行哈希计算时,首先需要创建一个哈希对象,获得该哈希对象的句柄(HCRYPTHASH),然后可以使用这个句柄进行哈希操作,如添加数据、获取哈希值等。通过操作哈希对象的句柄,可以对数据进行逐步处理,并最终获取其哈希值。
    HCRYPTHASH 类型的句柄是一个抽象的数据类型,表示 Crypto API 内部管理的哈希对象的引用。具体的实现和内部结构由 Crypto API 进行管理,开发者无需关心其具体内容。
    需要注意的是,当不再需要使用哈希对象时,应该调用 CryptDestroyHash 函数来销毁哈希对象,并释放相关资源。销毁哈希对象后,相应的 HCRYPTHASH 句柄将不再有效。
    总之,HCRYPTHASH 类型是 Crypto API 中用于标识和操作哈希对象的句柄类型

    AutoRuns

    AutoRuns64:这是针对64位操作系统的版本,专门设计用于在64位Windows操作系统上运行。它支持查看和管理64位系统中的自动启动项、服务等。
    
    AutoRuns32:这是针对32位操作系统的版本,用于在32位Windows操作系统上执行。它适用于32位的Windows系统,并提供了相同的功能,但仅适用于32位的自动启动项、服务等。
    
    AutoRuns:这是通用版本,可以在32位和64位的Windows操作系统上运行。通常,当您在64位操作系统上运行此通用版本时,它将自动检测并使用AutoRuns64的功能,以便查看和管理64位系统中的自动启动项和服务。而在32位操作系统上运行时,它会使用AutoRuns32的功能。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    https://learn.microsoft.com/zh-cn/sysinternals/downloads/autoruns
    在这里插入图片描述
    可以在该工具上我们看到各个注册表下运行的程序,
    AutoRuns 提供了许多功能,以帮助用户管理 Windows 操作系统中的自动启动项、服务、驱动程序等。以下是 AutoRuns 工具中的一些主要功能:

    Everything:该选项显示系统中所有自动启动的项目,包括启动文件夹、注册表项、计划任务、驱动程序和服务等。
    
    Logon:列出在用户登录时自动启动的项目,例如启动文件夹、注册表键值、托盘图标等。
    
    Explorer:显示与资源管理器(Windows Explorer)相关的自动启动项,包括 shell 扩展、工具栏、上下文菜单等。
    
    Internet Explorer:列出与 Internet Explorer 相关的自动启动项,如 BHO(浏览器辅助对象)、工具栏、IE 插件等。
    
    Scheduled tasks:显示计划任务列表,包括由 Windows 自动调度执行的任务。
    
    Services:列出系统中安装的服务,提供对服务的控制选项,如启用、禁用、停止等。
    
    Drivers:显示系统中已加载的驱动程序,包括内核模式和用户模式驱动。
    
    Boot execute:列出在系统引导过程中自动执行的命令或脚本。
    
    Image hijacks:显示修改了默认图像文件关联的自动启动项。
    
    AppInit:显示在系统初始化过程中自动加载的 DLL。
    
    Known DLLs:列出已知的动态链接库(DLL)和它们的加载顺序。
    
    Winsock Providers:显示已注册的 Winsock 提供程序。
    
    Print monitors:列出已安装的打印监视器。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    除了上述功能,AutoRuns 还提供了过滤和搜索功能,以便用户快速找到特定的启动项或服务。用户可以通过右键单击项目来执行操作,如禁用、删除、查看属性等。

    这些功能使用户能够全面了解和管理 Windows 系统中的自动启动项、服务和驱动程序,从而提高系统性能、确保安全性,并进行必要的排障和配置调整。

  • 相关阅读:
    底层驱动day8作业
    【leetcode】1137. 第 N 个泰波那契数
    【前端验证】通关寄存器与ral_model —— 将寄存器描述由excel格式转为xml格式的脚本
    正则表达式学习(超详细)
    React-native开发环境搭建(Windows平台)
    快速上手kettle(一)壶之简介
    .net+bootstrap写的一个还不错的音乐网站
    微信小程序云开发-云函数发起https请求简易封装函数
    python 基于aiohttp的异步爬虫实战
    自制数据集:点云变化
  • 原文地址:https://blog.csdn.net/m0_72827793/article/details/134096239