转载自:http://www.jb51.net/os/windows/81155.html

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来完成,如下:

以上是图片的记录哦!

win7系统口令登录过程调试方法图解相关推荐

  1. Windows7 口令登录过程调试

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

  2. win7 计算机登录ftp 取消保存密码,Win7系统取消登录界面的两种方法(图文)

    本教程小编和大家分享Win7纯净版系统取消登录界面的两种方法,windows7系统设置电脑密码后,即使取消密码,也会出现登录界面 ,每次都要点击用户图标才能进入系统,这样比较麻烦.那么有什么办法可以取 ...

  3. 计算机创建任务计划,win7系统创建任务计划的方法 如何创建任务计划

    win7系统可以创建任务计划来完成工作内容,提高工作效率,win7系统创建任务计划的方法相信很多用户都不知道如何使用.日常工作和生活中总有一些需要每天重复操作的工作要做,如文档整理,邮件备份,文件清理 ...

  4. 联想服务器改win7系统教程,联想IdeaCentre720改win7系统教程及BIOS设置方法

    联想IdeaCentre 720使用的CPU处理器是Intel第8代,这一代平台原本的设计不很好的支持Win7系统,来由是厂家就没做USB驱动程序,就会导致USB的设备无法正常工作.并且官方调试的期间 ...

  5. 计算机专业盲打,在win7系统电脑练习盲打的方法

    操作win7旗舰版系统电脑的时候,打字是最基本的操作,刚刚接触电脑的用户对大家不熟悉,要看一下键盘一个字,这样非常浪费时间的.那么怎么在win7系统电脑练习盲打?盲打是打字员的基本要求,想要提高打字速 ...

  6. php更换鼠标指针详细,window_Win7系统鼠标指针怎么更改?Win7系统更换鼠标指针的方法,  Win7系统鼠标指针怎么更改 - phpStudy...

    Win7系统鼠标指针怎么更改?Win7系统更换鼠标指针的方法 Win7系统鼠标指针怎么更改?相信有很多电脑用户使用鼠标时都是用默认的鼠标指针,也从来没有想过要去更换鼠标指针,但其实,鼠标指针是可以更换 ...

  7. 网络和计算机加密驱动,Win7电脑驱动器怎么加密?Win7系统给驱动器加密的方法和详细步骤...

    win7电脑驱动器怎么加密?电脑的安全问题是很多的小伙伴都是比较关心的,对于电脑中的驱动器的不能让别人随便就修改是有小伙伴在网络提问的问题,怎么保护电脑的数据的安全硬件的安全的设置驱动器加密的方法是什 ...

  8. excel打印时显示服务器脱机怎么办,解决win7系统共享打印机脱机永久方法

    解决win7系统共享打印机脱机永久方法 导语:解决win7系统共享打印机脱机永久方法.脱机工作,顾名思义就是脱离网络连机的状态下进行浏览网页的工件,这里所说的网络连机,指的是你所登陆具体网站的服务器. ...

  9. W7共享打印显示服务器脱机,解决win7系统共享打印机脱机永久方法

    解决win7系统共享打印机脱机永久方法 导语:解决win7系统共享打印机脱机永久方法.脱机工作,顾名思义就是脱离网络连机的状态下进行浏览网页的工件,这里所说的网络连机,指的是你所登陆具体网站的服务器. ...

最新文章

  1. jQuery中focusin()和focus()、find()和children()的差别
  2. Linux搜索查找命令合集
  3. 20211006 线性变换
  4. 不会Nacos的配置中心?你怎么敢的呀!如何一步步实现Nacos作为服务的配置中心(全网最详系列)
  5. php怎么写for循环,PHP for循环的写法和示例
  6. 能够使用StringBuilder类的常用方法操纵字符串 1215
  7. 港股区块链板块持续上行,火币科技涨超50%
  8. 一种调用dll的巧妙方法
  9. Next, let’s look at the interface
  10. session与cookie之间的关系
  11. PropertyUtils的使用
  12. Photoshop插件-证件照-白红蓝底-PS插件-脚本开发
  13. libpng的使用 | 在Linux系统下编译、安装与使用
  14. wamp+php+下载,WAMP(Windows+Apache+Mysql+PHP) 下载配置一条龙
  15. CSDN 社区大趴-北京站 圆满结束
  16. 作为成员的结构体(作为结构体的成员的结构体)
  17. 从WAVE SUMMIT+2021,寻找新一代AI人不可或缺的“凝视”
  18. 倍福EtherCAT通信协议详细解析
  19. 微商竟然靠这样引流?佛山抖音培训老师告诉你其中奥秘
  20. ubuntu如何安装mysql客户端_Ubuntu安装mysql

热门文章

  1. Java中的JavaCore/HeapDump文件及其分析方法
  2. uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
  3. ios appicon 桌面图标不见了
  4. halcon opencv 图像处理面试指南
  5. CSS @page 规则 设置打印页面框的尺寸,方向和页边距,用于打印预览和从浏览器打印Web文档
  6. 浅谈网络编程中的常见问题
  7. 开放式激光振镜运动控制器:C++ 快速调用图形库应用
  8. 【运筹学】匈牙利法 ( 匈牙利法步骤 | 第一步 : 使行列出现 0 元素示例 )
  9. ThinkPad 使用两种BIOS升级文件进行BIOS升级的具体步骤。
  10. Vue项目9:Vue Cli项目使用echarts可视化