1. 云栖社区>
  2. 技术文集>
  3. 列表>
  4. 正文

Windows7 口令登录过程调试

作者:用户 来源:互联网 时间:2016-03-01 16:22:11

登录函数进程堆栈exe调用用户directui断点lsm调用exe进程调试windbglsass.exe

Windows7 口令登录过程调试 - 摘要: 本文讲的是Windows7 口令登录过程调试, 基本原理 Windows7 以后 Winlogon 进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中完全 可能存在多个登录进程,注销后 Winlogon 进程也会随之结

基本原理

Windows7 以后 Winlogon 进程是动态的,有用户登录就会创建一个 Winlogon 进程,因此系统中完全 可能存在多个登录进程,注销后 Winlogon 进程也会随之结束。

Windbg 断点 NtCreateUserProcess 观察 Windows7 启动流程:

Windows7 口令登录过程调试-暴力破解windows口令Windows7 口令登录过程调试-windows 弱口令扫描器

我整理的基本进程树如下:

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 返回认证结果。框图如下

Windows7 口令登录过程调试-windows口令

调试过程

必须要吐槽下,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 在系统中调用很频繁】,随便输入个密码,命中:

Windows7 口令登录过程调试-社保登录口令是什么

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

Windows7 口令登录过程调试-中控考勤机登录口令

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

Windows7 口令登录过程调试-暴力破解windows口令

Windows7 口令登录过程调试-windows 弱口令扫描器

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

Windows7 口令登录过程调试-windows口令

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

Windows7 口令登录过程调试-社保登录口令是什么

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 如下【未截全】:

Windows7 口令登录过程调试-中控考勤机登录口令

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

Windows7 口令登录过程调试-暴力破解windows口令

注意其中的参数二对应的是状态,查下状态 9 对应的正是 g_xWinsrv_AccessNotify_Signal,winlogon

和 LogonUI 的交互基本上流程基本比较清晰了,下面我们重点研究下 winlogon 同 lsass 进程完成密码认证

的一些细节。

Winlogon 同样使用 RPC 调用完成同 lsass 的交互,不同的是 windows 把这几个 RPC 调用封装成了 DLL

形式,分别是 SspiCli 客户端和 SspiSrv 服务端,最终还是调用了 RPCRT4 函数,证据如下:

Windows7 口令登录过程调试-windows 弱口令扫描器

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

Windows7 口令登录过程调试-windows口令

根据《windows internals 5》一文,Winlogon 调用 SspiCli!LsaLogonUser完成登录,该函数最终通过

RPC 调用 Lsass::SspiSrv!SspirLogonUser

Windows7 口令登录过程调试-社保登录口令是什么

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

Windows7 口令登录过程调试-中控考勤机登录口令

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

Windows7 口令登录过程调试-暴力破解windows口令

Winlogon!WLGeneric_Request_Logon_Credz_Execute 对应的代码如下:

Windows7 口令登录过程调试-windows 弱口令扫描器

该函数首先通过 RequestCredentials 函数请求登录凭证,如果是本地登录模式,该函数最终会调用 WluiRequestCredentials函数执行 LogonUI 进程的 RPC 服务函数 authui!WluiRequestCredentials,请求用户输入登录凭证。

最终 authui!CRequestCredentialsCallbackData::GetCredential获取用户登录凭证,数据结构为

_CRED_PROV_CREDENTIAL* 可惜没有数据结构定义。

Windows7 口令登录过程调试-windows口令

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

Windows7 口令登录过程调试-社保登录口令是什么

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

Windows7 口令登录过程调试-中控考勤机登录口令

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

Windows7 口令登录过程调试-暴力破解windows口令

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

Windows7 口令登录过程调试-windows 弱口令扫描器

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

Windows7 口令登录过程调试-windows口令Windows7 口令登录过程调试-社保登录口令是什么Windows7 口令登录过程调试-中控考勤机登录口令Windows7 口令登录过程调试-暴力破解windows口令

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

Windows7 口令登录过程调试-windows 弱口令扫描器

查看内存如下:

Windows7 口令登录过程调试-windows口令

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

Windows7 口令登录过程调试-社保登录口令是什么

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

Windows7 口令登录过程调试-中控考勤机登录口令Windows7 口令登录过程调试-暴力破解windows口令Windows7 口令登录过程调试-windows 弱口令扫描器Windows7 口令登录过程调试-windows口令

断点 ba w1 023888b8 命中堆栈

Windows7 口令登录过程调试-社保登录口令是什么

CredProtect 函数 MSDN 如下:

Windows7 口令登录过程调试-中控考勤机登录口令Windows7 口令登录过程调试-暴力破解windows口令

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

Windows7 口令登录过程调试-windows 弱口令扫描器

对应的解密函数 CredUnprotect

Windows7 口令登录过程调试-windows口令Windows7 口令登录过程调试-社保登录口令是什么

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

Windows7 口令登录过程调试-中控考勤机登录口令

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

Windows7 口令登录过程调试-暴力破解windows口令

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索登录 , 函数 , 进程 , 堆栈 , exe调用 , 用户 , directui , 断点 , lsm , 调用exe , 进程调试windbg lsass.exe 暴力破解windows口令、windows 弱口令扫描器、windows口令、社保登录口令是什么、中控考勤机登录口令,以便于您获取更多的相关知识。

namenode-hadoop开启的问题,一直让输入什么口令,可是不知道口令是什么,不是密码

问题描述 hadoop开启的问题,一直让输入什么口令,可是不知道口令是什么,不是密码 如图:启动hadoop的时候一直要输入口令,不知道口令是什么,输不正确namenode就启动不起来,提示权限...

解决Windows 7下安装Oracle 11g相关问题的方法_oracle

...新特点。 前不久卸载掉了自己的Windows Vista系统,装上了Windows7 旗舰版,在装机过程中也遇到了很多问题,有些问题是自己不曾遇到过的,但自己尝试着去解决,一步一步尝试着去努力。自己的不懈努力,也换回了成果。比如在...

PHP防止同一个账号,同时在多个不同设备登录

... 方案原理1、在用户表新增三个字段分别存储,用户登录口令、上次登录IP地址、上次登录时间,在登录成功后,生成唯一用户登录口令,把用户登录口令、上次登录IP地址、上次登录时间存储到SESSION,并相应的存储到用户表。...

单机调试(IIS7.5+MySQL+PHP+WordPress)记实--解决MySQL问题

...要搭建一个MySQL+PHP+WordPress环境,于是上网找了找,在《Windows7部署WordPress傻瓜式教程(IIS7.5+MySQL+PHP+WordPress)》中找到了一个很好的基本安装顺序,按照如下步骤: 1、Windows7安装IIS7.5; 2、安装MySQL及配置; 3、安装PHP; 4、部署W...

使用浏览器计算力,对抗密码破解

...什么导致安全性如此脆弱。 究其原因,莫过于这两点:口令密码、算法成本。 口令密码 密码可以记在很多地方。最常见的,就是记在自己脑袋里。当然还可以记在属于你的物品上,例如小本子、卡片等等,反正不用脑子记,...

前三篇
后三篇