• KCTF2020 子鼠开天 wp


    程序流程比较清晰,输入的name先进行位数判断,再进行主要判断sub_401380函数:

      if ( v4 - 1 < 3 || v4 - 1 > 20 )              // name判断
      {
        sub_411A90(aBadName);
        result = -1;
      }
      else
      {
        sub_411A90(aEnterYourSn);
        scanf(aS, &input_ser);
        if ( strlen(&input_ser) == 64 )
        {
          sub_401380(&input_name, v4 - 1, &input_ser, 64);
          result = 0;
        }
        else
        {
          sub_411A90(aBadSn);
          result = -1;
        }
      }
      return result;
    }

    findcrypt可以找出一些加密函数:

    加密算法整个 先进行base16 ,就是按照16进制保存(可以动态调试看到),然后经过AES算法第一轮加密, 加密结果在进行RSA加密,记为v8

    if ( base16(a3, 64, &v9) != 32 // 就是转换成16进制保存 丫的
    || (AES(&v9, 32, &v10, &unk_4190D0, 128, 0), RSA(&v10, 32, &v5), v5)
    || v6 != 2
    || v7 )
    {
    sub_41

    用tea算法,用户名加密得到v4,比较v4和v8。

    开始解密:

    首先动态调试得到KCTF tea算法得到的v4:

     14 AF 58 AD 4D 76 D5 9D 8D 21 71 FF B4 CA 22 31  也就是v8的值。

    RSA的  e=65537

    动态分析给出的一队原密文就可以得到N:

    0x69823028577465AB3991DF045146F91D556DEE8870845D8EE1CD3CF77E4A0C39

    然后分解  N  得到 p和 q:

    201 522792 635114 097998 567775 554303 915819          × 236 811285 547763 449711 675622 888914 229291   

    可以解出 d值:25800220689750035710081482091841722516499776007453536839839657556744187750333

    import gmpy2
    from Crypto.Cipher import AES
     
    n = 0x69823028577465AB3991DF045146F91D556DEE8870845D8EE1CD3CF77E4A0C39
    q = 201522792635114097998567775554303915819
    p = 236811285547763449711675622888914229291
    e = 0x10001
    c = 0x2888888888888888888888888880014AF58AD4D76D59D8D2171FFB4CA2231
    phi_n= (p - 1) * (q - 1)
    d = gmpy2.invert(e, phi_n)
     
    print(hex(pow(c,d,n)))
     
     
    s='2d5f4c9d567c43399312b8898d6c7f2ec799c64bde4fe39eb01771be1e7f4795'.decode('hex')
    key = '480B62C3ACD6C8A36B18D9E906CD90D2'.decode('hex')
     
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted = cipher.encrypt(s).encode('hex')
    print("name = KCTF")
    print("sn = "+encrypted)

    6ED8BC1F04D0C360567FB579398265FEEC8B48DC4B804904FEB1AB538C823270

  • 相关阅读:
    Windows 程序员必备的知识和工具
    由级别和性格特征将程序员分类 看看你属于哪一种
    调试九法:软硬件错误的排查之道<书评>
    逆向反汇编代码推算C++的局部变量
    逆向分析一个完整的C++程序包含寄存器与参数传递详解
    1607:Unable to install InstallShield Scripting runtime
    Form的构造函数和Load事件的区别?
    "春运男子持刀强行劫走17张卧铺票" ....
    SQL SERVER 2005中的Case When用法
    SBO中各个版本的密码
  • 原文地址:https://www.cnblogs.com/jentleTao/p/12743857.html
Copyright © 2020-2023  润新知