Advertisement
Guest User

Untitled

a guest
Apr 14th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.58 KB | None | 0 0
  1. bool __fastcall AccountManager_GetDefaultAccountOldCredentials_sub_CF33C(int a1, int readnormal, int accountName_ARG_a3, std_string *passwordHash_ARG_a4, std_string *refreshToken_attr2_ARG_a5, int refreshTokenExpiration_attr12_ARG_a6, std_string *skypeToken_attr6_ARG_a7, int skypeTokenExpiration_attr7_ARG_a8, __int64 *partnerId_attr3_ARG_a9)
  2. {
  3.   _BYTE *v11; // r0
  4.   int v12; // r0
  5.   int v13; // r3
  6.   int v14; // r5
  7.   int v15; // r0
  8.   int v16; // r11
  9.   int (__fastcall *v17)(int, int *); // r9
  10.   int v18; // r0
  11.   int v19; // r0
  12.   int v20; // r0
  13.   int v21; // r5
  14.   int v22; // r11
  15.   std_string *v23; // r3
  16.   int v24; // r2
  17.   int v25; // r1
  18.   int v26; // r3
  19.   _BOOL4 v27; // r6
  20.   int v28; // r6
  21.   int v29; // r5
  22.   int v30; // r4
  23.   char *v31; // r0
  24.   int v32; // r10
  25.   char *v33; // r0
  26.   unsigned int v34; // r3
  27.   int v35; // r0
  28.   char *genkey; // r0 MAPDST
  29.   int v38; // r1
  30.   __int64 a5; // r0
  31.   unsigned int Length; // r9
  32.   int Buffer; // r4
  33.   spl *v42; // r0
  34.   int v43; // r0
  35.   const std::string **v44; // r0
  36.   int v45; // r8
  37.   int v46; // r8
  38.   int CRC32_v47; // r3
  39.   _BYTE *v48; // r2
  40.   int v49; // r4
  41.   spl *v50; // r0
  42.   spl *v51; // r0
  43.   std_string *a2; // [sp+34h] [bp+24h]
  44.   int MemBuffer; // [sp+34h] [bp+24h]
  45.   int v57; // [sp+38h] [bp+28h]
  46.   char *Account_v58; // [sp+3Ch] [bp+2Ch]
  47.   int buf_v61; // [sp+40h] [bp+30h]
  48.   size_t MemLength; // [sp+44h] [bp+34h]
  49.   MEMORY mem; // [sp+48h] [bp+38h]
  50.   MEMORY str; // [sp+50h] [bp+40h]
  51.   int XXX_mem_v76; // [sp+58h] [bp+48h]
  52.   void **XXX_v74; // [sp+5Ch] [bp+4Ch]
  53.   int v65; // [sp+60h] [bp+50h]
  54.   int XXX_v76; // [sp+160h] [bp+150h]
  55.   int v67; // [sp+164h] [bp+154h]
  56.   int v68; // [sp+168h] [bp+158h]
  57.   rollover_counter_t v69; // [sp+170h] [bp+160h]
  58.   int bufv72; // [sp+18Ch] [bp+17Ch]
  59.  
  60.   v11 = (_BYTE *)std_string_sub_B5930((std_string *)accountName_ARG_a3);
  61.   v12 = sub_CE67C(a1, v11);
  62.   v13 = *(unsigned __int8 *)(v12 + 4);
  63.   if ( !*(_BYTE *)(v12 + 4) )
  64.   {
  65.     mem.Ptr = *(unsigned __int8 *)(v12 + 4);
  66.     mem.Size = v13;
  67.     if ( readnormal )
  68.     {
  69.       v42 = *(spl **)(a1 + 0x10);
  70.       v57 = (int)&std::string::_Rep::_S_empty_rep_storage + 12;
  71.       Account_v58 = (char *)&std::string::_Rep::_S_empty_rep_storage + 12;
  72.       v43 = get_sub_C2BD4(v42);
  73.       v44 = (const std::string **)(*(int (__fastcall **)(int))(*(_DWORD *)v43 + 40))(v43);
  74.       sub_B599C((std::string **)&buf_v61, v44);
  75.       v45 = dword_551684;
  76.       if ( *(_DWORD *)dword_551684 <= 70 )
  77.       {
  78.         XXX_mem_v76 = 2;
  79.         MemLength = 2;
  80.         str.Ptr = 1;
  81.         sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
  82.         sub_CF218(v57, (int)&XXX_mem_v76, &MemLength, &str);
  83.         auf::LogComponent::log(v45, 0x14046, 0xAA599B98, "%s: missing coexistence creds, err: %s\n", &XXX_mem_v76);
  84.       }
  85.       std_string_dtor_X_sub_B5878((int)&buf_v61);
  86.       std::string::~string((std_string *)&Account_v58);
  87.       std::string::~string((std_string *)&v57);
  88.     }
  89.     else
  90.     {
  91.       v16 = GetConfig_sub_B5060(*(_DWORD *)(a1 + 16));
  92.       v17 = *(int (__fastcall **)(int, int *))(*(_DWORD *)v16 + 20);
  93.       std::string::string(&XXX_mem_v76, &byte_40A147, &str);
  94.       v18 = v17(v16, &XXX_mem_v76);
  95.       (*(void (__fastcall **)(char **, int, const char *))(*(_DWORD *)v18 + 8))(
  96.         &Account_v58,
  97.         v18,
  98.         "*Lib/Account/Default");
  99.       std::string::~string((std_string *)&XXX_mem_v76);
  100.       std_string_ctor_sub_B5850(&buf_v61);
  101.       if ( sub_B59E8((int)&Account_v58) )
  102.       {
  103.         XXX_mem_v76 = 0;
  104.         XXX_v74 = 0;
  105.         v19 = *(_DWORD *)(a1 + 16);
  106.         v65 = 0;
  107.         v20 = GetConfig_sub_B5060(v19);
  108.         (*(void (__fastcall **)(int, int *))(*(_DWORD *)v20 + 32))(v20, &XXX_mem_v76);
  109.         if ( v65 )
  110.         {
  111.           v21 = XXX_mem_v76;
  112.           v22 = XXX_mem_v76 + 4 * v65;
  113.           while ( 1 )
  114.           {
  115.             v23 = (std_string *)v21;
  116.             if ( v21 == v22 )
  117.               break;
  118.             v24 = v21;
  119.             v21 += 4;
  120.             a2 = v23;
  121.             Credentials3_sub_CF2CC((std_string *)&str, *(_DWORD *)(a1 + 16), v24);
  122.             std_string_sub_B5944((std_string *)&buf_v61, (std_string *)&str);
  123.             std_string_dtor_X_sub_B5878((int)&str);
  124.             if ( !sub_B59E8((int)&buf_v61) )
  125.             {
  126.               std_string_sub_B5944((std_string *)&Account_v58, a2);
  127.               break;
  128.             }
  129.           }
  130.         }
  131.         while ( 1 )
  132.         {
  133.           v25 = v65;
  134.           v26 = --v65;
  135.           if ( !v25 )
  136.             break;
  137.           std_string_dtor_X_sub_B5878(XXX_mem_v76 + 4 * v26);
  138.         }
  139.         MEMORY_SetSize_sub_B434A((MEMORY *)&XXX_mem_v76, 0);
  140.         ++v65;
  141.         MEMORY_dtor_sub_B46E0((int)&XXX_mem_v76);
  142.       }
  143.       else
  144.       {
  145.         Credentials3_sub_CF2CC((std_string *)&XXX_mem_v76, *(_DWORD *)(a1 + 16), (int)&Account_v58);
  146.         std_string_sub_B5944((std_string *)&buf_v61, (std_string *)&XXX_mem_v76);
  147.         std_string_dtor_X_sub_B5878((int)&XXX_mem_v76);
  148.       }
  149.       v27 = sub_B59E8((int)&buf_v61);
  150.       if ( !v27 )
  151.       {
  152.         v29 = dword_551684;
  153.         if ( *(_DWORD *)dword_551684 <= 50 )
  154.         {
  155.           MemLength = 2;
  156.           str.Ptr = 1;
  157.           XXX_mem_v76 = 1;
  158.           sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
  159.           auf::LogComponent::log(v29, 79410, 1053985249, "%s: found credentials for default user\n", &XXX_mem_v76);
  160.         }
  161.         v30 = std_string_sub_B5930((std_string *)&buf_v61) + 2;
  162.         while ( 1 )
  163.         {
  164.           v31 = strchr("0123456789ABCDEF", *(unsigned __int8 *)(v30 - 2));
  165.           if ( !v31 )
  166.             break;
  167.           v32 = v31 - "0123456789ABCDEF";
  168.           if ( v31 - "0123456789ABCDEF" > 15 )
  169.             break;
  170.           v33 = strchr("0123456789ABCDEF", *(unsigned __int8 *)(v30 - 1));
  171.           if ( !v33 )
  172.             break;
  173.           v35 = v33 - "0123456789ABCDEF";
  174.           v30 += 2;
  175.           if ( v35 > 15 )
  176.             break;
  177.           LOBYTE(XXX_mem_v76) = v35 + 16 * v32;
  178.           MEMORY_sub_3B2010(&mem, (unsigned int)&XXX_mem_v76, (char *)&unk_00000001, v34);
  179.         }
  180.         str.Ptr = 0;
  181.         str.Size = 0;
  182.         if ( loadCryptedToken_sub_B7C32((int)"skype", 0, (int)&str) )
  183.         {
  184.           genkey = (char *)operator new[](0x20u);
  185.           XXX_mem_v76 = (int)&userpacket_crypto_context_t_off_500FF0;
  186.           XXX_v74 = &XXXXXXXXX_off_501010;
  187.           XXX_v76 = (int)&XXXXXXXXX_off_50101C;
  188.           seq_sub_3B508C((int)&XXX_v74);
  189.           rollover_counter_t_sub_3B3FF2(&v69, v38, 0LL);
  190.           v68 = 0;
  191.           v67 = 0;
  192.           userpacket_crypto_context_t_generate_key_sub_3B4FC4(genkey, 0x20u, (const void *)str.Ptr, str.Size);
  193.           memset((void *)str.Ptr, 0, str.Size);
  194.           MEMORY_SetSize_sub_B434A(&str, 0);
  195.           (*(void (__fastcall **)(int *, char *))(XXX_v76 + 8))(&XXX_v76, genkey);
  196.           v67 = 0;
  197.           v68 = 0;
  198.           MemLength = mem.Size;
  199.           MemBuffer = mem.Ptr;
  200.           if ( mem.Size > 1u )
  201.           {
  202.             a5 = rollover_counter_t_process_recv_packet_sub_3B4038(
  203.                    (int)&v69,
  204.                    (const char *)&v69,
  205.                    mem.Ptr,
  206.                    (int *)&MemLength);
  207.             Rijndael_crypt_buf_sub_3B5092((int)&XXX_v74, MemBuffer, MemLength, v68, a5, 0, v68);
  208.           }
  209.           else
  210.           {
  211.             MemLength = 0;
  212.           }
  213.           MEMORY_SetSize_sub_3B1FF4(&mem, MemLength);
  214.           memset(genkey, 0, 0x20u);
  215.           operator delete[](genkey);
  216.         }
  217.         std_string_sub_B5944((std_string *)accountName_ARG_a3, (std_string *)&Account_v58);
  218.         MEMORY_dtor_sub_B46E0((int)&str);
  219.         std_string_dtor_X_sub_B5878((int)&buf_v61);
  220.         std_string_dtor_X_sub_B5878((int)&Account_v58);
  221.         Length = mem.Size;
  222.         Buffer = mem.Ptr;
  223.         if ( mem.Size <= 144u )                 // CHECK SIZE
  224.         {
  225.           v46 = dword_551684;
  226.           if ( *(_DWORD *)dword_551684 <= 70 )
  227.           {
  228.             XXX_mem_v76 = 1;
  229.             MemLength = 2;
  230.             str.Ptr = 1;
  231.             sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
  232.             auf::LogComponent::log(
  233.               v46,
  234.               84806,
  235.               1888273893,
  236.               "%s: not enough data to retrieve password hash\n",
  237.               &XXX_mem_v76);
  238.           }
  239.         }
  240.         else
  241.         {
  242.           XXX_mem_v76 = mem.Ptr;
  243.           XXX_v74 = (void **)&unk_00000010;
  244.           rt::BASE64::encode((int)&Account_v58, mem.Ptr, 0x10);
  245.           std_string_sub_B5898((int)passwordHash_ARG_a4, (int)Account_v58);//
  246.                                                 //
  247.           XXX_mem_v76 = -1;                     // CRC32 = -1;
  248.           spl::memcpy_s(&bufv72, 0x10u, (const void *)Buffer, 0x10u);
  249.           CRC32_sub_3B0A50((int)&XXX_mem_v76, (int)&bufv72, 0x10);
  250.           CRC32_v47 = XXX_mem_v76;
  251.           v48 = (_BYTE *)(Buffer + 0x10);
  252.           do
  253.           {
  254.             CRC32_v47 = 0x10DCD * CRC32_v47 + 0x4271;
  255.             *v48++ ^= HIBYTE(CRC32_v47);
  256.           }
  257.           while ( v48 != (_BYTE *)(Buffer + Length) );//
  258.                                                 //
  259.           if ( _byteswap_ulong(*(_DWORD *)(Buffer + 0x10)) == 0x140 )// SIG
  260.           {
  261.             if ( Length >= 340 )
  262.             {
  263.               buf_v61 = Buffer + 340;
  264.               MemLength = Length - 340;
  265.               v65 = 0;
  266.               XXX_v74 = 0;
  267.               XXX_mem_v76 = 0;
  268.               str.Ptr = 307200;
  269.               if ( AttributeContainer_Deserialize_sub_3B3BF4(
  270.                      (int)&XXX_mem_v76,
  271.                      (int)&buf_v61,
  272.                      (int)&MemLength,
  273.                      0,
  274.                      8,
  275.                      &str) )
  276.               {
  277.                 v50 = AttributeContainer_GetOptString_sub_3B35CC((int)&XXX_mem_v76, 2, (int)&byte_40A147);
  278.                 std_string_sub_B5898((int)refreshToken_attr2_ARG_a5, (int)v50);
  279.                 *(_DWORD *)refreshTokenExpiration_attr12_ARG_a6 = AttributeContainer_GetInteger_sub_3B3430(
  280.                                                                     &XXX_mem_v76,
  281.                                                                     12,
  282.                                                                     0);
  283.                 v51 = AttributeContainer_GetOptString_sub_3B35CC((int)&XXX_mem_v76, 6, 0);
  284.                 std_string_sub_B5898((int)skypeToken_attr6_ARG_a7, (int)v51);
  285.                 *(_DWORD *)skypeTokenExpiration_attr7_ARG_a8 = AttributeContainer_GetInteger_sub_3B3430(
  286.                                                                  &XXX_mem_v76,
  287.                                                                  7,
  288.                                                                  0);
  289.                 *partnerId_attr3_ARG_a9 = AttributeContainer_GetInt64_sub_3B344A(&XXX_mem_v76, 3, 0, 0, 0);
  290.               }
  291.               sub_3B37DA((int)&XXX_mem_v76);
  292.             }
  293.             v27 = 1;
  294.           }
  295.           else
  296.           {
  297.             v49 = dword_551684;
  298.             if ( *(_DWORD *)dword_551684 <= 70 )
  299.             {
  300.               MemLength = 2;
  301.               XXX_mem_v76 = 1;
  302.               str.Ptr = 1;
  303.               sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
  304.               auf::LogComponent::log(v49, 87622, -36233036, "%s: credentials decryption failed\n", &XXX_mem_v76);
  305.             }
  306.           }
  307.           std::string::~string((std_string *)&Account_v58);
  308.         }
  309.         goto LABEL_50;
  310.       }
  311.       v28 = dword_551684;
  312.       if ( *(_DWORD *)dword_551684 <= 60 )
  313.       {
  314.         MemLength = 2;
  315.         XXX_mem_v76 = 1;
  316.         str.Ptr = 1;
  317.         sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
  318.         auf::LogComponent::log(
  319.           v28,
  320.           (int)&unk_0001333C,
  321.           0x2AE492BC,
  322.           "%s: did not find credentials for default user\n",
  323.           &XXX_mem_v76);
  324.       }
  325.       std_string_dtor_X_sub_B5878((int)&buf_v61);
  326.       std_string_dtor_X_sub_B5878((int)&Account_v58);
  327.     }
  328.     v27 = 0;
  329. LABEL_50:
  330.     MEMORY_SetSize_sub_3B1FF4(&mem, 0);
  331.     return v27;
  332.   }
  333.   v14 = dword_551684;
  334.   if ( *(_DWORD *)dword_551684 <= 60 )
  335.   {
  336.     v15 = *(_DWORD *)v12;
  337.     mem.Ptr = 2;
  338.     XXX_mem_v76 = 1;
  339.     str.Ptr = 1;
  340.     sub_CF1CE(v15, (int)&XXX_mem_v76, &mem, &str);
  341.     auf::LogComponent::log(
  342.       v14,
  343.       (int)&unk_0001193C,
  344.       83748489,
  345.       "AccountManager::GetDefaultAccountOldCredentials: account object already created: %u\n",
  346.       &XXX_mem_v76);
  347.   }
  348.   return 0;
  349. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement