防注册机教程

防御注册机攻击完整解决方案

一、服务端核心代码修改

1. 修改登录验证流程 (/adm/daemons/logind.c)

logon函数改造

void logon(object ob)
{
    string str;
    if (BAN_D->is_banned(query_ip_name(ob)) == 1) {
        write(ZJTMPSAY"你的地址在本 MUD 不受欢迎。\n");
        destruct(ob);
        return;
    }
    write("\n");
    str = crypt(ZJKEY,0); // 在zjmud.h中修改ZJKEY为自定义密钥
    write("ver1.0,"+str+"\n");
    input_to("jiance",ob,str);
}

jiance函数增强验证

void jiance(string arg, object ob, string str)
{
    if(!arg) {
        input_to("jiance",ob,str);
        return;
    }

    // 注意:需与check.php保持相同加密逻辑
    if(arg!=(sha1(crypt(ZJKEY,str)+"客户端密钥"+sha1("二次密钥"))) { 
        write("客户端非法\n");
        destruct(ob);
        return;
    } else {
        write("版本验证成功\n");
        ob->set_temp("web_log",1);
        input_to("get_user", ob);
    }
}

2. 新增IP频率限制 (/adm/single/master.c)

新增全局变量

nosave mapping ip_list=([
    "time":0,
    "num":0,
]);

IP封禁函数

int ip_kill(string ip) {
    if (BAN_D->is_banned(ip) == 1) return 0;

    if(ip_list[ip]) {
        if(time()-ip_list[ip]["time"]<=1) {
            ip_list[ip]["num"]+=1;
            if(ip_list[ip]["num"]>3) {
                BAN_D->add_site(ip);
                write(ZJTMPSAY+"封禁IP\n");
                return 0;
            }
        }
    } else {
        ip_list[ip]=(["time":0,"num":0]);
    }
    ip_list[ip]["time"]=time();
    return 1;
}

连接控制改造

object connect()
{
    object login_ob;
    mixed err;

    /* 可选:全局登录频率限制
    if(time()-ip_list["time"]<=1){
        ip_list["num"]+=1;
        if(ip_list["num"]>=20) return 0;
    }else{
        ip_list["num"]=1;
    }
    ip_list["time"]=time(); */

    if(!ip_kill(query_ip_number(this_object()))) return 0;

    // 原有代码...
}

二、客户端配套改造方案

1. 后端验证接口 (www/check.php)

<?php
if(!isset($_GET['key'])){ die('参数错误'); }
$key = sha1($_GET['key'].sha1('二次密钥')); // 需与游戏内保持一致
echo $key.PHP_EOL;
?>

2. 客户端APP修改

  1. 使用MT管理器或安卓修改大师
  2. 搜索替换字段:AP4s3dF5 → 自定义客户端密钥
  3. 重新打包签名

三、安全机制原理解析

验证流程示意图

  1. 服务端发送:ver1.0,[crypt加密字符串]
  2. 客户端截取加密字符串
  3. 提交到check.php进行二次加密
  4. 返回复合加密结果到游戏服务端
  5. 服务端验证加密逻辑链

增强建议方案

  1. 动态密钥:结合当前小时数生成动态密钥
  2. HTTPS加密
    • 注册专属域名
    • 配置SSL证书
    • 改造所有连接为https://域名/check.php
  3. 多层验证:增加设备指纹验证

四、注意事项

  1. 确保jiance函数与check.php加密逻辑完全一致
  2. 客户端密钥与二次密钥建议采用不同值
  3. 重要密钥建议定期更换
  4. 封禁阈值可根据实际攻击情况调整

技术交流QQ:279631638
最后更新:2025年5月21日

京ICP备13031296号-4