win7系统口令登录过程调试方法图解
发布时间:2023-02-05 19:09:46
Windows7以后Winlogon进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中完全可能存在多个登录进程,注销后Winlogon 进程也会随之结束,下面为大家介绍下登录过程的调试
首先介绍Windows 7系统基本原理
Windows7 以后 Winlogon 进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中完全 可能存在多个登录进程,注销后 Winlogon 进程也会随之结束。
Windbg 断点 NtCreateUserProcess 观察 Windows7 启动流程:


我整理的基本进程树如下:
smss.exe autochk.exe
smss.exe 00000000 0000003c //session 0
Csrss.exe
Wininit.exe
Services.exe
开机自启动服务进程
Lsass.exe
Lsm.exe
smss.exe 00000001 0000003c //session 1
Csrss.exe
Winlogon.exe
LogonUI.exe
LogonUI.exe 负责用户认证界面,Windows7 以后不再使用 msgina.dll,而是使用多个进程配合,完成用户 认证过程,大致过程为 1、Winlogon 启动 LogonUI 等待用户输入凭证 2、Winlogon 通过 ALPC 通知 Lsass用户登录 3、Lsass 依次查询认证模块【本地认证 MSV1_0.dll】4、Lsass 返回认证结果。框图如下

Windows 7调试过程
必须要吐槽下,windows7 下 windbg 内核调试应用程序经常断不下了,害我浪费了很多功夫~~现总结 了一个稳当可靠的办法:
1、!process 0 0 查看目标进程的基本情况,主要是 Cid。
2、bp nt!KiFastCallEntry "j poi(@$teb+20) = 0x1a0'';'gc'" 把 1a0 替换成实际的 Cid 即可。
3、等断点命中后,bp winlogon!XXXXX
4、.reload /user 下,bl 看一下,确保函数解析成地址。
首先看 Winlogon 和 LogonUI 之间的交互,LogonUI.exe 就是一个壳,类似 svchost,真正的功能是通 过 authui.dll模块完成的,从《Windows Internals5》介绍,winlogon 是通过 ALPC 的东西同 Lsass 通信的,但是 LogonUI 没怎么讲,我估计八成也是一样的,应该就是 RPC 调用。
RPC 调用分服务端和客户端,客户端最终 RPCRT4!NdrClientCall2 执行调用,而服务端最终会执行
RPCRT4!Invoke执行具体的函数。
我们断点 winlogon!NdrClientCall2观察下【这里不 bp RPCRT4!NdrClientCall2主要是避免其他进程干 扰,因为 RPC 在系统中调用很频繁】,随便输入个密码,命中:

这里我们发现 winlogon 的确使用了 RPC 调用来执行进程交互,注意这个函数名是 WluiDisplayStatus,其 实很明确的告诉我们 winlogonUIDisplayStatus,那么该 RPC 最终在哪里被执行呢?很显然是在 authui.dll 下断点 RPCRT4!Invoke 命中,而后单步跑一下,如图:

直接从 IDA 里面翻了下 authui.dll注册 RPC 服务

从

直接把所有的 RPC 接口函数 DUMP 出来,如下:

其中 WluirRequestCredentials很惹人关注,对应的 winlogon!WluirRequestCredentials函数如下:

Winlogon 同 logonUI 的 authui.dll 中通过一一对应的 RPC 函数完成接口调用,下面是一次错误密码测 试过程时,依次命中的调用情况:
序号函数名描述
1
winlogon!WluiRequestCredentials请求用户输入凭证,注:该函数是阻塞函数,会一直等待直到用户确认登录才返回。
2
winlogon!WluiDisplayStatus显示状态?未细究。
3
winlogon!WluiReportResult通报结果。
4
winlogon!WluiDisplayRequestCredentialsError显示登录错误提示。
我们发现基本上 LogonUI 进程没干啥活,所以的动作都是 winlogon 的 WluiXXXXXX 接口消息驱动的,
IDA 里面会发现大量的 DirectUI 界面代码。
Winlogon 使用状态机来维护整个登录过程中的各种情况处理,通过 Winlogon!StateMachineSetSignal
来完成状态切换,整个状态定义 DUMP 如下【未截全】:

例如:断点 Winlogon!StateMachineSetSignal点击登录界面残障人士按钮,命中如下:

注意其中的参数二对应的是状态,查下状态 9 对应的正是 g_xWinsrv_AccessNotify_Signal,winlogon和 LogonUI 的交互基本上流程基本比较清晰了,下面我们重点研究下 winlogon 同 lsass 进程完成密码认证的一些细节。
Winlogon 同样使用 RPC 调用完成同 lsass 的交互,不同的是 windows 把这几个 RPC 调用封装成了 DLL形式,分别是 SspiCli 客户端和 SspiSrv 服务端,最终还是调用了 RPCRT4 函数,证据如下:

直接从 IDA 中 DUMP 出 SSPISRV 的 RPC 调用接口如下:

Winlogon 调用 SspiCli!LsaLogonUser完成登录,该函数最终通过RPC 调用 Lsass::SspiSrv!SspirLogonUser

其中 AuthenticationInformation 参数里面包含了登录所需的信息,具体结构如下:

Windbg 显示这里密码被加密了,哈哈,下内存写断点,命中堆栈如下:

Winlogon!WLGeneric_Request_Logon_Credz_Execute 对应的代码如下:

该函数首先通过 RequestCredentials 函数请求登录凭证,如果是本地登录模式,该函数最终会调用 WluiRequestCredentials函数执行 LogonUI 进程的 RPC 服务函数 authui!WluiRequestCredentials,请求用户输入登录凭证。
最终 authui!CRequestCredentialsCallbackData::GetCredential获取用户登录凭证,数据结构为_CRED_PROV_CREDENTIAL* 可惜没有数据结构定义。

输入“qqqqqqqq”调试显示 DUMP 如下:

下内存断点:Ba w1 0027e5c8+3e,命中堆栈如下:

这里 windbg 函数显示的函数 CRequestCredentialsCallbackData::GetShutdownChoice+0x63是错误的,实际 是 sub_7483CBE7 函数:

查看一下内存数据,如下:

源地址是 0027e510,长度是 000000b0 :




Ba w1 0027e510+3e,命中 查看源地址 238df78: 继续跟踪内存 Ba w1 238df78+3e

查看内存如下:

函数 KerbInteractiveUnlockLogonPack是一个可以 google 到的函数,很好。

02 024df8fc 024df924 024df928 authui!KerbInteractiveUnlockLogonPack+0x90




断点 ba w1 023888b8 命中堆栈

CredProtect 函数 MSDN 如下:


查看堆栈第二个参数,果然是明文密码:

对应的解密函数 CredUnprotect

这些内容实际在 lsass 进程里面解密,断点 ADVAPI32!CredUnprotectW命中堆栈如下:

最终的密码认证还是通过群众喜闻乐见的 msv1_0!LsaApLogonUserEx2来完成,如下:

以上是图片的记录哦!


猜你喜欢
- WPS表格中提供了查找功能,查找某一个信息点时方便快捷。WPS表格里面快速查找的方法:按下快捷键“Ctrl+F”或单击菜单栏上的【开始】,【
- 1首先打开所需编辑的Excel工作薄,找到需要编辑标注的单元格或者行列。 2在菜单栏内找“开始”-“wen文”,打
- 信息技术考试和日常生活办公中,可能需要一些样式。那么怎么设置标题呢?下面由小编为您详细解说吧!word2007标题格式设置步骤:1 在07版
- 最近一个用户安装完Win7系统之后,发现设备管理器里面的通用串行总线控制器都是感叹号,并且有些USB接口没办法使用,这是怎么回事?设备管理器
- 神舟战神ZX9-DA3DA是一款娱乐影音笔记本电脑,这款电脑搭载了英特尔赛扬双核处理器以及发烧级独立显卡,能够满足用户们日常娱乐使用需求,那
- 小伙伴们在使用win10操作系统时出现qq图标隐藏了的情况要怎么弄出来?近期有小伙伴们出现qq图标被隐藏了的情况,不知道应该怎么办。还不清楚
- Win10系统更新以后,给用户名带来了许多新的应用。不过很多小伙伴在调整应用大小这个问题上还是不太懂。小编今天就特意给大家带来了Win10专
- 相信有不少小伙伴都已经升级Win11系统进行体验了,但是在打开微软自带的微软商店时候却发现自己连接不上,那么遇到这种情况要怎么办呢?下面就和
- 和许多汉字输入法产品一样,搜狗输入法中的一些功能也需要用户在登录账号后方可使用,例如:同步用户配置、同步用户词库等等。那么,搜狗输入法该怎么
- 网易MuMu模拟器怎么设置渲染加速?喜欢玩游戏的小伙伴想必对网易MuMu模拟器很熟悉,那么有小伙伴知道网易MuMu模拟器怎么设置渲染加速功能
- 咱们在 操纵WPS表格和Excel表格 停止 一样平常办公时, 常常会在表格中 使用到一些统计类的函数, 这种函数使 咱们在数据的 计较中
- wps表格怎么取消超链接?下面小编为大家介绍wps如何取消超链接的。方法/步骤点击表格菜单,选择工具里面的选项。本次教程就到这里,希望能帮到
- win11怎么打开磁盘管理?win11系统中想要打开磁盘管理,该怎么操作呢?下面我们就来看看Win11打开磁盘管理的6种方法需要在 Wind
- 关于WinXP系统出现蓝屏故障的帖子非常多,其中,一些WinXP系统用户反映:系统出现蓝屏故障,并提示:Ati2dvag错误代码。那么,为什
- 使用过win7的用户都知道win7系统有一个便签功能,这个功能放在桌面上,不但可以记事,还可以在开机时进行提醒,那么很多用户使用Win10后
- 要计算间隔指定工作日的截止日期需要用到Workday函数,下面我们一起来学习一下。一、Workday函数的用途及语法结构Workday函数可
- 你知道怎么设置幻灯片背景的透明度吗?下面小编就为你介绍wpsppt怎么设置背景透明度的方法啦!wpsppt设置背景透明度的方法:第一步,插入
- Win10系统是现在大家都在使用的电脑操作系统,很多用户都在升级,最近有用户遇到升级到Win10之后,出现了开机的时候黑屏了,而且只有鼠标在
- Xmind2022Mac是一款非常便捷的制作思维导图的软件,制作思维导图可以帮助用户更高效的进行学习,在Xmind中如何创建组织结构图呢?下
- 许多用户的电脑基本都是使用NVIDIA显卡的电脑。而我们想要更好的使用NVIDIA显卡,就必须安装NVIDIA的显卡驱动。但是不少用户在安装