Binary Ninja 5.1 许可分析

Binary Ninja 5.1.8005 Personal

VirusTotal - File - 5f4c10ab04474192764fd39b6309bcdb74bf31ad3f1fb488c0e14463ba975be4

通过网盘分享的文件:binaryninjacore.dll_patch等2个文件
链接: https://pan.baidu.com/s/1d6ItvD4rETnBq9XBmZ_BHw?pwd=ikun 提取码: ikun

check_lic_1810E63F0

char check_lic_1810E63F0()
{
  // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]

  if ( byte_18A2379E9 )
    return 1;

  v91 = (_Mtx_t)&unk_18A237990;
  v92 = 0;
  v1 = Mtx_lock((_Mtx_t)&unk_18A237990);
  if ( v1 )
  {
    std::_Throw_C_error(v1);

LABEL_239:
    sub_180CC11B0(pExceptionObject, &Buf2);
    CxxThrowException(pExceptionObject, (_ThrowInfo *)&_TI2_AVruntime_error_std__);
  }

  v92 = 1;
  if ( !::BN_LICENSE )
  {
    if ( getenv("BN_LICENSE") )
    {
      env = getenv("BN_LICENSE");
      v3 = (void (__fastcall ***)(_QWORD, __int64))new_186615100(0x38ui64);
      v96 = v3;
      if ( v3 )
      {
        v4 = 0xFFFFFFFFFFFFFFFFui64;
        do
          ++v4;
        while ( env[v4] );

        BN_LICENSE = sub_180C394F0((__int64)v3, env, v4);
      }
      else
      {
        BN_LICENSE = 0i64;
      }

      ::BN_LICENSE = BN_LICENSE;
      goto LABEL_43;
    }

    v6 = (_QWORD *)sub_1810E8080((__int64)&v148);
    if ( v6[3] >= 0x10ui64 )
      v6 = (_QWORD *)*v6;

    sub_180C5D460(v97, v6, 0i64);
    if ( si128.m128i_i64[1] >= 0x10ui64 )
      error_1819AD2A0(v148);

    si128 = _mm_load_si128((const __m128i *)&xmmword_186773BF0);
    LOBYTE(v148) = 0;
    if ( !sub_180C5D5D0((__int64)v97)
      || (n0x1000000 = sub_180C5D590((__int64)v97), n0x1000000_1 = n0x1000000, n0x1000000 > 0x1000000) )
    {
LABEL_20:
      sub_180C5D4F0(v97);
      Mtx_unlock((_Mtx_t)&unk_18A237990);
      return 0;
    }

    sub_180C395A0((__int64)v165, n0x1000000 + 1);
    if ( sub_180C5D5E0(v97, v166, 0i64, n0x1000000_1) != n0x1000000_1 )
    {
      sub_180C39600((__int64)v165);
      goto LABEL_20;
    }

    p_i = 0i64;
    v113 = 0i64;
    sub_180612970(&p_i, v166, n0x1000000_1);
    p_i_1 = (__int64)&p_i;
    if ( v113.m128i_i64[1] >= 0x10ui64 )
      p_i_1 = p_i;

    v10 = v113.m128i_i64[0] + p_i_1;
    p_i_2 = (__int64)&p_i;
    if ( v113.m128i_i64[1] >= 0x10ui64 )
      p_i_2 = p_i;

    i_1 = (char *)(v113.m128i_i64[0] + p_i_2);
    i_2 = (char *)&p_i;
    if ( v113.m128i_i64[1] >= 0x10ui64 )
      i_2 = (char *)p_i;

    if ( i_2 != i_1 )
    {
      do
      {
        if ( *i_2 < 0 )
          break;

        ++i_2;
      }
      while ( i_2 != i_1 );

      if ( i_2 != i_1 )
      {
        for ( i = i_2 + 1; i != i_1; ++i )
        {
          if ( *i >= 0 )
            *i_2++ = *i;
        }
      }
    }

    sub_18062E390(&p_i, &v96, i_2, v10);
    v15 = new_186615100(0x38ui64);
    v100 = (__int64)v15;
    if ( v15 )
    {
      p_p_i = &p_i;
      if ( v113.m128i_i64[1] >= 0x10ui64 )
        p_p_i = (__int128 *)p_i;

      BN_LICENSE_1 = sub_180C394F0((__int64)v15, p_p_i, v113.m128i_u64[0]);
    }
    else
    {
      BN_LICENSE_1 = 0i64;
    }

    ::BN_LICENSE = BN_LICENSE_1;
    if ( v113.m128i_i64[1] >= 0x10ui64 )
      error_1819AD2A0(p_i);

    v113 = _mm_load_si128((const __m128i *)&xmmword_186773BF0);
    LOBYTE(p_i) = 0;
    sub_180C39600((__int64)v165);
    sub_180C5D4F0(v97);
  }

LABEL_43:
  v18 = sub_18067DE30(v111);
  v19 = (*(__int64 (__fastcall **)(_QWORD *))(*v18 + 8i64))(v18);
  v100 = v19;
  sub_18067FCC0(v111);
  sub_18067EDE0(v103, 0i64);
  v146 = 0i64;
  v147 = _mm_load_si128((const __m128i *)&xmmword_186773BF0);
  LOBYTE(v146) = 0;
  if ( !(*(unsigned __int8 (__fastcall **)(__int64, _QWORD, _QWORD, char *, __int128 *))(*(_QWORD *)v19 + 8i64))(
          v19,
          *(_QWORD *)(::BN_LICENSE + 0x10),
          *(_QWORD *)(::BN_LICENSE + 0x10) + *(_QWORD *)::BN_LICENSE,
          v103,
          &v146) )
    goto LABEL_239;

  sub_180686DE0((__int64)v103, (__int64)v101);
  sub_18068A820((__int64)v103, (__int64)v105);
  while ( !sub_18068D320((__int64)v101, (__int64)v105) )
  {
    v20 = sub_18068A1E0(v101);
    _180680EF0 = json_get_180680EF0(v20, "product");
    json_value_tostring_1806867E0(_180680EF0, product);
    _180680EF0_1 = json_get_180680EF0(v20, "email");
    json_value_tostring_1806867E0(_180680EF0_1, email);
    _180680EF0_2 = json_get_180680EF0(v20, "serial");
    json_value_tostring_1806867E0(_180680EF0_2, serial);
    _180680EF0_3 = json_get_180680EF0(v20, "created");
    json_value_tostring_1806867E0(_180680EF0_3, created);
    _180680EF0_4 = json_get_180680EF0(v20, "type");
    json_value_tostring_1806867E0(_180680EF0_4, type);
    _180680EF0_5 = json_get_180680EF0(v20, "count");
    count = json_value_toint_1806862F0((char *)_180680EF0_5);
    _180680EF0_6 = json_get_180680EF0(v20, "data");
    json_value_tostring_1806867E0(_180680EF0_6, data);
    sub_180C39C10(v168, data);
    _180680EF0_7 = json_get_180680EF0(v20, "signature");
    v30 = json_value_tostring_1806867E0(_180680EF0_7, signature);
    sub_180C39C10(v167, v30);
    if ( n0x10 >= 0x10 )
      error_1819AD2A0(signature[0]);

    signature[2] = 0i64;
    n0x10 = 0xFi64;
    LOBYTE(signature[0]) = 0;
    if ( (unsigned __int8)sub_18068D510(v20, "expiresEpoch") )
    {
      _180680EF0_8 = json_get_180680EF0(v20, "expiresEpoch");
      v32 = sub_180686960(_180680EF0_8);
    }
    else
    {
      v32 = 0i64;
    }

    if ( v168[0] != 0x118 )
    {
      sub_180CC11B0(pExceptionObject_1, &Buf2);
      CxxThrowException(pExceptionObject_1, (_ThrowInfo *)&_TI2_AVruntime_error_std__);
    }

    v33 = (_OWORD *)v168[2];
    lic_data_1 = lic_data;
    n2 = 2i64;
    do
    {
      *(_OWORD *)lic_data_1 = *v33;
      *((_OWORD *)lic_data_1 + 1) = v33[1];
      *((_OWORD *)lic_data_1 + 2) = v33[2];
      *((_OWORD *)lic_data_1 + 3) = v33[3];
      *((_OWORD *)lic_data_1 + 4) = v33[4];
      *((_OWORD *)lic_data_1 + 5) = v33[5];
      *((_OWORD *)lic_data_1 + 6) = v33[6];
      lic_data_1 += 0x80;
      *((_OWORD *)lic_data_1 + 0xFFFFFFFF) = v33[7];
      v33 += 8;
      --n2;
    }
    while ( n2 );

    *(_OWORD *)lic_data_1 = *v33;
    *((_QWORD *)lic_data_1 + 2) = *((_QWORD *)v33 + 2);
    x_sprintf_180676E70(count_str, 0x20ui64, "%d", count);
    sub_180C39570(v150);
    product_1 = product;
    if ( n0x10_1 >= 0x10 )
      product_1 = (void **)product[0];

    BNAppendDataBufferContents_0(v150, product_1, Size);
    sub_180C39900(v150, 0i64);
    email_1 = email;
    if ( n0x10_2 >= 0x10 )
      email_1 = (unsigned __int64 *)email[0];

    BNAppendDataBufferContents_0(v150, email_1, Size_2);
    sub_180C39900(v150, 0i64);
    serial_1 = serial;
    if ( n0x10_3 >= 0x10 )
      serial_1 = (unsigned __int64 *)serial[0];

    BNAppendDataBufferContents_0(v150, serial_1, Size_1);
    sub_180C39900(v150, 0i64);
    created_1 = created;
    if ( n0x10_4 >= 0x10 )
      created_1 = (unsigned __int64 *)created[0];

    BNAppendDataBufferContents_0(v150, created_1, v130);
    sub_180C39900(v150, 0i64);
    type_1 = type;
    if ( n0x10_5 >= 0x10 )
      type_1 = (unsigned __int64 *)type[0];

    BNAppendDataBufferContents_0(v150, type_1, Size_3);
    sub_180C39900(v150, 0i64);
    v41 = 0xFFFFFFFFFFFFFFFFui64;
    do
      ++v41;
    while ( count_str[v41] );

    BNAppendDataBufferContents_0(v150, count_str, v41);
    sub_180C39900(v150, 0i64);
    data_1 = data;
    if ( n0x10_6 >= 0x10 )
      data_1 = (unsigned __int64 *)data[0];

    BNAppendDataBufferContents_0(v150, data_1, v127);
    v43 = (_DWORD *)j_new_186615100(0x128i64);
    // xored pub key
    *v43 = 0x45F8F074;
    v43[1] = 0x6EFF7F74;
    v43[2] = 0xE1B1F46E;
    v43[3] = 0x66F87FB3;
    v43[4] = 0x64F97745;
    v43[5] = 0x67F673C6;
    v43[6] = 0x6DF8F074;
    v43[7] = 0x66F8F046;
    v43[8] = 0xF995A444;
    v43[9] = 0x947FAE8C;
    v43[0xA] = 0xDF4B1A9F;
    v43[0xB] = 0x36FC14FB;
    v43[0xC] = 0x93DE7727;
    v43[0xD] = 0x5CE043A8;
    v43[0xE] = 0x86C7062D;
    v43[0xF] = 0xD65222A2;
    v43[0x10] = 0x69A55E6;
    v43[0x11] = 0x957A71F4;
    v43[0x12] = 0x6D911479;
    v43[0x13] = 0xDF4A6C2C;
    v43[0x14] = 0xF6863898;
    v43[0x15] = 0x91CB9515;
    v43[0x16] = 0x490C590;
    v43[0x17] = 0xE8D36095;
    v43[0x18] = 0xC8AEB1C;
    v43[0x19] = 0x7B68099A;
    v43[0x1A] = 0x83AC58DB;
    v43[0x1B] = 0x17CD869;
    v43[0x1C] = 0xD9BADF8F;
    v43[0x1D] = 0x5FD6692C;
    v43[0x1E] = 0x253A3B51;
    v43[0x1F] = 0x92086BB8;
    v43[0x20] = 0x33BDA0D7;
    v43[0x21] = 0xCAEE6F30;
    v43[0x22] = 0x540F53B6;
    v43[0x23] = 0x8FB4DEE1;
    v43[0x24] = 0x51FB841A;
    v43[0x25] = 0x51008A6C;
    v43[0x26] = 0x7E9213C8;
    v43[0x27] = 0xA3FBA50D;
    v43[0x28] = 0x7AB82F5D;
    v43[0x29] = 0x7CD66891;
    v43[0x2A] = 0x457A2BC0;
    v43[0x2B] = 0x88A771DD;
    v43[0x2C] = 0x84E7CC2C;
    v43[0x2D] = 0xB85DE039;
    v43[0x2E] = 0xF5A1FD31;
    v43[0x2F] = 0x520FD88C;
    v43[0x30] = 0xCA5E74E0;
    v43[0x31] = 0x6446EC0B;
    v43[0x32] = 0xBDBD7CAF;
    v43[0x33] = 0x9742290C;
    v43[0x34] = 0x5E014FDC;
    v43[0x35] = 0x8FF33064;
    v43[0x36] = 0x5B238660;
    v43[0x37] = 0xF290A38D;
    v43[0x38] = 0x16A61171;
    v43[0x39] = 0xB580C015;
    v43[0x3A] = 0xC5413635;
    v43[0x3B] = 0x854F17DE;
    v43[0x3C] = 0x9A56B9C8;
    v43[0x3D] = 0xB9C6D99F;
    v43[0x3E] = 0x8609B9C0;
    v43[0x3F] = 0xCCD13CBB;
    v43[0x40] = 0xAE876B21;
    v43[0x41] = 0xAA8470B9;
    v43[0x42] = 0xE7D1873E;
    v43[0x43] = 0x12CB66FB;
    v43[0x44] = 0xE5FE5D3C;
    v43[0x45] = 0x20C27687;
    v43[0x46] = 0x5B4F7646;
    v43[0x47] = 0xC8828E04;
    v43[0x48] = 0x66FA7077;
    v43[0x49] = 0x67F97344;
    pubkey_data = 0i64;
    v88 = 0i64;
    for ( j = 0i64; j < 0x126; ++j )
    {
      v45 = (v43[j >> 2] ^ 0x67F97244u) >> (8 * (j & 3));
      v85[0] = v45;
      if ( *((_QWORD *)&pubkey_data + 1) == v88 )
      {
        sub_1810E5F40((const void **)&pubkey_data, *((_BYTE **)&pubkey_data + 1), v85);
      }
      else
      {
        **((_BYTE **)&pubkey_data + 1) = v45;
        ++*((_QWORD *)&pubkey_data + 1);
      }

      v19 = v100;
    }

    BNFreeDataReferences_0(v43);
    pubkey_1818D6FC0 = (void (__fastcall ***)(_QWORD, __int64))load_pubkey_1818D6FC0((__int64 *)&pubkey_data);
    pubkey_1818D6FC0_1 = pubkey_1818D6FC0;
    v151 = 0i64;
    v152 = 0i64;
    n0xF = 0xFi64;
    LOBYTE(v151) = 0;
    n0xE = 0xEi64;
    n0xF_1 = 0xFi64;
    strcpy(EMSA3(SHA_256), "EMSA3(SHA-256)");
    v133 = 0;
    sub_181812A20((__int64)v102, (__int64)pubkey_1818D6FC0, (__int64)EMSA3(SHA_256), 0, (__int64)&v151);
    if ( n0xF_1 >= 0x10 )
    {
      v47 = *(void **)EMSA3(SHA_256);
      if ( n0xF_1 + 1 >= 0x1000 )
      {
        v47 = *(void **)(*(_QWORD *)EMSA3(SHA_256) - 8i64);
        if ( (unsigned __int64)(*(_QWORD *)EMSA3(SHA_256) - (_QWORD)v47 - 8i64) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(v47);
    }

    n0xE = 0i64;
    n0xF_1 = 0xFi64;
    EMSA3(SHA_256)[0] = 0;
    if ( n0xF >= 0x10 )
    {
      v48 = (void *)v151;
      if ( n0xF + 1 >= 0x1000 )
      {
        v48 = *(void **)(v151 - 8);
        if ( (unsigned __int64)(v151 - (_QWORD)v48 - 8) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(v48);
    }

    v152 = 0i64;
    n0xF = 0xFi64;
    LOBYTE(v151) = 0;
    sub_181914880(v102);
    if ( !(unsigned __int8)PK_Verifier_181881660(v102, v167[2], v167[0]) )
    {
      sub_180CC11B0(pExceptionObject_2, &Buf2);
      CxxThrowException(pExceptionObject_2, (_ThrowInfo *)&_TI2_AVruntime_error_std__);
    }

    v154 = 0i64;
    v155 = 0i64;
    n0xF_2 = 0xFi64;
    LOBYTE(v154) = 0;
    v140 = 0i64;
    n3 = 3i64;
    n0xF_3 = 0xFi64;
    LOWORD(v140) = *(_WORD *)"MD5";
    WORD1(v140) = (unsigned __int8)Buf2__3[2];
    hash_181893160(&md5, (const void **)&v140, &v154);
    if ( n0xF_3 >= 0x10 )
    {
      v49 = (void *)v140;
      if ( n0xF_3 + 1 >= 0x1000 )
      {
        v49 = *(void **)(v140 - 8);
        if ( (unsigned __int64)(v140 - (_QWORD)v49 - 8) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(v49);
    }

    n3 = 0i64;
    n0xF_3 = 0xFi64;
    LOBYTE(v140) = 0;
    if ( n0xF_2 >= 0x10 )
    {
      v50 = (void *)v154;
      if ( n0xF_2 + 1 >= 0x1000 )
      {
        v50 = *(void **)(v154 - 8);
        if ( (unsigned __int64)(v154 - (_QWORD)v50 - 8) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(v50);
    }

    v155 = 0i64;
    n0xF_2 = 0xFi64;
    LOBYTE(v154) = 0;
    (*(void (__fastcall **)(__int64, char *, __int64))(*(_QWORD *)md5 + 0x10i64))(md5, lic_data, 0x100i64);
    hash_final_18070BF20(md5, &lic_data_md5);
    v157 = 0i64;
    v158 = 0i64;
    n0xF_4 = 0xFi64;
    LOBYTE(v157) = 0;
    v143 = 0i64;
    n3_1 = 3i64;
    n0xF_5 = 0xFi64;
    LOWORD(v143) = *(_WORD *)"RC4";
    WORD1(v143) = (unsigned __int8)asc_1867A7E04[2];
    rc4_181894420(&rc4, (__int64)&v143, &v157);
    if ( n0xF_5 >= 0x10 )
    {
      v51 = (void *)v143;
      if ( n0xF_5 + 1 >= 0x1000 )
      {
        v51 = *(void **)(v143 - 8);
        if ( (unsigned __int64)(v143 - (_QWORD)v51 - 8) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(v51);
    }

    n3_1 = 0i64;
    n0xF_5 = 0xFi64;
    LOBYTE(v143) = 0;
    if ( n0xF_4 >= 0x10 )
    {
      v52 = (void *)v157;
      if ( n0xF_4 + 1 >= 0x1000 )
      {
        v52 = *(void **)(v157 - 8);
        if ( (unsigned __int64)(v157 - (_QWORD)v52 - 8) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(v52);
    }

    v158 = 0i64;
    n0xF_4 = 0xFi64;
    LOBYTE(v157) = 0;
    rc4_set_key_181907DE0((__int64)rc4, (__int64)lic_data_md5, v94 - (_QWORD)lic_data_md5);
    // 18840F0
    // sub_1818840F0
    ((void (__fastcall *)(void (__fastcall ***)(_QWORD, __int64), char *, char *, __int64))(*rc4)[5])(
      rc4,
      v170,
      datarc4_dec,
      0x18i64);
    invalid_serial_sha256_data_sz = invalid_serial_sha256_data_sz_18A237AF8;
    invalid_serial_sha256_data = invalid_serial_sha256_data_18A237AF0;
    v160 = 0i64;
    v161 = 0i64;
    n0xF_6 = 0xFi64;
    LOBYTE(v160) = 0;
    v137 = 0;
    n7 = 7i64;
    n0xF_7 = 0xFi64;
    qmemcpy(sha256_1, "SHA-25", 6);             // sha256
    *(_QWORD *)&sha256_1[6] = (unsigned __int8)Buf2__6[6];
    hash_181893160(&sha256, (const void **)sha256_1, &v160);
    if ( n0xF_7 >= 0x10 )
    {
      sha256_2 = *(void **)sha256_1;
      if ( n0xF_7 + 1 >= 0x1000 )
      {
        sha256_2 = *(void **)(*(_QWORD *)sha256_1 - 8i64);
        if ( (unsigned __int64)(*(_QWORD *)sha256_1 - (_QWORD)sha256_2 - 8i64) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(sha256_2);
    }

    n7 = 0i64;
    n0xF_7 = 0xFi64;
    sha256_1[0] = 0;
    if ( n0xF_6 >= 0x10 )
    {
      v56 = (void *)v160;
      if ( n0xF_6 + 1 >= 0x1000 )
      {
        v56 = *(void **)(v160 - 8);
        if ( (unsigned __int64)(v160 - (_QWORD)v56 - 8) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(v56);
    }

    v161 = 0i64;
    n0xF_6 = 0xFi64;
    LOBYTE(v160) = 0;
    serial_2 = serial;
    if ( n0x10_3 >= 0x10 )
      serial_2 = (unsigned __int64 *)serial[0];

    (*(void (__fastcall **)(__int64, unsigned __int64 *, size_t))(*(_QWORD *)sha256 + 0x10i64))(
      sha256,
      serial_2,
      Size_1);
    hash_final_18070BF20(sha256, &v98);
      //检验serial的sha256 值是否匹配内置的黑名单
    for ( k = 0; k < invalid_serial_sha256_data_sz; ++k )
    {
      v59 = 0x20 * k;
      if ( *(_QWORD *)v98 == *(_QWORD *)(v59 + invalid_serial_sha256_data)
        && *(_QWORD *)(v98 + 8) == *(_QWORD *)(v59 + invalid_serial_sha256_data + 8)
        && *(_QWORD *)(v98 + 0x10) == *(_QWORD *)(v59 + invalid_serial_sha256_data + 0x10) )
      {
        sub_180CC11B0(pExceptionObject_3, &Buf2);
        CxxThrowException(pExceptionObject_3, (_ThrowInfo *)&_TI2_AVruntime_error_std__);
      }
    }

    serial_3 = serial;
    if ( n0x10_3 >= 0x10 )
      serial_3 = (unsigned __int64 *)serial[0];

    sub_18062D700((unsigned __int64 *)&vec_serial_18A03F3E8, serial_3, Size_1);
    email_2 = email;
    if ( n0x10_2 >= 0x10 )
      email_2 = (unsigned __int64 *)email[0];

    sub_18062D700((unsigned __int64 *)&vec_email_18A03F408, email_2, Size_2);
    Buf1_5 = product;
    if ( n0x10_1 >= 0x10 )
      Buf1_5 = (void **)product[0];

    sub_18062D700((unsigned __int64 *)&vec_product_18A03F428, Buf1_5, Size);
    type_2 = type;
    if ( n0x10_5 >= 0x10 )
      type_2 = (unsigned __int64 *)type[0];

    sub_18062D700((unsigned __int64 *)&vec_type_18A03F448, type_2, Size_3);
    ::count = count;
    qword_18A2379E0 = v32;
    v64 = &unk_18A2379F0;
    lic_data_2 = lic_data;
    n2_1 = 2i64;
    do
    {
      *v64 = *(_OWORD *)lic_data_2;
      v64[1] = *((_OWORD *)lic_data_2 + 1);
      v64[2] = *((_OWORD *)lic_data_2 + 2);
      v64[3] = *((_OWORD *)lic_data_2 + 3);
      v64[4] = *((_OWORD *)lic_data_2 + 4);
      v64[5] = *((_OWORD *)lic_data_2 + 5);
      v64[6] = *((_OWORD *)lic_data_2 + 6);
      v64 += 8;
      v64[0xFFFFFFFF] = *((_OWORD *)lic_data_2 + 7);
      lic_data_2 += 0x80;
      --n2_1;
    }
    while ( n2_1 );

    product_2 = product;
    v68 = n0x10_1 >= 0x10;
    Buf1_3 = (void **)product[0];
    if ( n0x10_1 >= 0x10 )
      product_2 = (void **)product[0];

    n0x15 = Size;
    if ( Size == 0xC )
    {
      v71 = memcmp(product_2, "Binary Ninja", 0xCui64);
      valid_product_18A2379EA = ::valid_product_18A2379EA;
      if ( !v71 )
        valid_product_18A2379EA = 1;

      ::valid_product_18A2379EA = valid_product_18A2379EA;
    }

    Buf1_1 = product;
    if ( v68 )
      Buf1_1 = Buf1_3;

    if ( n0x15 == 0x15 && !memcmp(Buf1_1, "Binary Ninja Personal", 0x15ui64) )
    {
      if ( !::valid_product_18A2379EA )
      {
        sub_180CC11B0(pExceptionObject_4, &Buf2);
        CxxThrowException(pExceptionObject_4, (_ThrowInfo *)&_TI2_AVruntime_error_std__);
      }

      psub_180981EC0 = (__int64 (__fastcall *)())sub_180981EC0;
      nullsub = (__int64 (__fastcall *)(_QWORD, _QWORD, _QWORD))sub_180904F90;
      if ( !byte_18A2379E8 )
      {
        v148 = 0i64;
        si128.m128i_i64[0] = 0i64;
        si128.m128i_i64[1] = 0xFi64;
        LOBYTE(v148) = 0;
        p_i = 0i64;
        v113.m128i_i64[0] = 3i64;
        v113.m128i_i64[1] = 0xFi64;
        LOWORD(p_i) = *(_WORD *)"RC4";
        WORD1(p_i) = (unsigned __int8)asc_1867A7E04[2];
        v74 = rc4_181894420(&v96, (__int64)&p_i, &v148);
        if ( &rc4 != (void (__fastcall ****)(_QWORD, __int64))v74 )
        {
          rc4_2 = *v74;
          *v74 = 0i64;
          rc4_1 = rc4;
          rc4 = (void (__fastcall ***)(_QWORD, __int64))rc4_2;
          if ( rc4_1 )
            (**rc4_1)(rc4_1, 1i64);
        }

        if ( v96 )
          (**v96)(v96, 1i64);

        if ( v113.m128i_i64[1] >= 0x10ui64 )
        {
          i_4 = (void *)p_i;
          if ( (unsigned __int64)(v113.m128i_i64[1] + 1) >= 0x1000 )
          {
            i_4 = *(void **)(p_i - 8);
            if ( (unsigned __int64)(p_i - (_QWORD)i_4 - 8) > 0x1F )
              invalid_parameter_noinfo_noreturn();
          }

          j_BNFreeDataReferences_0_0(i_4);
        }

        v113.m128i_i64[0] = 0i64;
        v113.m128i_i64[1] = 0xFi64;
        LOBYTE(p_i) = 0;
        if ( si128.m128i_i64[1] >= 0x10ui64 )
        {
          v78 = (void *)v148;
          if ( (unsigned __int64)(si128.m128i_i64[1] + 1) >= 0x1000 )
          {
            v78 = *(void **)(v148 - 8);
            if ( (unsigned __int64)(v148 - (_QWORD)v78 - 8) > 0x1F )
              invalid_parameter_noinfo_noreturn();
          }

          j_BNFreeDataReferences_0_0(v78);
        }

        rc4_3 = (__int64)rc4;
        v80 = sub_1819ADFB0(0x18ui64);
        v97[0] = v80;
        v97[2] = v80 + 0x18;
        v81 = (_BYTE *)v80;
        datarc4_dec_1 = datarc4_dec;
        do
          *v81++ = *datarc4_dec_1++;
        while ( datarc4_dec_1 != count_str );

        v97[1] = v81;
        rc4_set_key_181907DE0(rc4_3, v80, (unsigned __int64)&v81[-v80]);
        if ( v80 )
          error_1819AD2A0(v80);

        ((void (__fastcall *)(void (__fastcall ***)(_QWORD, __int64), void *, void *, __int64))(*rc4)[5])(
          rc4,
          &unk_18A03F4D0,
          &unk_18A03F4D0,
          0x452i64);
        byte_18A2379E8 = 1;
      }

      byte_18A2379E9 = 1;
      if ( (_QWORD)v98 )
      {
        sub_18189A450((void *)v98, v99 - v98, 1i64);
        v98 = 0i64;
        v99 = 0i64;
      }

      if ( sha256 )
        (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)sha256 + 8i64))(sha256, 1i64);

      if ( rc4 )
        (**rc4)(rc4, 1i64);

      if ( lic_data_md5 )
      {
        sub_18189A450(lic_data_md5, v95 - (_QWORD)lic_data_md5, 1i64);
        lic_data_md5 = 0i64;
        v94 = 0i64;
        v95 = 0i64;
      }

      if ( md5 )
        (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)md5 + 8i64))(md5, 1i64);

      sub_1818219B0(v102);
      if ( pubkey_1818D6FC0 )
        (**pubkey_1818D6FC0)(pubkey_1818D6FC0, 1i64);

      pubkey_data_1 = (void *)pubkey_data;
      if ( (_QWORD)pubkey_data )
      {
        if ( (unsigned __int64)(v88 - pubkey_data) >= 0x1000 )
        {
          pubkey_data_1 = *(void **)(pubkey_data - 8);
          if ( (unsigned __int64)(pubkey_data - (_QWORD)pubkey_data_1 - 8) > 0x1F )
            invalid_parameter_noinfo_noreturn();
        }

        j_BNFreeDataReferences_0_0(pubkey_data_1);
        pubkey_data = 0i64;
        v88 = 0i64;
      }

      sub_180C39600((__int64)v150);
      sub_180C39600((__int64)v167);
      sub_180C39600((__int64)v168);
      if ( n0x10_6 >= 0x10 )
        error_1819AD2A0(data[0]);

      v127 = 0i64;
      n0x10_6 = 0xFi64;
      LOBYTE(data[0]) = 0;
      if ( n0x10_5 >= 0x10 )
        error_1819AD2A0(type[0]);

      Size_3 = 0i64;
      n0x10_5 = 0xFi64;
      LOBYTE(type[0]) = 0;
      if ( n0x10_4 >= 0x10 )
        error_1819AD2A0(created[0]);

      v130 = 0i64;
      n0x10_4 = 0xFi64;
      LOBYTE(created[0]) = 0;
      if ( n0x10_3 >= 0x10 )
        error_1819AD2A0(serial[0]);

      Size_1 = 0i64;
      n0x10_3 = 0xFi64;
      LOBYTE(serial[0]) = 0;
      if ( n0x10_2 >= 0x10 )
        error_1819AD2A0(email[0]);

      Size_2 = 0i64;
      n0x10_2 = 0xFi64;
      LOBYTE(email[0]) = 0;
      if ( n0x10_1 >= 0x10 )
        error_1819AD2A0((unsigned __int64)product[0]);

      Size = 0i64;
      n0x10_1 = 0xFi64;
      LOBYTE(product[0]) = 0;
      if ( v147.m128i_i64[1] >= 0x10ui64 )
        error_1819AD2A0(v146);

      v147 = _mm_load_si128((const __m128i *)&xmmword_186773BF0);
      LOBYTE(v146) = 0;
      sub_180680110(v103);
      if ( v19 )
        (**(void (__fastcall ***)(__int64, __int64))v19)(v19, 1i64);

      if ( v92 )
        Mtx_unlock(v91);

      return 1;
    }

    if ( (_QWORD)v98 )
    {
      sub_18189A450((void *)v98, v99 - v98, 1i64);
      v98 = 0i64;
      v99 = 0i64;
    }

    if ( sha256 )
      (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)sha256 + 8i64))(sha256, 1i64);

    if ( rc4 )
      (**rc4)(rc4, 1i64);

    if ( lic_data_md5 )
    {
      sub_18189A450(lic_data_md5, v95 - (_QWORD)lic_data_md5, 1i64);
      lic_data_md5 = 0i64;
      v94 = 0i64;
      v95 = 0i64;
    }

    if ( md5 )
      (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)md5 + 8i64))(md5, 1i64);

    sub_1818219B0(v102);
    if ( pubkey_1818D6FC0 )
      (**pubkey_1818D6FC0)(pubkey_1818D6FC0, 1i64);

    pubkey_data_2 = (void *)pubkey_data;
    if ( (_QWORD)pubkey_data )
    {
      if ( (unsigned __int64)(v88 - pubkey_data) >= 0x1000 )
      {
        pubkey_data_2 = *(void **)(pubkey_data - 8);
        if ( (unsigned __int64)(pubkey_data - (_QWORD)pubkey_data_2 - 8) > 0x1F )
          invalid_parameter_noinfo_noreturn();
      }

      j_BNFreeDataReferences_0_0(pubkey_data_2);
      pubkey_data = 0i64;
      v88 = 0i64;
    }

    sub_180C39600((__int64)v150);
    sub_180C39600((__int64)v167);
    sub_180C39600((__int64)v168);
    if ( n0x10_6 >= 0x10 )
      error_1819AD2A0(data[0]);

    v127 = 0i64;
    n0x10_6 = 0xFi64;
    LOBYTE(data[0]) = 0;
    if ( n0x10_5 >= 0x10 )
      error_1819AD2A0(type[0]);

    Size_3 = 0i64;
    n0x10_5 = 0xFi64;
    LOBYTE(type[0]) = 0;
    if ( n0x10_4 >= 0x10 )
      error_1819AD2A0(created[0]);

    v130 = 0i64;
    n0x10_4 = 0xFi64;
    LOBYTE(created[0]) = 0;
    if ( n0x10_3 >= 0x10 )
      error_1819AD2A0(serial[0]);

    Size_1 = 0i64;
    n0x10_3 = 0xFi64;
    LOBYTE(serial[0]) = 0;
    if ( n0x10_2 >= 0x10 )
      error_1819AD2A0(email[0]);

    Size_2 = 0i64;
    n0x10_2 = 0xFi64;
    LOBYTE(email[0]) = 0;
    if ( n0x10_1 >= 0x10 )
      error_1819AD2A0((unsigned __int64)product[0]);

    sub_18068CF70(v101);
  }

  if ( v147.m128i_i64[1] >= 0x10ui64 )
    error_1819AD2A0(v146);

  v147 = _mm_load_si128((const __m128i *)&xmmword_186773BF0);
  LOBYTE(v146) = 0;
  sub_180680110(v103);
  if ( v19 )
    (**(void (__fastcall ***)(__int64, __int64))v19)(v19, 1i64);

  if ( v92 )
    Mtx_unlock(v91);

  return 0;
}

PK_Verifier_181881660签名验证

使用 加密库Botan

Botan: Botan::PK_Verifier Class Reference

__int64 __fastcall PK_Verifier_181881660(__int64 **a1, __int64 a2, __int64 a3)
{
  // [COLLAPSED LOCAL DECLARATIONS. PRESS KEYPAD CTRL-"+" TO EXPAND]

  v6 = *((_DWORD *)a1 + 2);
  if ( !v6 )
    return (*(__int64 (__fastcall **)(__int64 *))(**a1 + 8))(*a1);

  if ( v6 != 1 )
  {
    sub_180617970(v47, "PK_Verifier: Invalid signature format enum");
    sub_18180DAC0(pExceptionObject_1, v47);
    CxxThrowException(pExceptionObject_1, (_ThrowInfo *)&_TI3_AVInternal_Error_Botan__);
  }

  v27 = 0i64;
  v28 = 0i64;
  v31[0] = 0i64;
  v31[1] = 0xFF00i64;
  *(_OWORD *)v32 = 0i64;
  v33 = 0i64;
  v35 = 0i64;
  v8 = new_186615100(0x28ui64);
  v46 = v8;
  if ( v8 )
    v9 = sub_181809500(v8, a2, a3);
  else
    v9 = 0i64;

  v35 = v9;
  v34 = v9;
  sub_18190C210(v31, v40, 0x10i64);
  if ( !a1[2] || !a1[3] )
    sub_181847CF0(
      (unsigned int)"m_parts != 0 && m_part_size != 0",
      (unsigned int)&Buf2,
      (unsigned int)"check_signature",
      (unsigned int)"C:\\jenkins\\workspace\\ja-stable-multibranch_stable_5.1\\build\\botan\\botan\\botan_all.cpp",
      0x7842);

  v10 = 0i64;
  while ( !(*(unsigned __int8 (__fastcall **)(__int64))(*(_QWORD *)v44 + 0x18i64))(v44) || n0xFF00 != 0xFF00 )
  {
    *(_OWORD *)v36 = 0i64;
    v37 = 0i64;
    v38 = 0xFFFFFFFFFFFFFFFFui64;
    v39 = 1;
    sub_18189C410(v40, v36, 2i64);
    v23 = (_QWORD *)sub_1818AEC70(v47, v36, a1[3]);
    sub_1817E81B0(&v27, *((_QWORD *)&v27 + 1), *v23, v23[1] - *v23);
    v24 = v47[0];
    if ( v47[0] )
    {
      memset(v47[0], 0, v48 - (unsigned __int64)v47[0]);
      free(v24);
      v47[0] = 0i64;
      v47[1] = 0i64;
      v48 = 0i64;
    }

    v10 = (__int64 *)((char *)v10 + 1);
    v25 = v36[0];
    if ( v36[0] )
    {
      memset(v36[0], 0, (v37 - (unsigned __int64)v36[0]) & 0xFFFFFFFFFFFFFFF8ui64);
      free(v25);
    }
  }

  v11 = a1[2];
  if ( v10 != v11 )
  {
    sub_180617970(v47, "PK_Verifier: signature size invalid");
    sub_1818097A0(pExceptionObject, v47);
    CxxThrowException(pExceptionObject, (_ThrowInfo *)&_TI4_AVDecoding_Error_Botan__);
  }

  sub_1818AA420(&v29, &v27, v11, a1[3]);
  v12 = (_BYTE *)v29;
  v13 = *((_QWORD *)&v29 + 1) - v29;
  if ( *((_QWORD *)&v29 + 1) - (_QWORD)v29 != a3 )
    goto LABEL_42;

  v26 = 0;
  if ( v13 )
  {
    v14 = a2 - v29;
    do
    {
      v26 |= *v12 ^ v12[v14];
      ++v12;
      --v13;
    }
    while ( v13 );
  }

  if ( v26 )
  {
LABEL_42:
    sub_180617970(v47, "PK_Verifier: signature is not the canonical DER encoding");
    sub_1818097A0(pExceptionObject_2, v47);
    CxxThrowException(pExceptionObject_2, (_ThrowInfo *)&_TI4_AVDecoding_Error_Botan__);
  }

  v15 = *a1;
  v16 = **a1;
  v17 = (char *)v27;
  v18 = (*(__int64 (__fastcall **)(__int64 *, _QWORD, _QWORD))(v16 + 8))(v15, v27, *((_QWORD *)&v27 + 1) - v27);
  v19 = (void *)v29;
  if ( (_QWORD)v29 )
  {
    if ( (unsigned __int64)(v30 - v29) >= 0x1000 )
    {
      v19 = *(void **)(v29 - 8);
      if ( (unsigned __int64)(v29 - (_QWORD)v19 - 8) > 0x1F )
        invalid_parameter_noinfo_noreturn();
    }

    j_BNFreeDataReferences_0_0(v19);
    v29 = 0i64;
    v30 = 0i64;
  }

  if ( v45 )
    (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v45 + 0x30i64))(v45, 1i64);

  buf_1 = buf;
  if ( buf )
  {
    memset(buf, 0, *((_QWORD *)&v43 + 1) - (_QWORD)buf);
    free(buf_1);
    buf = 0i64;
    v43 = 0i64;
  }

  if ( v35 )
    (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v35 + 0x30i64))(v35, 1i64);

  v21 = v32[0];
  if ( v32[0] )
  {
    memset(v32[0], 0, v33 - (unsigned __int64)v32[0]);
    free(v21);
    *(_OWORD *)v32 = 0i64;
    v33 = 0i64;
  }

  if ( !v17 )
    return v18;

  v22 = v17;
  if ( (unsigned __int64)(v28 - (_QWORD)v17) >= 0x1000 )
  {
    v17 = (char *)*((_QWORD *)v17 + 0xFFFFFFFF);
    if ( (unsigned __int64)(v22 - v17 - 8) > 0x1F )
      invalid_parameter_noinfo_noreturn();
  }

  j_BNFreeDataReferences_0_0(v17);
  return v18;
}

patch

方案一:patch PK_Verifier_181881660

00007FFBE9D41660 | B0 01          | mov al,1                                       | PK_Verifier
00007FFBE9D41662 | C3             | ret                                            |

方案二:patch 内置公钥

内置公钥进行了xor加密,可以针对指定位置进行patch

00007FFBE95A6C0A | C700 74F0F845  | mov dword ptr ds:[rax],45F8F074                |
00007FFBE95A6C10 | C740 04 747FFF | mov dword ptr ds:[rax+4],6EFF7F74              |
00007FFBE95A6C17 | C740 08 6EF4B1 | mov dword ptr ds:[rax+8],E1B1F46E              |
00007FFBE95A6C1E | C740 0C B37FF8 | mov dword ptr ds:[rax+C],66F87FB3              |
00007FFBE95A6C25 | C740 10 4577F9 | mov dword ptr ds:[rax+10],64F97745             |
00007FFBE95A6C2C | C740 14 C673F6 | mov dword ptr ds:[rax+14],67F673C6             |
00007FFBE95A6C33 | C740 18 74F0F8 | mov dword ptr ds:[rax+18],6DF8F074             |
00007FFBE95A6C3A | C740 1C 46F0F8 | mov dword ptr ds:[rax+1C],66F8F046             |
00007FFBE95A6C41 | C740 20 44A495 | mov dword ptr ds:[rax+20],F995A444             |
00007FFBE95A6C48 | C740 24 8CAE7F | mov dword ptr ds:[rax+24],947FAE8C             |
00007FFBE95A6C4F | C740 28 9F1A4B | mov dword ptr ds:[rax+28],DF4B1A9F             |
00007FFBE95A6C56 | C740 2C FB14FC | mov dword ptr ds:[rax+2C],36FC14FB             |
00007FFBE95A6C5D | C740 30 2777DE | mov dword ptr ds:[rax+30],93DE7727             |
00007FFBE95A6C64 | C740 34 A843E0 | mov dword ptr ds:[rax+34],5CE043A8             |
00007FFBE95A6C6B | C740 38 2D06C7 | mov dword ptr ds:[rax+38],86C7062D             |
00007FFBE95A6C72 | C740 3C A22252 | mov dword ptr ds:[rax+3C],D65222A2             |
00007FFBE95A6C79 | C740 40 E6559A | mov dword ptr ds:[rax+40],69A55E6              |
00007FFBE95A6C80 | C740 44 F4717A | mov dword ptr ds:[rax+44],957A71F4             |
00007FFBE95A6C87 | C740 48 791491 | mov dword ptr ds:[rax+48],6D911479             |
00007FFBE95A6C8E | C740 4C 2C6C4A | mov dword ptr ds:[rax+4C],DF4A6C2C             |
00007FFBE95A6C95 | C740 50 983886 | mov dword ptr ds:[rax+50],F6863898             |
00007FFBE95A6C9C | C740 54 1595CB | mov dword ptr ds:[rax+54],91CB9515             |
00007FFBE95A6CA3 | C740 58 90C590 | mov dword ptr ds:[rax+58],490C590              |
00007FFBE95A6CAA | C740 5C 9560D3 | mov dword ptr ds:[rax+5C],E8D36095             |
00007FFBE95A6CB1 | C740 60 1CEB8A | mov dword ptr ds:[rax+60],C8AEB1C              |
00007FFBE95A6CB8 | C740 64 9A0968 | mov dword ptr ds:[rax+64],7B68099A             |
00007FFBE95A6CBF | C740 68 DB58AC | mov dword ptr ds:[rax+68],83AC58DB             |
00007FFBE95A6CC6 | C740 6C 69D87C | mov dword ptr ds:[rax+6C],17CD869              |
00007FFBE95A6CCD | C740 70 8FDFBA | mov dword ptr ds:[rax+70],D9BADF8F             |
00007FFBE95A6CD4 | C740 74 2C69D6 | mov dword ptr ds:[rax+74],5FD6692C             |
00007FFBE95A6CDB | C740 78 513B3A | mov dword ptr ds:[rax+78],253A3B51             |
00007FFBE95A6CE2 | C740 7C B86B08 | mov dword ptr ds:[rax+7C],92086BB8             |
00007FFBE95A6CE9 | C780 80000000  | mov dword ptr ds:[rax+80],33BDA0D7             |
00007FFBE95A6CF3 | C780 84000000  | mov dword ptr ds:[rax+84],CAEE6F30             |
00007FFBE95A6CFD | C780 88000000  | mov dword ptr ds:[rax+88],540F53B6             |
00007FFBE95A6D07 | C780 8C000000  | mov dword ptr ds:[rax+8C],8FB4DEE1             |
00007FFBE95A6D11 | C780 90000000  | mov dword ptr ds:[rax+90],51FB841A             |
00007FFBE95A6D1B | C780 94000000  | mov dword ptr ds:[rax+94],51008A6C             |
00007FFBE95A6D25 | C780 98000000  | mov dword ptr ds:[rax+98],7E9213C8             |
00007FFBE95A6D2F | C780 9C000000  | mov dword ptr ds:[rax+9C],A3FBA50D             |
00007FFBE95A6D39 | C780 A0000000  | mov dword ptr ds:[rax+A0],7AB82F5D             |
00007FFBE95A6D43 | C780 A4000000  | mov dword ptr ds:[rax+A4],7CD66891             |
00007FFBE95A6D4D | C780 A8000000  | mov dword ptr ds:[rax+A8],457A2BC0             |
00007FFBE95A6D57 | C780 AC000000  | mov dword ptr ds:[rax+AC],88A771DD             |
00007FFBE95A6D61 | C780 B0000000  | mov dword ptr ds:[rax+B0],84E7CC2C             |
00007FFBE95A6D6B | C780 B4000000  | mov dword ptr ds:[rax+B4],B85DE039             |
00007FFBE95A6D75 | C780 B8000000  | mov dword ptr ds:[rax+B8],F5A1FD31             |
00007FFBE95A6D7F | C780 BC000000  | mov dword ptr ds:[rax+BC],520FD88C             |
00007FFBE95A6D89 | C780 C0000000  | mov dword ptr ds:[rax+C0],CA5E74E0             |
00007FFBE95A6D93 | C780 C4000000  | mov dword ptr ds:[rax+C4],6446EC0B             |
00007FFBE95A6D9D | C780 C8000000  | mov dword ptr ds:[rax+C8],BDBD7CAF             |
00007FFBE95A6DA7 | C780 CC000000  | mov dword ptr ds:[rax+CC],9742290C             |
00007FFBE95A6DB1 | C780 D0000000  | mov dword ptr ds:[rax+D0],5E014FDC             |
00007FFBE95A6DBB | C780 D4000000  | mov dword ptr ds:[rax+D4],8FF33064             |
00007FFBE95A6DC5 | C780 D8000000  | mov dword ptr ds:[rax+D8],5B238660             |
00007FFBE95A6DCF | C780 DC000000  | mov dword ptr ds:[rax+DC],F290A38D             |
00007FFBE95A6DD9 | C780 E0000000  | mov dword ptr ds:[rax+E0],16A61171             |
00007FFBE95A6DE3 | C780 E4000000  | mov dword ptr ds:[rax+E4],B580C015             |
00007FFBE95A6DED | C780 E8000000  | mov dword ptr ds:[rax+E8],C5413635             |
00007FFBE95A6DF7 | C780 EC000000  | mov dword ptr ds:[rax+EC],854F17DE             |
00007FFBE95A6E01 | C780 F0000000  | mov dword ptr ds:[rax+F0],9A56B9C8             |
00007FFBE95A6E0B | C780 F4000000  | mov dword ptr ds:[rax+F4],B9C6D99F             |
00007FFBE95A6E15 | C780 F8000000  | mov dword ptr ds:[rax+F8],8609B9C0             |
00007FFBE95A6E1F | C780 FC000000  | mov dword ptr ds:[rax+FC],CCD13CBB             |
00007FFBE95A6E29 | C780 00010000  | mov dword ptr ds:[rax+100],AE876B21            |
00007FFBE95A6E33 | C780 04010000  | mov dword ptr ds:[rax+104],AA8470B9            |
00007FFBE95A6E3D | C780 08010000  | mov dword ptr ds:[rax+108],E7D1873E            |
00007FFBE95A6E47 | C780 0C010000  | mov dword ptr ds:[rax+10C],12CB66FB            |
00007FFBE95A6E51 | C780 10010000  | mov dword ptr ds:[rax+110],E5FE5D3C            |
00007FFBE95A6E5B | C780 14010000  | mov dword ptr ds:[rax+114],20C27687            |
00007FFBE95A6E65 | C780 18010000  | mov dword ptr ds:[rax+118],5B4F7646            |
00007FFBE95A6E6F | C780 1C010000  | mov dword ptr ds:[rax+11C],C8828E04            |
00007FFBE95A6E79 | C780 20010000  | mov dword ptr ds:[rax+120],66FA7077            |
00007FFBE95A6E83 | C780 24010000  | mov dword ptr ds:[rax+124],67F97344            |
00007FFBE95A6E8D | 0F57C0         | xorps xmm0,xmm0                                |
00007FFBE95A6E90 | F3:0F7F4424 40 | movdqu xmmword ptr ss:[rsp+40],xmm0            |
00007FFBE95A6E96 | 4C:896C24 50   | mov qword ptr ss:[rsp+50],r13                  |
00007FFBE95A6E9B | 49:8BF5        | mov rsi,r13                                    |
00007FFBE95A6E9E | 66:90          | nop                                            |
00007FFBE95A6EA0 | 48:81FE 260100 | cmp rsi,126                                    |
00007FFBE95A6EA7 | 73 5F          | jae binaryninjacore.7FFBE95A6F08               |
00007FFBE95A6EA9 | 48:8BC6        | mov rax,rsi                                    |
00007FFBE95A6EAC | 48:C1E8 02     | shr rax,2                                      |
00007FFBE95A6EB0 | 8B1483         | mov edx,dword ptr ds:[rbx+rax*4]               |
00007FFBE95A6EB3 | 81F2 4472F967  | xor edx,67F97244                               |
00007FFBE95A6EB9 | 40:0FB6CE      | movzx ecx,sil                                  |
00007FFBE95A6EBD | 80E1 03        | and cl,3                                       |
00007FFBE95A6EC0 | C0E1 03        | shl cl,3                                       |
00007FFBE95A6EC3 | D3EA           | shr edx,cl                                     |
00007FFBE95A6EC5 | 885424 30      | mov byte ptr ss:[rsp+30],dl                    |
00007FFBE95A6EC9 | 48:8B4424 48   | mov rax,qword ptr ss:[rsp+48]                  |
00007FFBE95A6ECE | 48:3B4424 50   | cmp rax,qword ptr ss:[rsp+50]                  |
00007FFBE95A6ED3 | 74 14          | je binaryninjacore.7FFBE95A6EE9                |
00007FFBE95A6ED5 | 8810           | mov byte ptr ds:[rax],dl                       |
00007FFBE95A6ED7 | 48:FF4424 48   | inc qword ptr ss:[rsp+48]                      |
00007FFBE95A6EDC | 48:FFC6        | inc rsi                                        |
00007FFBE95A6EDF | 48:8BBC24 C800 | mov rdi,qword ptr ss:[rsp+C8]                  |
00007FFBE95A6EE7 | EB B7          | jmp binaryninjacore.7FFBE95A6EA0               |
00007FFBE95A6EE9 | 4C:8D4424 30   | lea r8,qword ptr ss:[rsp+30]                   |
00007FFBE95A6EEE | 48:8BD0        | mov rdx,rax                                    |
00007FFBE95A6EF1 | 48:8D4C24 40   | lea rcx,qword ptr ss:[rsp+40]                  |
00007FFBE95A6EF6 | E8 45F0FFFF    | call binaryninjacore.7FFBE95A5F40              |
00007FFBE95A6EFB | 48:FFC6        | inc rsi                                        |
00007FFBE95A6EFE | 48:8BBC24 C800 | mov rdi,qword ptr ss:[rsp+C8]                  |
00007FFBE95A6F06 | EB 98          | jmp binaryninjacore.7FFBE95A6EA0               |
00007FFBE95A6F08 | 48:8BCB        | mov rcx,rbx                                    |
00007FFBE95A6F0B | E8 BCF15205    | call binaryninjacore.7FFBEEAD60CC              |
00007FFBE95A6F10 | 48:8D4C24 40   | lea rcx,qword ptr ss:[rsp+40]                  |内置公钥
00007FFBE95A6F15 | E8 A6007F00    | call <binaryninjacore.import_key>              |load_pubkey_1818D6FC0
00007FFBE95A6F1A | 48:8BD8        | mov rbx,rax                                    |

或者hook load_pubkey_1818D6FC0 ,动态修改公钥

py


import base64
import hashlib
import json
import random
from Crypto.Cipher import ARC4
from Crypto.PublicKey import RSA
from Crypto.Signature import pkcs1_15
from Crypto.Util.number import long_to_bytes,bytes_to_long
from Crypto.Hash import SHA256
from datetime import datetime, timezone

def get_time_str():
    # 获取当前 UTC 时间并格式化为 ISO 字符串
    utc_now = datetime.now(timezone.utc)
    iso_str = utc_now.isoformat(timespec='milliseconds')  # 保留毫秒精度

    # print(iso_str)  # 输出类似:2025-07-04T19:59:19.123+00:00
    return iso_str

def gen_licdata():
    randdata=random.randbytes(0x100)
    k=hashlib.md5(randdata).digest()
    rc4=ARC4.new(key=k)
    #从 AMPED Keygen  中拷贝,可能与更新相关  
    # (nj后面将9C2AAA09A4E2252B0BA125DB1E1CD272207D97CCA8446899 设置为key(key长度0x18)解密byte_18A03F4D0[0x452])
    rc4data=bytes.fromhex('9C2AAA09A4E2252B0BA125DB1E1CD272207D97CCA8446899')
    encdta=rc4.encrypt(rc4data)
    # print('rc4enc:',encdta.hex())

    ret=base64.standard_b64encode(randdata+encdta)
    # print('data:',ret)
    return ret
def gen_signature(msg,pri_data=bytes.fromhex('''308204A30201000282010100D2BF8069B298618B54272B13CE402C37826D906FA0DB47C916E304D61CFE847306AD1763A332A6FACBEF133DE5E634B333739EFFFE9F7513F7C38CDF4EB7CE27B56B728424F9410DB4CD3AB33D2A367123470D62324211876D83C15B59FB7A4D5A74E56F9E443DBEFF30289D3E4F84E58E6AB23AD4F43870034605E68EDF1FF90256AA027C6102981B8A7742C3DCFC536A4D98C4E22702F2BFFDE2985E232A2446D5750E20EDD27E59FA2475CFF2882CA33347209F62DED6965D85B03BDE6E02B99F680F33B7DC08F8730C0BCE62256FCA5613213A1182C00A36A9D496629D15C1B604550F97388C2DFD60CC8DC15CF5D61A829167CE07F9798168C92D6037470203010001028201005BC7FDC74A79D58565C5571BDD87921A2CA9C5ACEFCB7FD4622CC536F052A1E12C67A6978483F337A727FBE3C9A33B914D978D87E45E9290FB26C54B9D4F2C2F9BF16AE284EDAE78A72477EB867843547B6E1EB484B9C4438C1CC4D1217B855479D00DF9D1DDDB5C3A6BC14C55CE30CCFE7C96194C13FE1E3E36B92C234DA5F0B362663B5B353949FF83F3987080A20326CC8A4FC5E51FF5A91026BB72F1BF4EAA5EB893892E2AC6FEB828EC2D093F992589D7EDEE5DA8EA94C6F8EA61E1FF1D3686EE2B97859E0123CF438F457C97860C04263380EE82C84DB0CADCE121C93F5AD1EB0A802C7ABFF14B4265805CAC6C37F4BF4E17B034E29F3DE64EA98450CD02818100FFDC7E6D1275D1956316116CD79CD5A44F76A6284DD3C35E5A607C1C612D454BFB94DFF5EE63DDB695C8E3A9E398D188A25100959C632DBD3A23FC31F975484D1531151AA7CD6711C960018E366F1507FEB787757464F7E2F05AD097DAD9C8D34BAB3BD584948C7DABD750B3F9B651C3FCDE7133232CA2228F7880410A7FC89502818100D2DCBF521CC7FC91AE554A7ADE811CA07356C50227EC07A4DB06A2B681E29CA8F4D54A7D40D7DFAA38A1B6F03D9E4ACFBEF7C7AC45A6496C94BFD8FA0FB1C2528097AAACFDD0FAA5C9CD42A010018CB04A488A6437B5F4328B30D2FBE9290AA3C9937DD1DB92DFAE4431FC690B7EF879FFDDBAD9D3784A5869C6D8039B249D6B028181009A9EF0540FE4DD7C2EBE2657A5512516BFE2CEF4EA5B7FE4642F8CB145D4AADD093365C8E480BB7ADCB7E34546C29255C4E9B8B5B1258A7DA1461FE13F84ADE5CF59B30C41BDF27CA03A819624B52A7B8365FBD97236964B31BF5FF1751349B6CF32B2DD0CDB0CAFE18A243E2F390BDEA9D0EF8DDCC2DB5491695BF0725CD8A50281802101306917DC2DAA57D13DD131969FF67557358AFAD8B4F196DED9051C1B6E4DFBD48ECE402209FE48D2F7216F63A16E17040D9AE763F9C6271A484A0BBED51DB8C7048E03447C970A99383E7982E4948B6C034D6072F88018CD5198E08BEE006902CF04D40B8F3B65AD3546F3E7B1D8D6B5CC13604849CAC0F3C0C7FFB6A175028180616C870F1920FD24DEBE793A273591CB3E858962A9A93022AF36FB15CEF57F3C3EE101F1A8AF206DF757EC7A7EBD99D7E1C5B18870EB8B66E78F3FA005E4431D71B25F350103C2E68BC4474DF3BDAC57F8D9327304C65E5069DDB25C178615D1A3B264B22B8826E33D21F4CD50433FD6210ED5699741FB219E75F6DD8F5DB714''')):
    if isinstance(msg,str):
        msg=msg.encode()
    prik=RSA.import_key(pri_data)
    # print('kg d:',prik.d)
    # print('kg n:',prik.n)
    # print('kg e:',prik.e)
    sig=pkcs1_15.new(prik)
    signature=sig.sign(SHA256.new(msg))
    ret=base64.standard_b64encode(signature)
    return ret
def kg(count:int,email:str,serial_hexstr:str=random.randbytes(0x10).hex()):
    lic={}
    lic["product"]= "Binary Ninja Personal"
    lic["email"]= email
    lic["serial"]= serial_hexstr
    lic["created"]=get_time_str()
    lic["type"]= "User"
    lic["count"]=count
    lic["data"]=gen_licdata().decode()
    msg='\x00'.join((lic["product"],lic["email"],lic["serial"],lic["created"],lic["type"],str(lic["count"]),lic["data"]))
    lic["signature"]= gen_signature(msg).decode()
    
    s=json.dumps(lic,indent=0)
    lic_text='[\n%s\n]'%s
    return lic_text

def nj_xor(data:bytes,xor_key=bytes([0x44,0x72,0xf9,0x67])):
    result=[]
    for i, byte_val in enumerate(data):
        xor_byte = xor_key[i % 4]
        processed_byte = byte_val ^ xor_byte
        result.append(processed_byte)
    return bytes(result)

def print_rsakey_info():
    #公私密钥拷贝自 AMPED Keygen
    pri_data=bytes.fromhex('''308204A30201000282010100D2BF8069B298618B54272B13CE402C37826D906FA0DB47C916E304D61CFE847306AD1763A332A6FACBEF133DE5E634B333739EFFFE9F7513F7C38CDF4EB7CE27B56B728424F9410DB4CD3AB33D2A367123470D62324211876D83C15B59FB7A4D5A74E56F9E443DBEFF30289D3E4F84E58E6AB23AD4F43870034605E68EDF1FF90256AA027C6102981B8A7742C3DCFC536A4D98C4E22702F2BFFDE2985E232A2446D5750E20EDD27E59FA2475CFF2882CA33347209F62DED6965D85B03BDE6E02B99F680F33B7DC08F8730C0BCE62256FCA5613213A1182C00A36A9D496629D15C1B604550F97388C2DFD60CC8DC15CF5D61A829167CE07F9798168C92D6037470203010001028201005BC7FDC74A79D58565C5571BDD87921A2CA9C5ACEFCB7FD4622CC536F052A1E12C67A6978483F337A727FBE3C9A33B914D978D87E45E9290FB26C54B9D4F2C2F9BF16AE284EDAE78A72477EB867843547B6E1EB484B9C4438C1CC4D1217B855479D00DF9D1DDDB5C3A6BC14C55CE30CCFE7C96194C13FE1E3E36B92C234DA5F0B362663B5B353949FF83F3987080A20326CC8A4FC5E51FF5A91026BB72F1BF4EAA5EB893892E2AC6FEB828EC2D093F992589D7EDEE5DA8EA94C6F8EA61E1FF1D3686EE2B97859E0123CF438F457C97860C04263380EE82C84DB0CADCE121C93F5AD1EB0A802C7ABFF14B4265805CAC6C37F4BF4E17B034E29F3DE64EA98450CD02818100FFDC7E6D1275D1956316116CD79CD5A44F76A6284DD3C35E5A607C1C612D454BFB94DFF5EE63DDB695C8E3A9E398D188A25100959C632DBD3A23FC31F975484D1531151AA7CD6711C960018E366F1507FEB787757464F7E2F05AD097DAD9C8D34BAB3BD584948C7DABD750B3F9B651C3FCDE7133232CA2228F7880410A7FC89502818100D2DCBF521CC7FC91AE554A7ADE811CA07356C50227EC07A4DB06A2B681E29CA8F4D54A7D40D7DFAA38A1B6F03D9E4ACFBEF7C7AC45A6496C94BFD8FA0FB1C2528097AAACFDD0FAA5C9CD42A010018CB04A488A6437B5F4328B30D2FBE9290AA3C9937DD1DB92DFAE4431FC690B7EF879FFDDBAD9D3784A5869C6D8039B249D6B028181009A9EF0540FE4DD7C2EBE2657A5512516BFE2CEF4EA5B7FE4642F8CB145D4AADD093365C8E480BB7ADCB7E34546C29255C4E9B8B5B1258A7DA1461FE13F84ADE5CF59B30C41BDF27CA03A819624B52A7B8365FBD97236964B31BF5FF1751349B6CF32B2DD0CDB0CAFE18A243E2F390BDEA9D0EF8DDCC2DB5491695BF0725CD8A50281802101306917DC2DAA57D13DD131969FF67557358AFAD8B4F196DED9051C1B6E4DFBD48ECE402209FE48D2F7216F63A16E17040D9AE763F9C6271A484A0BBED51DB8C7048E03447C970A99383E7982E4948B6C034D6072F88018CD5198E08BEE006902CF04D40B8F3B65AD3546F3E7B1D8D6B5CC13604849CAC0F3C0C7FFB6A175028180616C870F1920FD24DEBE793A273591CB3E858962A9A93022AF36FB15CEF57F3C3EE101F1A8AF206DF757EC7A7EBD99D7E1C5B18870EB8B66E78F3FA005E4431D71B25F350103C2E68BC4474DF3BDAC57F8D9327304C65E5069DDB25C178615D1A3B264B22B8826E33D21F4CD50433FD6210ED5699741FB219E75F6DD8F5DB714''')
    pub_data=bytes.fromhex('''30820122300D06092A864886F70D01010105000382010F003082010A0282010100D2BF8069B298618B54272B13CE402C37826D906FA0DB47C916E304D61CFE847306AD1763A332A6FACBEF133DE5E634B333739EFFFE9F7513F7C38CDF4EB7CE27B56B728424F9410DB4CD3AB33D2A367123470D62324211876D83C15B59FB7A4D5A74E56F9E443DBEFF30289D3E4F84E58E6AB23AD4F43870034605E68EDF1FF90256AA027C6102981B8A7742C3DCFC536A4D98C4E22702F2BFFDE2985E232A2446D5750E20EDD27E59FA2475CFF2882CA33347209F62DED6965D85B03BDE6E02B99F680F33B7DC08F8730C0BCE62256FCA5613213A1182C00A36A9D496629D15C1B604550F97388C2DFD60CC8DC15CF5D61A829167CE07F9798168C92D6037470203010001''')
    # nj_pubkeydata=bytes.fromhex('''30820122300D06092A864886F70D01010105000382010F003082010A0282010100D66C9EC8DC86F3DB68B2B8BF660551630527F4EC31193B69743EE1E650ABB1A2276361B00383F23D66680A681EB3B8DC4A7F9151E732F6D4B76963D1122A8F5899736BDE7B911C9F2A55E42DAA8566CBAD43BE681B2F381549C342FC19F1F593D24454741D17ADF221F633A5AC4DE85EF6023628F8F9368C616B1949D702C4195D411DD51A2F1B8459832299035EEF68BE1EE37D92A4DF758F5892C8AAF635A406A7AD4F9EBF03EB0E44DA485BBBF0983DF83920420AE824F4DA3CC9D1699535635F7151B279D27144B8A29A65B6E28CCBAFFDDBAB3FDE84CBF0E1FF4E28AB65197EC9FD027DCD7AF52880BF143275782F0782C3043B470204B63C40FC7BAF330203010001''')

    # xor key 0x67F97244
    nj_pubkey_xordata=bytes.fromhex('''74f0f845747fff6e6ef4b1e1b37ff8664577f964c673f66774f0f86d46f0f86644a495f98cae7f949f1a4bdffb14fc362777de93a843e05c2d06c786a22252d6e6559a06f4717a957914916d2c6c4adf983886f61595cb9190c590049560d3e81ceb8a0c9a09687bdb58ac8369d87c018fdfbad92c69d65f513b3a25b86b0892d7a0bd33306feecab6530f54e1deb48f1a84fb516c8a0051c813927e0da5fba35d2fb87a9168d67cc02b7a45dd71a7882ccce78439e05db831fda1f58cd80f52e0745eca0bec4664af7cbdbd0c294297dc4f015e6430f38f6086235b8da390f27111a61615c080b5353641c5de174f85c8b9569a9fd9c6b9c0b90986bb3cd1cc216b87aeb97084aa3e87d1e7fb66cb123c5dfee58776c22046764f5b048e82c87770fa664473f967''')
    nj_pubkeydata=nj_xor(nj_pubkey_xordata)[:0x126]

    nj_pubk=RSA.import_key(nj_pubkeydata)
    print('nj e:',nj_pubk.e)
    print('nj n:',nj_pubk.n)
    print('\n\n')

    pub_key=RSA.import_key(pub_data)
    print('kg e:',pub_key.e)
    print('kg n:',pub_key.n)
    print('\n\n')

    prik=RSA.import_key(pri_data)
    print('kg d:',prik.d)
    print('kg n:',prik.n)
    print('kg e:',prik.e)
    pass








if __name__=='__main__':
    #print_rsakey_info()
    lic_path='license.dat'
    save=True

    count=123
    email="ikun@ikunkun.com"
    text=kg(count,email)
    print('lic==>')
    print(text)
    if save:
        with open(lic_path,'w',encoding='utf8') as f:
            f.write(text)



ps

[Default] Failed to get update info: Update authentication failed: License not found.

更新是指定不可用的不继续分析

image-20250801142648679

image-20250801142753131

posted @ 2025-08-01 15:08  DirWangK  阅读(1127)  评论(1)    收藏  举报