关于Windows解锁的那些事

2021-11-08 admin

这里说的解锁,意思是从Windows锁定桌面返回到用户桌面。普通用户怎么解锁呢?很简单,按下热键CTRL+ALT+DEL,出现密码输入框,输入正确的密码,然后回车或点击登录即可。对于程序员来说,如何通过程序实现这个功能呢?

一、发送 CTRL+ALT+DEL 热键

1、Windows 2000、Windows XP、Windows 2003:

 

procedure MySendHotKey;
const
    WM_HOTKEY = $0312;
var
    HDesk_WL: HDESK;
begin
    HDesk_WL := OpenDesktop('Winlogon', 0, False, DESKTOP_JOURNALPLAYBACK);
    if (HDesk_WL <>0) then
    begin
       if (SetThreadDesktop(HDesk_WL) = True) then
      begin
         PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG(MOD_ALT or MOD_CONTROL, VK_DELETE));
         CloseDesktop(HDesk_WL);
      end;
    end;
end;

原理就是切换到winlogon桌面然后模拟键盘热键,所以这个函数必须拥有system权限(比如说服务程序)才能执行成功。

2、Windows Vista及更高版本:

调用sas.dll里面的函数SendSAS(注意:这个Dll是Windows 7后才存在,早期的系统比如说Windows Vista需要自己从Windows7等高版本系统拷贝该Dll过去)。



procedure SendSAS( AsUser:BOOL );stdcall;external 'sas.dll';


这个函数有一个参数,意思是调用程序是何权限(user或system)。如果是user权限,还需要满足以下条件:

a、该程序拥有合法的数字签名。

b、该进程位于可信目录下(例如:Windows目录或Program Files目录)

另外,不管是何种权限,还需要修改组策略:

在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下新建一个REG_DWORD类型的名称为SoftwareSASGeneration的Item,值设为1(system)或2(user)。

这个函数本质其实是一个RPC调用,如果不想调用该Dll,也可以自己实现RPC客户端或间接调用:



   function WmsgSendMessage(theSession : dword; theMagic : dword; thePid : dword; theRet : LPARAM):dword;stdcall;external ‘WMsgAPI.dll’; 


其中第一个参数是会话ID,第二个参数是$0208,第三个参数是当前的进程ID。

二、获取已登录用户密码

直接搜索lsass.exe的内存。点这里下载源码(来源:看雪论坛)。注意:对于Windows 8及后面的系统需要修改注册表并重启后才有效。

以前有一个产品,外表是一个USB的U盘,当插入到电脑后,会自动解锁并返回到桌面,很神奇。原理其实是一个badusb,先模拟键盘呼出“讲述人”的驱动安装,然后安装驱动后,在驱动里面注入,获取密码、输入密码并回车。

三、无密码直接解锁已登录桌面

1、 Windows 2000、Windows XP、Windows 2003

注入winlogon.exe,先用OpenDesktop打开默认桌面(‘Default’),再SwitchDesktop()切换即可。对,就是这么简单,连密码都省了。

2、 Windows Vista及更高版本:

a、RPC大法。

b、注入winlogon,获取窗口“’AUTHUI.DLL: LogonUI Logon Window’”的句柄,然后ShowWindow(xx,SW_HIDE);超级简单吧。点这里原理。

分类:系统编程

发表评论

(required)

(required), (Hidden)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

TrackBack URL  |  RSS feed for comments on this post.


日历

2023年 9月
 123
45678910
11121314151617
18192021222324
252627282930  

近期文章