### Windows 记录登录密码详解 #### 知识点一:Windows登录密码处理机制 Windows系统内部使用LSA(Local Security Authority)服务来处理登录密码的相关操作,这其中包括了密码验证、用户账户管理等核心安全功能。LSA通过调用`LsaApLogonUserEx2`函数来实现用户的登录过程。 在Windows操作系统中,`LsaApLogonUserEx2`函数是用于用户登录认证的重要接口。当用户尝试登录时,该函数会被调用,并负责与LSA交互以完成身份验证过程。具体来说,它会检查提供的用户名和密码是否匹配,并进一步确定用户是否有权限登录到系统。 #### 知识点二:密码存储与加密 在Windows 2000、2003以及XP等早期版本中,系统使用`UNICODE_STRING.Length`的前8个字节作为XOR密钥来对密码进行加密。这个密钥是通过调用`ntdll.RtlRunDecodeUnicodeString`函数生成的,用于解码存储在内存中的密码字符串。这种方式虽然简单,但在安全性方面存在一定的漏洞。 而在Vista及之后的操作系统中,为了提高安全性,引入了更复杂的密码保护机制。例如,通过`AdvApi32.CredIsProtectedW`函数来检测密码是否已经被加密,并且使用`AdvApi32.CredUnprotectW`函数来进行解密操作。这些改进使得破解或截取密码变得更加困难。 #### 知识点三:DLL注入技术 DLL注入是一种技术手段,可以将动态链接库文件注入到其他进程空间中运行。在这个场景中,DLL注入被用来截取或记录用户的登录密码。具体实现方法如下: 1. **DLL注册**:需要通过`regsvr32`命令来注册一个特定的DLL文件。例如,可以使用命令`regsvr32 /n /i:c:\xxx.log c:\pluginWinPswLogger.dll`来注册名为`pluginWinPswLogger.dll`的DLL文件,并指定日志文件为`c:\xxx.log`。 2. **日志记录**:一旦DLL被成功注册并注入到目标进程中,它就可以开始监控和记录用户的登录信息。这些信息通常被写入到指定的日志文件中,如上例中的`c:\xxx.log`。 3. **通信机制**:DLL还可以通过管道(pipe)或邮件槽(mailslot)等机制与外部程序进行通信。例如,可以设置DLL监听某个管道路径`\\.\pipe\your_pipename`或邮件槽路径`\\.\mailslot\yourslot`,以便于其他程序能够读取或发送数据。 #### 知识点四:安全性和风险 尽管通过DLL注入的方式可以截取或记录用户的登录密码,但这种做法存在着极大的安全风险和法律问题。这种行为可能违反了隐私法规和个人信息安全条例。一旦恶意软件或黑客利用此技术,可能会导致严重的安全事件,包括但不限于密码泄露、账户被非法访问等后果。 #### 结论 虽然通过特定的技术手段可以在一定程度上记录Windows系统的登录密码,但这不仅涉及到复杂的技术细节,同时也存在严重的法律风险和安全隐患。因此,在实际应用中应遵循合法合规的原则,采用正规的安全审计工具和技术来进行系统管理和维护,避免因非法操作而导致的不良后果。
windows的身份验证一般最终都是在lsass进程,默认模块是msv1_0.dll,而关键在其导出函数LsaApLogonUserEx2,
本程序通过注入代码到lsass进程hook LsaApLogonUserEx2,截取密码。只要有身份验证的过程,
LsaApLogonUserEx2就会触发,如ipc$,runsa,3389远程桌面登陆等。
程序对不同系统做了处理,在2000,2003,xp,vista上都可以截取,
在2000,2003,xp中,通过UNICODE_STRING.Length 的高8位取xor key,如果密码是编码过的,则通过ntdll.RtlRunDecodeUnicodeString解码,
vista则通过AdvApi32.CredIsProtectedW判断密码是否编码过,解码用AdvApi32.CredUnprotectW。
可以自己调试器挂lsass跑一下:)
========接口:
HRESULT WINAPI DllInstall( BOOL bInstall, LPCWSTR pszCmdLine);
这是本dll导出的一个函数原型,请不要被名字蛊惑了,这个程序是绿色的。
这个函数内部并没有做任何自启动安装的动作,没有修改注册表或系统文件。只是想选一个符合regsvr32调用的接口而已。
第一个参数本程序没用到,
第二个参数请指定一个文件路径(注意是UNICODE的),记录到的数据将保存到这里(是Ansi的)。
文件路径可以像这样 C:\x.log,
也可以像\\.\pipe\your_pipename, \\.\mailslot\yourslot,
所以你可以自己写loader来调用这个dll,让dll截取到密码时通过pipe或mailslot将数据发给你的程序。数据就是一个字符串(是Ansi的)
========测试:
你可以不急着写自己的loader来调用,用regsvr32作为loader来测试一下:(你可能需要关闭某些主动防御)
regsvr32 /n /i:c:\xxx.log c:\pluginWinPswLogger.dll
正常的话regsvr32弹出一个提示成功。
这时候你可以切换用户或锁定计算机,然后重新登陆进去,这个过程密码信息就被拦截下来了并保存到c:\xxx.log。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助