Skip to content

Commit

Permalink
创建安装程序
Browse files Browse the repository at this point in the history
  • Loading branch information
kagurazakayashi committed Mar 10, 2021
1 parent 5db5168 commit 60bfb23
Show file tree
Hide file tree
Showing 4 changed files with 190 additions and 16 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -328,3 +328,5 @@ ASALocalRun/

# MFractors (Xamarin productivity tool) working folder
.mfractor/
LICENSE.txt
Setup*.exe
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -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
Expand Down
50 changes: 35 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# MFAScreenLock
# NyarukoMFALock

- 锁定 Windows 屏幕,使用手机 MFA 身份验证器提供的每分钟变更的动态验证码进行解锁,防止远程桌面未授权访问。
- 锁定 Windows 桌面,使用 MFA 身份验证器(例如 Google Authenticator )提供的每分钟变更的动态验证码进行解锁,防止远程桌面未授权访问。
- 虽然也可用于保护本地计算机,但是由于本地计算机可以直接操作,存在强制绕过的可能,因此在本地计算机中只能用于辅助登录防护。

## 安装
Expand All @@ -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`

## 配置

Expand All @@ -24,9 +27,9 @@
5. 记下屏幕上显示的恢复代码。
- 点击「是」之后恢复代码将复制到剪贴板,一旦无法使用动态密码,可以使用此恢复代码进入。
- 点击「否」将不产生恢复代码,虽然更安全,但是手机损坏、丢失、验证APP卸载、验证APP数据丢失等情况发生时,将会导致无法登入。
6. 绑定信息将会显示计算机名、用户域和同户名
- 注意:计算机名、用户域和同户名是绑定的,如果修改其中之一将会无法登入。如需修改,请先解绑验证器。
7. 关闭设置窗口或进行「自动锁定设置」
6. 绑定信息将会显示计算机名、用户域和用户名
- **注意:** 计算机名、用户域和用户名是绑定的,如果修改其中之一将会无法登入。如需修改,请先解绑验证器。
7. 关闭设置窗口或进行「锁定设置」和「个性化」外观设置
8. 关闭本程序所有窗口并在状态栏右键选退出程序,将会验证一次密码。
9. 下次开始启动程序时,将进入锁定状态。

Expand All @@ -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`
- 例如:`MFAScreenLockApp.exe -r Y8K2V-5J2ZL-F6QC8-ERFJ4-4HME8-POL50`

## 故障排除
- 无法运行,提示缺少 .NET Framework
- 安装 .NET Framework 运行库。
- 动态密码始终提示密码错误
- 在密码框输入你的恢复代码。
- 进入绑定设置,再次验证你的恢复代码。
- 清除所有用户设置。
- 开机不能自动锁定
- 在程序设置中取消开机启动。
- 完全退出程序,然后「以管理员身份运行」程序。
- 在程序设置中启用开机启动。
- 如果仍然不行:使用「任务计划程序」设置开机启动 或 将程序快捷方式到「启动」文件夹。
- 程序报错: [反馈](issues)
152 changes: 152 additions & 0 deletions install.nsi
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 60bfb23

Please sign in to comment.