第二次课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:标志,用于指定获取哈希参数时的行为。
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:指向接收最大值数据长度的变量的指针。
路径 \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的功能。
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:列出已安装的打印监视器。
除了上述功能,AutoRuns 还提供了过滤和搜索功能,以便用户快速找到特定的启动项或服务。用户可以通过右键单击项目来执行操作,如禁用、删除、查看属性等。
这些功能使用户能够全面了解和管理 Windows 系统中的自动启动项、服务和驱动程序,从而提高系统性能、确保安全性,并进行必要的排障和配置调整。