#!/usr/bin/env python

"""
Copyright (c) 2006-2024 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import re

from lib.core.enums import PRIORITY  # 从核心库导入优先级枚举

# 设置优先级为最高
__priority__ = PRIORITY.HIGHEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    这个函数用于篡改（tamper）输入的payload，将大于操作符（'>')替换为'GREATEST'函数的等效形式。

    参数：
        payload：要篡改的原始payload。
        **kwargs：其他可选参数（在本函数中未使用）。

    测试情况：
        * MySQL 4, 5.0 和 5.5
        * Oracle 10g
        * PostgreSQL 8.3, 8.4, 9.0

    注意：
        * 这个篡改方法对于绕过那些过滤大于字符（'>')的弱Web应用防火墙很有用。
        * GREATEST函数是一个广泛使用的SQL命令。因此，这个tamper脚本应该适用于大多数数据库。

    示例：
        >>> tamper('1 AND A > B')
        '1 AND GREATEST(A,B+1)=A'
    """

    retVal = payload  # 初始化返回值为输入的payload


    if payload:  # 如果payload不为空
        # 使用正则表达式查找'A > B'形式的语句
        match = re.search(r"(?i)(\b(AND|OR)\b\s+)([^>]+?)\s*>\s*(\w+|'[^']+')", payload)

        if match:  # 如果找到匹配项
            # 构造GREATEST函数形式的语句，并替换原语句
            _ = "%sGREATEST(%s,%s+1)=%s" % (match.group(1), match.group(3), match.group(4), match.group(3))
            retVal = retVal.replace(match.group(0), _)  # 替换原语句为GREATEST函数形式

    return retVal
