Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当用户更改密码时,哪个windows API调用?挂接这个API的好方法是什么?_C++_Windows_Authentication_Winapi_Hook - Fatal编程技术网

C++ 当用户更改密码时,哪个windows API调用?挂接这个API的好方法是什么?

C++ 当用户更改密码时,哪个windows API调用?挂接这个API的好方法是什么?,c++,windows,authentication,winapi,hook,C++,Windows,Authentication,Winapi,Hook,我想知道用户何时尝试更改密码,甚至钩住这个函数 我知道这是有选择的,它被Vista替换成了。 但在这两个阶段,我没有找到一个特定的API,它无论如何都会被调用,或者每个方法都有一个函数,当用户更改密码时会被调用。 我想为特定的API实现DLL代理(在我找到它之后),有没有更好的方法来实现这个钩子,来捕获更改密码的用户并修改它 此外,在我的研究中,我发现了这个函数 更改帐户密码 并参考自旋初始化函数,可能包含相关参数: typedef struct SECPKG_FUNCTION_TABLE {

我想知道用户何时尝试更改密码,甚至钩住这个函数

我知道这是有选择的,它被Vista替换成了。 但在这两个阶段,我没有找到一个特定的API,它无论如何都会被调用,或者每个方法都有一个函数,当用户更改密码时会被调用。 我想为特定的API实现DLL代理(在我找到它之后),有没有更好的方法来实现这个钩子,来捕获更改密码的用户并修改它

此外,在我的研究中,我发现了这个函数 更改帐户密码

并参考自旋初始化函数,可能包含相关参数:

typedef struct SECPKG_FUNCTION_TABLE {
...
SpSetExtendedInformationFn       *SpChangeAccountPasswordFn;
...
};
有什么建议吗


谢谢

是的,SpChangeAccountPasswordFn确实在LSASS.EXE中调用过。这个例行公事通常叫

NTSTATUS
NTAPI
SamChangePasswordUser2(IN PUNICODE_STRING ServerName,
                       IN PUNICODE_STRING UserName,
                       IN PUNICODE_STRING OldPassword,
                       IN PUNICODE_STRING NewPassword);
从samlib.dll(这是导出的函数)。但最常见和有趣的一点是挂钩:

BOOLEAN NTAPI LsaINotifyPasswordChanged(
  IN PVOID OPTIONAL, 
  IN PUNICODE_STRING ServerName,
  IN PUNICODE_STRING UserName,
  PVOID OPTIONAL,
  PVOID OPTIONAL,
  IN PUNICODE_STRING OldPassword,
  IN PUNICODE_STRING NewPassword);

此函数从lsasrv.dll导出,通常从SpChangeAccountPasswordFn调用。它显示从xp到最新的win10。但是,如果您在问题中添加了语言标记,xp中的签名将比更高版本中的签名(1个参数变为7个位置)有所帮助。但不管怎样,你想挂接到密码更改?听起来不太安全。你真的太努力了。当你可以输入任何你喜欢的密码()时,为什么还要检索密码呢?如果您想知道用户何时更改密码,请使用事件日志。控制用户使用组策略更改密码的方式/时间。没有任何理由挂接这个API。。不需要钩住任何东西。更不用说允许设置一个钩子将允许进程安全级别的任何人窥探系统上的所有密码更改。你会把密封舱口的门吹掉。