c++ - 实现自定义 Windows 身份验证包

标签 c++ windows winapi local-security-authority

我正在为 Windows 7 的 MSV1_0 构建自定义身份验证子包。我使用了 Windows SDK 中的 msvsubauth 示例,我有 2 个关于我面临的一些问题的问题:

  1. 当我只是想确保调用例程并将注册表中的 Auth0 属性设置为我的包并在创建文件的 Msv1_0SubAuthenticationRoutine 末尾添加一个简单代码时:

    //
    // Cleanup up before returning.
    //
    
    
    Cleanup:
    hTestFile = CreateFile(
                  TEXT("C:\\lsa\\lsa.txt"), 
                  GENERIC_READ|GENERIC_WRITE, 0, 
                  NULL, CREATE_ALWAYS, 
                  FILE_ATTRIBUTE_NORMAL, NULL);
    
    
    if(hTestFile != INVALID_HANDLE_VALUE) {
          CloseHandle(hTestFile);
    }
    
    
    return Status;
    
    
    }  // Msv1_0SubAuthenticationRoutine
    

    显然,包被调用是因为当我输入密码时,我从 Windows 收到一条错误消息“参数不正确”,这是一个好兆头。但是为什么我会收到那个错误?当从单独的 .exe 文件执行完全相同的代码时,它会完美运行并创建测试文本文件。我检查了权限并为“所有人”设置了“完全控制”。有任何想法吗? SDK 并未明确提及 LSA 为身份验证包中的代码创建了何种隔离。

  2. 第二个问题是测试 AP。目前每次更改我都会重建库,将其复制到测试 VM,然后复制到 System32 文件夹并重新启动它。有更简单的方法吗?

提前致谢!

最佳答案

在 Winlogon 和 LSASS 中进行调试是最耗时的调试。

为了简化调试,您可以编写一个导出相同功能的代理 AP。加载时,proxy_ap 会

  1. 将真实 AP 从已知位置复制到临时位置。
  2. 加载该 DLL 的库,获取所有内容的 GetProcAddress,并将它收到的任何调用转发给新加载的 DLL。
  3. 观察复制原始 AP 的目录中的变化
  4. 发生变化时(如果您的 AP 发生变化)FreeLibrary 并转到第 2 步

但是您需要紧紧捕获开发目标上发生的事情,因为在处理来自多个线程的请求时处理 dll 开关可能会成为比您试图解决的问题更糟糕的噩梦。

LogonUI.exe 每次都会启动一个新的实例,但是 LSASS.exe 是长期存在的。

+查看 CVSNT 源代码 ( http://cvsnt.sourcearchive.com/ )。他们有一个非常好的 AP,它实现了 su。使用 psexec -s(来自 Microsoft/SysInternals pstools suite)在本地系统帐户中运行示例

关于c++ - 实现自定义 Windows 身份验证包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920801/

相关文章:

c++ - WM_GETTEXT仅返回单个字符

c++ - 如何修复ListView中的错误?封装控件时无法选择任何项目

c++ - 如果在 C++ 中有引号,则获取窗口名称

c++ - 从 C++ dll 导出类?

c++ - 先调用析构函数再调用构造函数(重置对象)

wpf - 删除最大化 WPF 自定义窗口的 DropShadow

windows - 安装docker后需要安装kubectl吗?

c++ - 在父窗口中捕获 WM_MOUSEMOVE 事件

c++ - 没有任何附加数据成员的派生类的大小

c++ - 检查 vector 是否在某个位置未初始化