#!/bin/bash

# 指定扫描的目录路径
SCAN_DIR="/data/"

# 日志路径
LOG_DIR="/data/log"

# 服务器ip
current_ip=$(curl -s --max-time 10 https://api64.ipify.org)

# 恶意代码模式
MALWARE_PATTERNS=("eval(" "base64_decode(" "gzinflate(" "pack(" "error_reporting" "session_start(" "set_writeable(" "@ini_set(" "flush(" "touch(" "@unlink" "strrev(" "assert(" "preg_replace(" "call_user_func(" "call_user_func_array(" "array_map(" "system" "exec" "shell_exec" "passthru" "popen")

# 确保日志目录存在,不存在则创建
if [ ! -d "$LOG_DIR" ]; then
    mkdir -p "$LOG_DIR" || { echo "无法创建日志目录: $LOG_DIR"; exit 1; }
fi

# 生成当前时间作为日志文件名,格式为:YYYY-MM-DD-HHMMSS.log
current_time=$(date +"%Y-%m-%d-%H%M%S")
log_file="$LOG_DIR/scanner_${current_time}.log"

# 检查日志文件是否存在,如果不存在则创建
if [ ! -f "$log_file" ]; then
    touch "$log_file" || { echo "无法创建日志文件: $log_file"; exit 1; }
fi

# 打开日志文件描述符,确保在当前 shell 进程中进行写操作
exec 3>>"$log_file"

# 遍历指定目录下的所有 .php 文件,并搜索恶意代码模式
echo "--------------------------------------"
echo "开始扫描:"
find "$SCAN_DIR" -type f -name "*.php" | while read -r file; do
    for pattern in "${MALWARE_PATTERNS[@]}"; do
        if grep -q "$pattern" "$file"; then
            echo "找到可疑文件: $file  , 文件中包含 -- '$pattern' "
            echo "$(date +"%Y-%m-%d %H:%M:%S") - Found suspicious pattern '$pattern' in file: $file" >> "$log_file"
        fi
    done
done

# 记录扫描完成的日志,即使没有搜索到关键词也要写入
echo "$(date +"%Y-%m-%d %H:%M:%S") 扫描完成,当前IP地址: $current_ip" >&3

# 关闭文件描述符
exec 3>&-

# 准备将日志文件内容发送到接口
api_url="接口地址"

# 使用curl发送POST请求将日志文件内容传递给接口
curl -X POST -F "log=@$log_file" "$api_url"