zoukankan      html  css  js  c++  java
  • 攻防世界-reverse-7(game)

    第七题:game

    下载后是一个可执行程序。
    ida打开并且SHIFT+F12

    进入后跳转交叉引用列表
    发现关键代码

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

    逆向代码

    a = [18, 64, 98, 5, 2, 4, 6, 3, 6, 48, 49, 65, 32, 12, 48, 65, 31, 78, 62, 32, 49, 32,1, 57, 96, 3, 21, 9, 4, 62, 3, 5, 4, 1, 2, 3, 44, 65, 78, 32, 16, 97, 54, 16, 44,52, 32, 64, 89, 45, 32, 65, 15, 34, 18, 16, 0]//将60-116划入一个数组中
    b = [123, 32, 18, 98, 119, 108, 65, 41, 124, 80, 125, 38, 124, 111, 74, 49,83, 108, 94, 108, 84, 6, 96, 83, 44, 121, 104, 110, 32, 95, 117, 101, 99,123, 127, 119, 96, 48, 107, 71, 92, 29, 81, 107, 90, 85, 64, 12, 43, 76, 86,13, 114, 1, 117, 126, 0]//3-59划入一个数组。
    str = ''
    for i in range(0, 56):
        b[0 + i] ^= a[0 + i]
        b[0 + i] ^= 0x13
        str = str + chr(b[i]);
    print(str)
    

    破解游戏运行规则
    a=bc,先运算 bc,这个表达式的含义是,若 b 与 c 相等,那么得出的值为 1,若不等则为 0.

    bool __cdecl sub_45E640(int a1)
    {
      bool result; // al
    
      if ( a1 )
      {
        if ( a1 == 7 )
        {
          byte_532E28[7] = byte_532E28[7] == 0;
          byte_532E27[7] = byte_532E27[7] == 0;
          result = 1;
          byte_532E28[0] = byte_532E28[0] == 0;
        }
        else
        {
          byte_532E28[a1] = byte_532E28[a1] == 0;
          byte_532E27[a1] = byte_532E27[a1] == 0;
          result = byte_532E29[a1] == 0;
          byte_532E29[a1] = result;
        }
      }
      else
      {
        byte_532E28[0] = byte_532E28[0] == 0;
        byte_532E29[0] = byte_532E29[0] == 0;
        result = 1;
        byte_532E28[7] = byte_532E28[7] == 0;
      }
      return result;
    }
    

    分析得:
    按1--改变1,2,8状态
    按8--改变1,7,8状态
    按i(除1,8)--转变i-1,i,i+1状态
    因此无论是87654321还是12345678都可以成功过关

  • 相关阅读:
    js异步编程
    gitreset
    js数据类型
    vuex报错
    个人管理系统综述
    ffmpeg第7篇:数据流选择神器map指令
    eltable多选框根据条件隐藏显示
    [域渗透内网渗透] 从 web 到域控,你未曾设想的攻击链
    宽字节第二期线下培训开始招生啦!!!
    cve20212394 weblogic反序列化漏洞分析
  • 原文地址:https://www.cnblogs.com/banpingcu/p/12656682.html
Copyright © 2011-2022 走看看