📜  门| GATE CS 2018 |简体中文第32章(1)

📅  最后修改于: 2023-12-03 15:12:36.493000             🧑  作者: Mango

门 | GATE CS 2018 | 简体中文第32章

本章节介绍了几种常见的计算机安全门,包括:

1. 逆向门

逆向门是一种基于逆向工程的安全门。它会通过检查程序代码和引用的库,来防止被逆向工程攻击。这个门允许程序员定义哪些代码和库是安全的,哪些不是。

以下是一个简单的逆向门的实现示例:

bool is_reverse_engineering_allowed = false;

void reverse_engineering_detector()
{
    if (!is_reverse_engineering_allowed)
    {
        // 程序被逆向工程
        exit(0);
    }
}

int main()
{
    // 初始化检查器
    is_reverse_engineering_allowed = true;

    // Do some stuff here.

    // 清理检查器
    is_reverse_engineering_allowed = false;

    return 0;
}
2. 最小化门

最小化门是一种针对攻击者通过操作代码和数据的长尾攻击的安全门。它将执行来自外部的数据和代码减少到一个最小。这个门允许程序员定义哪些数据和代码是关键的,哪些不是。

以下是一个简单的最小化门的实现示例:

#define MAX_BUF_SIZE 1024

char* sensitive_data = "s3ns1t1ve_d4t4";
int sensitive_data_len = 14;

void minimize_external_input(char* input, size_t input_size)
{
    // 限制外部数据长度
    if (input_size > MAX_BUF_SIZE)
    {
        input_size =  MAX_BUF_SIZE;
    }

    // 复制外部数据到缓冲区
    char buf[MAX_BUF_SIZE];
    memcpy(buf, input, input_size);

    // 清除缓冲区的其余部分
    memset(buf + input_size, 0x00, MAX_BUF_SIZE - input_size);

    // Do some stuff here.
}

int main()
{
    char* input = "Hello, World!";
    size_t input_size = strlen(input);

    minimize_external_input(input, input_size);

    // Do some stuff here.

    return 0;
}
3. 确定性门

确定性门是一种防止随机性进攻的安全门。它会检查程序代码和运行时数据的所有变化,并确保它们都是预期的。这个门允许程序员定义哪些变化是安全的,哪些不是。

以下是一个简单的确定性门的实现示例:

int random_number = 42;

void deterministic_check()
{
    // 随机数不等于42
    if (random_number != 42)
    {
        // 非法操作
        exit(0);
    }
}

int main()
{
    // 计算随机值
    srand(time(NULL));
    random_number = rand() % 100;

    deterministic_check();

    printf("The random number is %d", random_number);

    return 0;
}

以上是三种常见的计算机安全门的实现示例。当然,实际应用中还应该结合其他的安全措施来保护程序的安全。