Merge pull request #126 from bunizao/main

Fix: 修复密码中包含特殊字符时认证失败的问题
This commit is contained in:
秋城落叶
2025-05-26 20:28:37 +08:00
committed by GitHub

View File

@@ -1,46 +1,41 @@
#!/bin/sh
cd "${0%/*}" || exit 1
# 定义 Keychain 服务名称和账户名称
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")" || exit 1
SERVICE_NAME="InjectLib"
ACCOUNT_NAME="sudo"
# 如果 Keychain 中没有密码,则提示用户输入
if [ -z "$PASSWD" ]; then
read -p "⚙️ 请输入密码(明文)然后回车: " -r passwd
printf "\r\033[1A%s" "" 1>&2
printf "\r\033[K%s" "" 1>&2
# 验证密码是否正确
if ! echo "$passwd" | sudo -S true 2>/dev/null; then
echo "❌ 密码错误,请重试"
exit 1
fi
# 将密码保存到 Keychain
security add-generic-password -s "$SERVICE_NAME" -a "$ACCOUNT_NAME" -w "$passwd" -U
PASSWD=$passwd
else
# 验证 Keychain 中的密码是否正确
if ! echo "$PASSWD" | sudo -S true 2>/dev/null; then
echo "❌ Keychain 中的密码已失效,请重新输入"
# 删除错误的密码
security delete-generic-password -s "$SERVICE_NAME" -a "$ACCOUNT_NAME" 2>/dev/null
read -p "⚙️ 请输入密码(明文)然后回车: " -r passwd
printf "\r\033[1A%s" "" 1>&2
printf "\r\033[K%s" "" 1>&2
# 再次验证新密码
if ! echo "$passwd" | sudo -S true 2>/dev/null; then
echo "❌ 密码错误,请重试"
exit 1
fi
# 保存新密码到 Keychain
security add-generic-password -s "$SERVICE_NAME" -a "$ACCOUNT_NAME" -w "$passwd" -U
PASSWD=$passwd
fi
fi
find . -name "*.*" 2>/dev/null | xargs otool -l 2>/dev/null | grep -E "(minos|sdk)" 2>/dev/null
echo "$PASSWD" | sudo -S echo "⚙️ 当前是 $(sudo -S whoami) 用户"
chmod +x tool/optool
sudo -S python3 main.py
askpass() {
IFS= read -r -s -p "⚙️ 请输入密码(明文)然后回车: " pass
printf '\n'
echo "$pass"
}
validate() { # 校验密码是否能用来 sudo
printf '%s\n' "$1" | sudo -S -v &>/dev/null
}
save_to_keychain() { # 写入或更新 Keychain
security add-generic-password \
-s "$SERVICE_NAME" -a "$ACCOUNT_NAME" -w "$1" -U
}
load_from_keychain() { # 读取 Keychain
security find-generic-password \
-s "$SERVICE_NAME" -a "$ACCOUNT_NAME" -w 2>/dev/null || true
}
PASSWD="${PASSWD:-}"
[[ -z $PASSWD ]] && PASSWD="$(load_from_keychain)"
# 如果取不到,或取到了但验证失败,就循环让用户输入
until validate "$PASSWD"; do
[[ -n $PASSWD ]] && echo "❌ 密码错误,请重试"
PASSWD="$(askpass)"
validate "$PASSWD" || continue
save_to_keychain "$PASSWD"
done
printf '%s\n' "$PASSWD" | sudo -S -v
sudo -E python3 main.py