Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
- {
- _BYTE *v11; // r0
- int v12; // r0
- int v13; // r3
- int v14; // r5
- int v15; // r0
- int v16; // r11
- int (__fastcall *v17)(int, int *); // r9
- int v18; // r0
- int v19; // r0
- int v20; // r0
- int v21; // r5
- int v22; // r11
- std_string *v23; // r3
- int v24; // r2
- int v25; // r1
- int v26; // r3
- _BOOL4 v27; // r6
- int v28; // r6
- int v29; // r5
- int v30; // r4
- char *v31; // r0
- int v32; // r10
- char *v33; // r0
- unsigned int v34; // r3
- int v35; // r0
- char *genkey; // r0 MAPDST
- int v38; // r1
- __int64 a5; // r0
- unsigned int Length; // r9
- int Buffer; // r4
- spl *v42; // r0
- int v43; // r0
- const std::string **v44; // r0
- int v45; // r8
- int v46; // r8
- int CRC32_v47; // r3
- _BYTE *v48; // r2
- int v49; // r4
- spl *v50; // r0
- spl *v51; // r0
- std_string *a2; // [sp+34h] [bp+24h]
- int MemBuffer; // [sp+34h] [bp+24h]
- int v57; // [sp+38h] [bp+28h]
- char *Account_v58; // [sp+3Ch] [bp+2Ch]
- int buf_v61; // [sp+40h] [bp+30h]
- size_t MemLength; // [sp+44h] [bp+34h]
- MEMORY mem; // [sp+48h] [bp+38h]
- MEMORY str; // [sp+50h] [bp+40h]
- int XXX_mem_v76; // [sp+58h] [bp+48h]
- void **XXX_v74; // [sp+5Ch] [bp+4Ch]
- int v65; // [sp+60h] [bp+50h]
- int XXX_v76; // [sp+160h] [bp+150h]
- int v67; // [sp+164h] [bp+154h]
- int v68; // [sp+168h] [bp+158h]
- rollover_counter_t v69; // [sp+170h] [bp+160h]
- int bufv72; // [sp+18Ch] [bp+17Ch]
- v11 = (_BYTE *)std_string_sub_B5930((std_string *)accountName_ARG_a3);
- v12 = sub_CE67C(a1, v11);
- v13 = *(unsigned __int8 *)(v12 + 4);
- if ( !*(_BYTE *)(v12 + 4) )
- {
- mem.Ptr = *(unsigned __int8 *)(v12 + 4);
- mem.Size = v13;
- if ( readnormal )
- {
- v42 = *(spl **)(a1 + 0x10);
- v57 = (int)&std::string::_Rep::_S_empty_rep_storage + 12;
- Account_v58 = (char *)&std::string::_Rep::_S_empty_rep_storage + 12;
- v43 = get_sub_C2BD4(v42);
- v44 = (const std::string **)(*(int (__fastcall **)(int))(*(_DWORD *)v43 + 40))(v43);
- sub_B599C((std::string **)&buf_v61, v44);
- v45 = dword_551684;
- if ( *(_DWORD *)dword_551684 <= 70 )
- {
- XXX_mem_v76 = 2;
- MemLength = 2;
- str.Ptr = 1;
- sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
- sub_CF218(v57, (int)&XXX_mem_v76, &MemLength, &str);
- auf::LogComponent::log(v45, 0x14046, 0xAA599B98, "%s: missing coexistence creds, err: %s\n", &XXX_mem_v76);
- }
- std_string_dtor_X_sub_B5878((int)&buf_v61);
- std::string::~string((std_string *)&Account_v58);
- std::string::~string((std_string *)&v57);
- }
- else
- {
- v16 = GetConfig_sub_B5060(*(_DWORD *)(a1 + 16));
- v17 = *(int (__fastcall **)(int, int *))(*(_DWORD *)v16 + 20);
- std::string::string(&XXX_mem_v76, &byte_40A147, &str);
- v18 = v17(v16, &XXX_mem_v76);
- (*(void (__fastcall **)(char **, int, const char *))(*(_DWORD *)v18 + 8))(
- &Account_v58,
- v18,
- "*Lib/Account/Default");
- std::string::~string((std_string *)&XXX_mem_v76);
- std_string_ctor_sub_B5850(&buf_v61);
- if ( sub_B59E8((int)&Account_v58) )
- {
- XXX_mem_v76 = 0;
- XXX_v74 = 0;
- v19 = *(_DWORD *)(a1 + 16);
- v65 = 0;
- v20 = GetConfig_sub_B5060(v19);
- (*(void (__fastcall **)(int, int *))(*(_DWORD *)v20 + 32))(v20, &XXX_mem_v76);
- if ( v65 )
- {
- v21 = XXX_mem_v76;
- v22 = XXX_mem_v76 + 4 * v65;
- while ( 1 )
- {
- v23 = (std_string *)v21;
- if ( v21 == v22 )
- break;
- v24 = v21;
- v21 += 4;
- a2 = v23;
- Credentials3_sub_CF2CC((std_string *)&str, *(_DWORD *)(a1 + 16), v24);
- std_string_sub_B5944((std_string *)&buf_v61, (std_string *)&str);
- std_string_dtor_X_sub_B5878((int)&str);
- if ( !sub_B59E8((int)&buf_v61) )
- {
- std_string_sub_B5944((std_string *)&Account_v58, a2);
- break;
- }
- }
- }
- while ( 1 )
- {
- v25 = v65;
- v26 = --v65;
- if ( !v25 )
- break;
- std_string_dtor_X_sub_B5878(XXX_mem_v76 + 4 * v26);
- }
- MEMORY_SetSize_sub_B434A((MEMORY *)&XXX_mem_v76, 0);
- ++v65;
- MEMORY_dtor_sub_B46E0((int)&XXX_mem_v76);
- }
- else
- {
- Credentials3_sub_CF2CC((std_string *)&XXX_mem_v76, *(_DWORD *)(a1 + 16), (int)&Account_v58);
- std_string_sub_B5944((std_string *)&buf_v61, (std_string *)&XXX_mem_v76);
- std_string_dtor_X_sub_B5878((int)&XXX_mem_v76);
- }
- v27 = sub_B59E8((int)&buf_v61);
- if ( !v27 )
- {
- v29 = dword_551684;
- if ( *(_DWORD *)dword_551684 <= 50 )
- {
- MemLength = 2;
- str.Ptr = 1;
- XXX_mem_v76 = 1;
- sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
- auf::LogComponent::log(v29, 79410, 1053985249, "%s: found credentials for default user\n", &XXX_mem_v76);
- }
- v30 = std_string_sub_B5930((std_string *)&buf_v61) + 2;
- while ( 1 )
- {
- v31 = strchr("0123456789ABCDEF", *(unsigned __int8 *)(v30 - 2));
- if ( !v31 )
- break;
- v32 = v31 - "0123456789ABCDEF";
- if ( v31 - "0123456789ABCDEF" > 15 )
- break;
- v33 = strchr("0123456789ABCDEF", *(unsigned __int8 *)(v30 - 1));
- if ( !v33 )
- break;
- v35 = v33 - "0123456789ABCDEF";
- v30 += 2;
- if ( v35 > 15 )
- break;
- LOBYTE(XXX_mem_v76) = v35 + 16 * v32;
- MEMORY_sub_3B2010(&mem, (unsigned int)&XXX_mem_v76, (char *)&unk_00000001, v34);
- }
- str.Ptr = 0;
- str.Size = 0;
- if ( loadCryptedToken_sub_B7C32((int)"skype", 0, (int)&str) )
- {
- genkey = (char *)operator new[](0x20u);
- XXX_mem_v76 = (int)&userpacket_crypto_context_t_off_500FF0;
- XXX_v74 = &XXXXXXXXX_off_501010;
- XXX_v76 = (int)&XXXXXXXXX_off_50101C;
- seq_sub_3B508C((int)&XXX_v74);
- rollover_counter_t_sub_3B3FF2(&v69, v38, 0LL);
- v68 = 0;
- v67 = 0;
- userpacket_crypto_context_t_generate_key_sub_3B4FC4(genkey, 0x20u, (const void *)str.Ptr, str.Size);
- memset((void *)str.Ptr, 0, str.Size);
- MEMORY_SetSize_sub_B434A(&str, 0);
- (*(void (__fastcall **)(int *, char *))(XXX_v76 + 8))(&XXX_v76, genkey);
- v67 = 0;
- v68 = 0;
- MemLength = mem.Size;
- MemBuffer = mem.Ptr;
- if ( mem.Size > 1u )
- {
- a5 = rollover_counter_t_process_recv_packet_sub_3B4038(
- (int)&v69,
- (const char *)&v69,
- mem.Ptr,
- (int *)&MemLength);
- Rijndael_crypt_buf_sub_3B5092((int)&XXX_v74, MemBuffer, MemLength, v68, a5, 0, v68);
- }
- else
- {
- MemLength = 0;
- }
- MEMORY_SetSize_sub_3B1FF4(&mem, MemLength);
- memset(genkey, 0, 0x20u);
- operator delete[](genkey);
- }
- std_string_sub_B5944((std_string *)accountName_ARG_a3, (std_string *)&Account_v58);
- MEMORY_dtor_sub_B46E0((int)&str);
- std_string_dtor_X_sub_B5878((int)&buf_v61);
- std_string_dtor_X_sub_B5878((int)&Account_v58);
- Length = mem.Size;
- Buffer = mem.Ptr;
- if ( mem.Size <= 144u ) // CHECK SIZE
- {
- v46 = dword_551684;
- if ( *(_DWORD *)dword_551684 <= 70 )
- {
- XXX_mem_v76 = 1;
- MemLength = 2;
- str.Ptr = 1;
- sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
- auf::LogComponent::log(
- v46,
- 84806,
- 1888273893,
- "%s: not enough data to retrieve password hash\n",
- &XXX_mem_v76);
- }
- }
- else
- {
- XXX_mem_v76 = mem.Ptr;
- XXX_v74 = (void **)&unk_00000010;
- rt::BASE64::encode((int)&Account_v58, mem.Ptr, 0x10);
- std_string_sub_B5898((int)passwordHash_ARG_a4, (int)Account_v58);//
- //
- XXX_mem_v76 = -1; // CRC32 = -1;
- spl::memcpy_s(&bufv72, 0x10u, (const void *)Buffer, 0x10u);
- CRC32_sub_3B0A50((int)&XXX_mem_v76, (int)&bufv72, 0x10);
- CRC32_v47 = XXX_mem_v76;
- v48 = (_BYTE *)(Buffer + 0x10);
- do
- {
- CRC32_v47 = 0x10DCD * CRC32_v47 + 0x4271;
- *v48++ ^= HIBYTE(CRC32_v47);
- }
- while ( v48 != (_BYTE *)(Buffer + Length) );//
- //
- if ( _byteswap_ulong(*(_DWORD *)(Buffer + 0x10)) == 0x140 )// SIG
- {
- if ( Length >= 340 )
- {
- buf_v61 = Buffer + 340;
- MemLength = Length - 340;
- v65 = 0;
- XXX_v74 = 0;
- XXX_mem_v76 = 0;
- str.Ptr = 307200;
- if ( AttributeContainer_Deserialize_sub_3B3BF4(
- (int)&XXX_mem_v76,
- (int)&buf_v61,
- (int)&MemLength,
- 0,
- 8,
- &str) )
- {
- v50 = AttributeContainer_GetOptString_sub_3B35CC((int)&XXX_mem_v76, 2, (int)&byte_40A147);
- std_string_sub_B5898((int)refreshToken_attr2_ARG_a5, (int)v50);
- *(_DWORD *)refreshTokenExpiration_attr12_ARG_a6 = AttributeContainer_GetInteger_sub_3B3430(
- &XXX_mem_v76,
- 12,
- 0);
- v51 = AttributeContainer_GetOptString_sub_3B35CC((int)&XXX_mem_v76, 6, 0);
- std_string_sub_B5898((int)skypeToken_attr6_ARG_a7, (int)v51);
- *(_DWORD *)skypeTokenExpiration_attr7_ARG_a8 = AttributeContainer_GetInteger_sub_3B3430(
- &XXX_mem_v76,
- 7,
- 0);
- *partnerId_attr3_ARG_a9 = AttributeContainer_GetInt64_sub_3B344A(&XXX_mem_v76, 3, 0, 0, 0);
- }
- sub_3B37DA((int)&XXX_mem_v76);
- }
- v27 = 1;
- }
- else
- {
- v49 = dword_551684;
- if ( *(_DWORD *)dword_551684 <= 70 )
- {
- MemLength = 2;
- XXX_mem_v76 = 1;
- str.Ptr = 1;
- sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
- auf::LogComponent::log(v49, 87622, -36233036, "%s: credentials decryption failed\n", &XXX_mem_v76);
- }
- }
- std::string::~string((std_string *)&Account_v58);
- }
- goto LABEL_50;
- }
- v28 = dword_551684;
- if ( *(_DWORD *)dword_551684 <= 60 )
- {
- MemLength = 2;
- XXX_mem_v76 = 1;
- str.Ptr = 1;
- sub_CF218((int)"GetOldCredentials", (int)&XXX_mem_v76, &MemLength, &str);
- auf::LogComponent::log(
- v28,
- (int)&unk_0001333C,
- 0x2AE492BC,
- "%s: did not find credentials for default user\n",
- &XXX_mem_v76);
- }
- std_string_dtor_X_sub_B5878((int)&buf_v61);
- std_string_dtor_X_sub_B5878((int)&Account_v58);
- }
- v27 = 0;
- LABEL_50:
- MEMORY_SetSize_sub_3B1FF4(&mem, 0);
- return v27;
- }
- v14 = dword_551684;
- if ( *(_DWORD *)dword_551684 <= 60 )
- {
- v15 = *(_DWORD *)v12;
- mem.Ptr = 2;
- XXX_mem_v76 = 1;
- str.Ptr = 1;
- sub_CF1CE(v15, (int)&XXX_mem_v76, &mem, &str);
- auf::LogComponent::log(
- v14,
- (int)&unk_0001193C,
- 83748489,
- "AccountManager::GetDefaultAccountOldCredentials: account object already created: %u\n",
- &XXX_mem_v76);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement