testsAndMisc/linux_configuration/scripts/periodic_background/utils/android_guardian/post-fs-data.sh

102 lines
2.6 KiB
Bash
Raw Normal View History

#!/system/bin/sh
2025-12-21 19:12:16 +01:00
# Runs early in boot - set up hosts file and start watchdog
# MODDIR is set by Magisk and points to this module's directory
GUARDIAN_DIR="${ANDROID_GUARDIAN_DIR:-/data/adb/android_guardian}"
WATCHDOG_SCRIPT="${ANDROID_GUARDIAN_WATCHDOG_SCRIPT:-$GUARDIAN_DIR/watchdog.sh}"
LOG_FILE="$GUARDIAN_DIR/guardian.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] post-fs-data: $*" >>"$LOG_FILE"
}
2025-12-21 19:12:16 +01:00
write_watchdog_script() {
2026-02-20 01:17:53 +01:00
cat >"$WATCHDOG_SCRIPT" <<'WATCHDOG'
2025-12-21 19:12:16 +01:00
#!/system/bin/sh
# Secondary watchdog - runs independently of module state
# Even if module is "disabled" in Magisk UI, this keeps running and undoes it
GUARDIAN_DIR="${ANDROID_GUARDIAN_DIR:-/data/adb/android_guardian}"
MODULE_DIR="${ANDROID_GUARDIAN_MODULE_DIR:-/data/adb/modules/android_guardian}"
2025-12-21 19:12:16 +01:00
LOG_FILE="$GUARDIAN_DIR/watchdog.log"
CONTROL_FILE="$GUARDIAN_DIR/control"
HOSTS_BACKUP="$GUARDIAN_DIR/hosts.backup"
MODULE_HOSTS="$MODULE_DIR/system/etc/hosts"
LOOP_SLEEP_SECONDS=3
HOSTS_CHECK_EVERY_TICKS=10
2025-12-21 19:12:16 +01:00
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >>"$LOG_FILE"
}
is_enabled() {
if [ ! -f "$CONTROL_FILE" ]; then
return 1
fi
2025-12-21 19:12:16 +01:00
IFS= read -r guardian_state < "$CONTROL_FILE" || guardian_state=""
[ "$guardian_state" = "ENABLED" ]
}
protect_module_flags() {
2025-12-21 19:12:16 +01:00
if [ -f "$MODULE_DIR/disable" ]; then
log "ALERT: Module disable detected via Magisk UI - removing disable flag"
rm -f "$MODULE_DIR/disable"
fi
2026-02-20 01:17:53 +01:00
2025-12-21 19:12:16 +01:00
if [ -f "$MODULE_DIR/remove" ]; then
2026-02-20 01:17:53 +01:00
log "ALERT: Module removal detected via Magisk UI - removing remove flag"
2025-12-21 19:12:16 +01:00
rm -f "$MODULE_DIR/remove"
fi
}
protect_hosts() {
if [ ! -f "$HOSTS_BACKUP" ] || [ ! -f "$MODULE_HOSTS" ]; then
return
fi
2026-02-20 01:17:53 +01:00
if ! cmp -s "$MODULE_HOSTS" "$HOSTS_BACKUP"; then
log "ALERT: Hosts tampering detected - restoring"
cp "$HOSTS_BACKUP" "$MODULE_HOSTS"
fi
}
log "=== Watchdog starting ==="
tick_count=0
while true; do
protect_module_flags
if is_enabled; then
if [ $((tick_count % HOSTS_CHECK_EVERY_TICKS)) -eq 0 ]; then
protect_hosts
2025-12-21 19:12:16 +01:00
fi
fi
2026-02-20 01:17:53 +01:00
tick_count=$((tick_count + 1))
sleep "$LOOP_SLEEP_SECONDS"
2025-12-21 19:12:16 +01:00
done
WATCHDOG
}
2025-12-21 19:12:16 +01:00
start_watchdog() {
nohup sh "$WATCHDOG_SCRIPT" >/dev/null 2>&1 &
}
post_fs_main() {
mkdir -p "$GUARDIAN_DIR"
log "Guardian module loading"
write_watchdog_script
chmod 755 "$WATCHDOG_SCRIPT"
if [ "${ANDROID_GUARDIAN_POST_FS_SKIP_WATCHDOG_START:-0}" -ne 1 ]; then
start_watchdog
log "Watchdog started"
return
fi
log "Watchdog generation complete (start skipped)"
}
2025-12-21 19:12:16 +01:00
if [ "${ANDROID_GUARDIAN_POST_FS_SKIP_MAIN:-0}" -ne 1 ]; then
post_fs_main
fi