From 60bfb2341340f3499de0271d7b33ae07bebc1493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E6=A5=BD=E5=9D=82=E9=9B=85=E8=A9=A9?= Date: Wed, 10 Mar 2021 18:33:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=AE=89=E8=A3=85=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + LICENSE | 2 +- README.md | 50 +++++++++++------ install.nsi | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 190 insertions(+), 16 deletions(-) create mode 100644 install.nsi diff --git a/.gitignore b/.gitignore index 3e759b7..d7a1781 100644 --- a/.gitignore +++ b/.gitignore @@ -328,3 +328,5 @@ ASALocalRun/ # MFractors (Xamarin productivity tool) working folder .mfractor/ +LICENSE.txt +Setup*.exe diff --git a/LICENSE b/LICENSE index ed12d8b..23e254b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 神楽坂雅詩 +Copyright (c) 2019 KagurazakaYashi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 9c6f9b5..d058f4e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# MFAScreenLock +# NyarukoMFALock -- 锁定 Windows 屏幕,使用手机 MFA 身份验证器提供的每分钟变更的动态验证码进行解锁,防止远程桌面未授权访问。 +- 锁定 Windows 桌面,使用 MFA 身份验证器(例如 Google Authenticator )提供的每分钟变更的动态验证码进行解锁,防止远程桌面未授权访问。 - 虽然也可用于保护本地计算机,但是由于本地计算机可以直接操作,存在强制绕过的可能,因此在本地计算机中只能用于辅助登录防护。 ## 安装 @@ -9,9 +9,12 @@ - `Windows Server ≥ 2008 R2 SP1 (x64)` - `.NET Framework ≥ 4.6.2` - 下载: `https://support.microsoft.com/zh-cn/help/3151800/the-net-framework-4-6-2-offline-installer-for-windows` -- 解压缩文件到用户文件夹中。 - - 如果你不主动进行文件权限配置,则强烈推荐解压缩到用户文件夹中,防止被其他用户访问到密码文件。 -- 运行 `MFAScreenLockApp.exe` 。 +- 如果已经安装旧版本: + - 建议先在旧版本中清除用户设置(同时会解绑验证器),然后卸载旧版本。(升级时非必须,降级时必须) + - 在升级过程中,用户设置和绑定状态可能会被自动清除。 +- 安装 `install.exe` 。 + - 如果你不主动进行文件权限配置,则推荐安装到用户文件夹中,防止被其他用户访问到密码文件。 +- 运行桌面上创建的快捷方式或安装目录中的 `MFAScreenLockApp.exe` 。 ## 配置 @@ -24,9 +27,9 @@ 5. 记下屏幕上显示的恢复代码。 - 点击「是」之后恢复代码将复制到剪贴板,一旦无法使用动态密码,可以使用此恢复代码进入。 - 点击「否」将不产生恢复代码,虽然更安全,但是手机损坏、丢失、验证APP卸载、验证APP数据丢失等情况发生时,将会导致无法登入。 -6. 绑定信息将会显示计算机名、用户域和同户名。 - - 注意:计算机名、用户域和同户名是绑定的,如果修改其中之一将会无法登入。如需修改,请先解绑验证器。 -7. 关闭设置窗口或进行「自动锁定设置」。 +6. 绑定信息将会显示计算机名、用户域和用户名。 + - **注意:** 计算机名、用户域和用户名是绑定的,如果修改其中之一将会无法登入。如需修改,请先解绑验证器。 +7. 关闭设置窗口或进行「锁定设置」和「个性化」外观设置。 8. 关闭本程序所有窗口并在状态栏右键选退出程序,将会验证一次密码。 9. 下次开始启动程序时,将进入锁定状态。 @@ -36,20 +39,37 @@ - 可以设置多少分钟后自动锁定。 - 可以看见下方自动锁定计时器,如果它不正常工作请用方法二配置自动锁定。 - 设置窗口在开启状态下,不会触发自动锁定。 -2. 方法二:在计划任务中将本程序进行开机启动。 +2. 方法二:在计划任务中将本程序进行开机启动。 - 可以在启动参数中加入 `-e` ,程序将在解除锁定后立即退出(否则会驻留图标在状态栏),以便利用计划任务提供的闲置时长功能来进行自动锁定。 - 例如:`MFAScreenLockApp.exe -e` ## 使用 -- 下次运行本程序时,计算机画面将被锁定,此时请输入验证器中显示的动态密码,或者恢复代码。 - - 如果正确,将直接解锁,无需使用回车键。 - - 解锁画面显示的背景图像为你的首选显示器桌面壁纸,不设置桌面壁纸为黑色。 +- 下次运行本程序时,计算机画面将被锁定,此时请输入验证器中显示的动态密码,或者恢复代码,按回车。 + - 如果正确,将直接解锁。 + - 如果不正确,会根据设置,锁定几秒钟(默认为 3 秒),才能继续尝试。 + - 解锁画面显示的背景图像为你的首选显示器桌面壁纸,并自动适应屏幕裁剪(填充),不设置桌面壁纸为黑色。 - 文字颜色会根据桌面壁纸自动决定黑色还是白色。 - - 其他非首选显示器将显示空白桌面壁纸,不设置桌面壁纸为黑屏。 -- 解锁后,会驻留图标在状态栏,右键点击可弹出菜单,可以随时立即上锁、修改绑定,以及退出。 + - 其他非首选显示器将显示空白桌面壁纸,不设置桌面壁纸为黑屏。 + - 可以在「个性化」设置中修改以上壁纸、颜色和字体设置。 +- 解锁后,会驻留图标在状态栏,右键点击可弹出菜单,可以随时立即上锁、修改绑定、变更外观,以及退出。 - 这些菜单项在点击后,会重新进入一次密码输入状态,以验证是本人,之后才继续执行所选择的菜单命令。 + - 如果没有驻留图标在状态栏,可能是加入了 `-e` 启动参数或出现了错误。 ## 解绑 - 方法1:不加 `-e` 参数运行的情况下,输入密码或恢复代码解锁,在任务栏驻留的图标上点右键,选「绑定管理」,选择「解绑」,然后退出软件。 - 方法2:在程序完全退出的情况下,带 `-r <恢复代码>` 参数启动程序,确认后可直接清除软件所有设置,包括密码。软件将自动退出。 - - 例如:`MFAScreenLockApp.exe -r Y8K2V-5J2ZL-F6QC8-ERFJ4-4HME8-POL50` \ No newline at end of file + - 例如:`MFAScreenLockApp.exe -r Y8K2V-5J2ZL-F6QC8-ERFJ4-4HME8-POL50` + +## 故障排除 +- 无法运行,提示缺少 .NET Framework + - 安装 .NET Framework 运行库。 +- 动态密码始终提示密码错误 + - 在密码框输入你的恢复代码。 + - 进入绑定设置,再次验证你的恢复代码。 + - 清除所有用户设置。 +- 开机不能自动锁定 + - 在程序设置中取消开机启动。 + - 完全退出程序,然后「以管理员身份运行」程序。 + - 在程序设置中启用开机启动。 + - 如果仍然不行:使用「任务计划程序」设置开机启动 或 将程序快捷方式到「启动」文件夹。 +- 程序报错: [反馈](issues) \ No newline at end of file diff --git a/install.nsi b/install.nsi new file mode 100644 index 0000000..38f6c17 --- /dev/null +++ b/install.nsi @@ -0,0 +1,152 @@ +; Script generated by the HM NIS Edit Script Wizard. + +; HM NIS Edit Wizard helper defines +!define PRODUCT_NAME "NyarukoMFALocker" +!define PRODUCT_VERSION "4.5" +!define PRODUCT_PUBLISHER "KagurazakaYashi" +!define PRODUCT_WEB_SITE "https://github.com/kagurazakayashi/MFAScreenLock" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\MFAScreenLockApp.exe" +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" +!define PRODUCT_UNINST_ROOT_KEY "HKLM" +!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir" + +SetCompressor lzma + +; MUI 1.67 compatible ------ +!include "MUI.nsh" + +; MUI Settings +!define MUI_ABORTWARNING +!define MUI_ICON "icons\icon0.ico" +!define MUI_UNICON "MFAScreenLock\MFAScreenLockApp\icon0.ico" + +; Welcome page +!insertmacro MUI_PAGE_WELCOME +; License page +!insertmacro MUI_PAGE_LICENSE "LICENSE.txt" +; Directory page +!insertmacro MUI_PAGE_DIRECTORY +; Start menu page +var ICONS_GROUP +!define MUI_STARTMENUPAGE_NODISABLE +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "NyarukoMFALocker" +!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" +!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}" +!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP +; Instfiles page +!insertmacro MUI_PAGE_INSTFILES +; Finish page +!define MUI_FINISHPAGE_RUN "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe" +!define MUI_FINISHPAGE_SHOWREADME "$PROGRAMFILES\NyarukoMFALock\README.md" +!insertmacro MUI_PAGE_FINISH + +; Uninstaller pages +!insertmacro MUI_UNPAGE_INSTFILES + +; Language files +!insertmacro MUI_LANGUAGE "SimpChinese" + +; Reserve files +!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +; MUI end ------ + +Name "${PRODUCT_NAME}" +OutFile "Setup.exe" +InstallDir "$PROGRAMFILES\NyarukoMFALock" +InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" +ShowInstDetails show +ShowUnInstDetails show + +Section "MainSection" SEC01 + SetOutPath "$PROGRAMFILES\NyarukoMFALock" + SetOverwrite on + File "MFAScreenLock\MFAScreenLockApp\bin\Release\SysLink.pdb" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\SysLink.dll" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\README.md" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\QRCoder.dll" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\QRCodeEncoderLibrary.xml" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\QRCodeEncoderLibrary.dll" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\MFAScreenLockApp.pdb" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\MFAScreenLockApp.exe.manifest" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\MFAScreenLockApp.exe.config" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\MFAScreenLockApp.exe" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\MFAScreenLockApp.application" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\LICENSE" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\ImageControl.pdb" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\ImageControl.dll" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\Google.Authenticator.pdb" + File "MFAScreenLock\MFAScreenLockApp\bin\Release\Google.Authenticator.dll" + +; Shortcuts + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" + CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\NyarukoMFALocker.lnk" "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe" + CreateShortCut "$DESKTOP\NyarukoMFALocker.lnk" "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe" + !insertmacro MUI_STARTMENU_WRITE_END +SectionEnd + +Section -AdditionalIcons + SetOutPath $INSTDIR + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" + CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" + CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe" + !insertmacro MUI_STARTMENU_WRITE_END +SectionEnd + +Section -Post + WriteUninstaller "$INSTDIR\uninst.exe" + WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" +SectionEnd + + +Function un.onUninstSuccess + HideWindow + MessageBox MB_ICONINFORMATION|MB_OK "лʹãԵټ" +FunctionEnd + +Function un.onInit + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Ҫж $(^Name) " IDYES +2 + Abort +FunctionEnd + +Section Uninstall + !insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP + Delete "$INSTDIR\${PRODUCT_NAME}.url" + Delete "$INSTDIR\uninst.exe" + Delete "$PROGRAMFILES\NyarukoMFALock\Google.Authenticator.dll" + Delete "$PROGRAMFILES\NyarukoMFALock\Google.Authenticator.pdb" + Delete "$PROGRAMFILES\NyarukoMFALock\ImageControl.dll" + Delete "$PROGRAMFILES\NyarukoMFALock\ImageControl.pdb" + Delete "$PROGRAMFILES\NyarukoMFALock\LICENSE" + Delete "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.application" + Delete "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe" + Delete "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe.config" + Delete "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.exe.manifest" + Delete "$PROGRAMFILES\NyarukoMFALock\MFAScreenLockApp.pdb" + Delete "$PROGRAMFILES\NyarukoMFALock\QRCodeEncoderLibrary.dll" + Delete "$PROGRAMFILES\NyarukoMFALock\QRCodeEncoderLibrary.xml" + Delete "$PROGRAMFILES\NyarukoMFALock\QRCoder.dll" + Delete "$PROGRAMFILES\NyarukoMFALock\README.md" + Delete "$PROGRAMFILES\NyarukoMFALock\SysLink.dll" + Delete "$PROGRAMFILES\NyarukoMFALock\SysLink.pdb" + + Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" + Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" + Delete "$DESKTOP\NyarukoMFALocker.lnk" + Delete "$SMPROGRAMS\$ICONS_GROUP\NyarukoMFALocker.lnk" + + RMDir "$SMPROGRAMS\$ICONS_GROUP" + + DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" + DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" + SetAutoClose true +SectionEnd \ No newline at end of file