【bugku】游戏完成

问题列表:
在这里插入图片描述

文件链接

运行程序

bugku_游戏过关

灯8,初全灭
输入n,则n状态改变,且n的前后两个灯一起随之改变(1的前后是8,2)
要求最终让n灯全亮。

  1. 算法模拟得到解
  2. 逆向查找

IDA导入

IDA打开文件,F5反编译如下:

void __cdecl main_0()
{
  signed int i; // [esp+DCh] [ebp-20h]
  int v1; // [esp+F4h] [ebp-8h]

  sub_45A7BE(&unk_50B110);
  sub_45A7BE(&unk_50B158);
  sub_45A7BE(&unk_50B1A0);
  sub_45A7BE(&unk_50B1E8);
  sub_45A7BE(&unk_50B230);
  sub_45A7BE(&unk_50B278);
  sub_45A7BE(&unk_50B2C0);
  sub_45A7BE(&unk_50B308);
  sub_45A7BE(&unk_50AFD0);
  sub_45A7BE("|              by 0x61                                 |\n");
  sub_45A7BE("|                                                      |\n");
  sub_45A7BE("|------------------------------------------------------|\n");
  sub_45A7BE(
    "Play a game\n"
    "The n is the serial number of the lamp,and m is the state of the lamp\n"
    "If m of the Nth lamp is 1,it's on ,if not it's off\n"
    "At first all the lights were closed\n");
  sub_45A7BE("Now you can input n to change its state\n");
  sub_45A7BE(
    "But you should pay attention to one thing,if you change the state of the Nth lamp,the state of (N-1)th and (N+1)th w"
    "ill be changed too\n");
  sub_45A7BE("When all lamps are on,flag will appear\n");
  sub_45A7BE("Now,input n \n");
  while ( 1 )
  {
    while ( 1 )
    {
      sub_45A7BE("input n,n(1-8)\n");
      sub_459418();
      sub_45A7BE("n=");
      sub_4596D4("%d", &v1);
      sub_45A7BE("\n");
      if ( v1 >= 0 && v1 <= 8 )
        break;
      sub_45A7BE("sorry,n error,try again\n");
    }
    if ( v1 )
    {
      sub_4576D6(v1 - 1);
    }
    else
    {
      for ( i = 0; i < 8; ++i )
      {
        if ( (unsigned int)i >= 9 )
          j____report_rangecheckfailure();
        byte_532E28[i] = 0;
      }
    }
    j__system("CLS");
    sub_458054();
    if ( byte_532E28[0] == 1
      && byte_532E28[1] == 1
      && byte_532E28[2] == 1
      && byte_532E28[3] == 1
      && byte_532E28[4] == 1
      && byte_532E28[5] == 1
      && byte_532E28[6] == 1
      && byte_532E28[7] == 1 )
    {
      sub_457AB4();//here
    }
  }
}

随着sub_457AB4();//here追踪,找到如下:

  sub_45A7BE("done!!! the flag is ");
  v59 = 18;
  v60 = 64;
  v61 = 98;
  v62 = 5;
  v63 = 2;
  v64 = 4;
  v65 = 6;
  v66 = 3;
  v67 = 6;
  v68 = 48;
  v69 = 49;
  v70 = 65;
  v71 = 32;
  v72 = 12;
  v73 = 48;
  v74 = 65;
  v75 = 31;
  v76 = 78;
  v77 = 62;
  v78 = 32;
  v79 = 49;
  v80 = 32;
  v81 = 1;
  v82 = 57;
  v83 = 96;
  v84 = 3;
  v85 = 21;
  v86 = 9;
  v87 = 4;
  v88 = 62;
  v89 = 3;
  v90 = 5;
  v91 = 4;
  v92 = 1;
  v93 = 2;
  v94 = 3;
  v95 = 44;
  v96 = 65;
  v97 = 78;
  v98 = 32;
  v99 = 16;
  v100 = 97;
  v101 = 54;
  v102 = 16;
  v103 = 44;
  v104 = 52;
  v105 = 32;
  v106 = 64;
  v107 = 89;
  v108 = 45;
  v109 = 32;
  v110 = 65;
  v111 = 15;
  v112 = 34;
  v113 = 18;
  v114 = 16;
  v115 = 0;
  v2 = 123;
  v3 = 32;
  v4 = 18;
  v5 = 98;
  v6 = 119;
  v7 = 108;
  v8 = 65;
  v9 = 41;
  v10 = 124;
  v11 = 80;
  v12 = 125;
  v13 = 38;
  v14 = 124;
  v15 = 111;
  v16 = 74;
  v17 = 49;
  v18 = 83;
  v19 = 108;
  v20 = 94;
  v21 = 108;
  v22 = 84;
  v23 = 6;
  v24 = 96;
  v25 = 83;
  v26 = 44;
  v27 = 121;
  v28 = 104;
  v29 = 110;
  v30 = 32;
  v31 = 95;
  v32 = 117;
  v33 = 101;
  v34 = 99;
  v35 = 123;
  v36 = 127;
  v37 = 119;
  v38 = 96;
  v39 = 48;
  v40 = 107;
  v41 = 71;
  v42 = 92;
  v43 = 29;
  v44 = 81;
  v45 = 107;
  v46 = 90;
  v47 = 85;
  v48 = 64;
  v49 = 12;
  v50 = 43;
  v51 = 76;
  v52 = 86;
  v53 = 13;
  v54 = 114;
  v55 = 1;
  v56 = 117;
  v57 = 126;
  v58 = 0;
  for ( i = 0; i < 56; ++i )
  {
    *(&v2 + i) ^= *(&v59 + i);
    *(&v2 + i) ^= 0x13u;
  }
  return sub_45A7BE((int)"%s\n", (unsigned int)&v3);//输出函数。
}

根据flag生成算法写python。

for i in range(0,56):
	v[2+i] = v[2+i]^v[59+i]^0x13
strr = ''.join(chr(i) for i in v)
print(strr[2:2+56])

游戏完成_falg
得到flag:zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

找flag方法:
1. 按照规则完成获取flag(完成游戏) 。
2. 找flag的生成方法,获取数据自己生成。
3. 改代码逻辑??

### 构建游戏错误跟踪系统的概述 构建一个针对游戏开发的错误跟踪系统或 Bug 库是一项复杂而重要的任务。这种系统不仅能够帮助开发者高效地管理和解决游戏中存在的问题,还能显著提升整体的游戏质量与用户体验。 #### 1. 系统架构设计 为了实现高效的错误跟踪功能,可以采用分层的设计方法来定义整个系统的结构: - **核心模块** - 数据库:用于存储所有的 Bug 记录及其状态信息。数据库应支持灵活查询以便快速检索特定条件下的 Bugs[^1]。 - 用户界面(UI):提供给项目成员提交新 Bug 报告、查看现有报告并更新其进度的功能接口。 - **辅助组件** - 权限控制系统:确保只有授权人员才能访问敏感数据或者执行某些操作(比如关闭某个严重级别的 Bug)。 - 邮件通知服务:当有新的 Bug 被创建或是已有 Bug 的状态发生变化时自动发送邮件提醒相关人员。 #### 2. 功能需求分析 ##### a. 基础功能 - 创建、编辑和删除 Bug 描述; - 设置优先级(Priority),如高(High), 中(Medium),低(Low); - 定义状态(Status): 新(New), 已确认(Assigned), 正在处理(In Progress), 解决(Solved)/已验证(Closed); ##### b. 扩展特性建议 鉴于您提到的是关于 MMORPG 游戏环境中的应用案例,则可能还需要考虑如下额外要素: - 整合现有的日志框架,使得可以从 `LogManager` 或其他子系统直接导入发现的问题作为初始 Bug 提交项[^2]; - 支持多种类型的日志级别映射到不同的 Bug 类型上,例如将 ERROR 级别的日志转化为 Critical Priority 的 Bug; - 对于网络相关的 Issues (通过 NetworkLogs 捕捉的信息),应该特别标注出来,并允许附加详细的会话详情供进一步诊断使用; ```python class GameBugTracker: def __init__(self): self.bugs = [] def add_bug(self, title, description, priority="Medium", status="New"): bug_id = len(self.bugs)+1 new_bug = { 'id': bug_id, 'title': title, 'description': description, 'priority': priority, 'status': status } self.bugs.append(new_bug) def update_status(self, bug_id, new_status): for bug in self.bugs: if bug['id'] == bug_id: bug['status'] = new_status tracker = GameBugTracker() tracker.add_bug("Player Disconnect Issue","Players are disconnecting randomly during combat.", "High") print(tracker.bugs) ``` 上述代码片段展示了一个简单的 Python 实现方案,其中包含了基本的数据模型以及两个主要的操作函数——添加一个新的 Bug 和修改指定 ID 下面的状态字段值。 ### 结论 综上所述,在构建适用于游戏项目的 Bug Management System 过程当中,除了遵循常规的最佳实践之外,还应当紧密结合目标领域内的特殊需求来进行定制化调整。这包括但不限于充分利用既有的 Logging Infrastructure 并将其无缝嵌入至整体工作流之中.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值