Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- NOP this ones
- .text:000000015135AC01 83 F8 FF cmp eax, 0FFFFFFFFh
- .text:000000015135AC04 74 55 jz short loc_15135AC5B
- .text:000000015135AC22 84 C0 test al, al
- .text:000000015135AC24 74 35 jz short loc_15135AC5B
- char __fastcall sub_15135A940(__int64 a1, __int64 a2, unsigned int a3)
- {
- __int64 v3; // r13@1
- __int64 v4; // r14@1
- __int64 v5; // r12@1
- __int64 v6; // rax@1
- __int64 v7; // r9@1
- char result; // al@2
- int v9; // eax@3
- char *v10; // rbx@10
- char *v11; // rbp@10
- const char *v12; // rbp@13
- signed __int64 v13; // rbx@15
- signed __int64 v14; // rsi@15
- size_t v15; // rdi@16
- signed int v16; // eax@21
- signed __int64 v17; // rdi@21
- int v18; // eax@23
- unsigned __int64 v19; // rax@24
- __int64 v20; // r15@25
- unsigned __int64 v21; // rbx@27
- __int64 v22; // rax@29
- signed __int64 i; // rcx@32
- char v24; // al@33
- int v25; // eax@38
- int v26; // eax@40
- signed __int64 v27; // rcx@40
- int v28; // eax@41
- unsigned __int64 v29; // rax@42
- int v30; // eax@44
- signed __int64 v31; // rcx@44
- int v32; // eax@45
- unsigned __int64 v33; // rax@46
- __int64 v34; // [sp+20h] [bp-58h]@29
- __int64 v35; // [sp+28h] [bp-50h]@36
- __int64 v36; // [sp+30h] [bp-48h]@36
- void *Dst; // [sp+80h] [bp+8h]@15
- int v38; // [sp+98h] [bp+20h]@36
- int v39; // [sp+9Ch] [bp+24h]@38
- v3 = a3;
- v4 = a1;
- v5 = a2;
- LODWORD(v6) = sub_151357A20(a1 + 8, a2, a3);
- if ( v6 != 1 )
- {
- sub_150218290(8u, 2u, (__int64)"Cannot fread() a portion of data from archive", v7);
- return 0;
- }
- v9 = *(_DWORD *)(v4 + 196);
- if ( !v9 )
- goto LABEL_50;
- if ( v9 != 3 )
- {
- sub_150218210(
- "Attempting to load encrypted pak by unsupported method, or unencrypted pak when support is disabled: %s",
- *(_QWORD *)v4);
- return 0;
- }
- if ( (unsigned __int8)sub_15134FC80(v5, v3, v4 + 2540, v4 + 2524) )
- {
- LABEL_50:
- if ( *(_DWORD *)(v4 + 200) == 1 )
- {
- v10 = strrchr(*(const char **)v4, 92);
- v11 = strrchr(*(const char **)v4, 47);
- if ( v10 > v11 )
- v11 = v10;
- if ( v11 )
- v12 = v11 + 1;
- else
- v12 = *(const char **)v4;
- v13 = (signed __int64)&FileName;
- v14 = -1i64;
- Dst = (void *)&FileName;
- if ( v12 )
- {
- v15 = -1i64;
- do
- ++v15;
- while ( v12[v15] );
- if ( v15 )
- {
- sub_15022D370(&Dst, v15);
- v13 = (signed __int64)&FileName;
- if ( &FileName != v12 )
- memcpy(Dst, v12, v15);
- }
- }
- v16 = *(_DWORD *)(v13 - 12);
- v17 = v13 - 12;
- if ( v16 > 1 )
- {
- if ( v16 >= 0 )
- {
- v18 = v16 - 1;
- *(_DWORD *)v17 = v18;
- if ( v18 <= 0 )
- {
- qword_15363C228 += -13 - *(_DWORD *)(v17 + 8);
- LODWORD(v19) = qword_1530FB608(v13 - 12, 0i64);
- _InterlockedExchangeAdd8(&qword_1530FB5C8, v19);
- }
- }
- v20 = *(_DWORD *)(v17 + 4);
- if ( *(_DWORD *)(v17 + 4) )
- {
- v21 = v20 + 13;
- if ( !dword_1530FB59C )
- sub_15021DE90();
- LODWORD(v22) = qword_1530FB590(v20 + 13, &v34, 0i64);
- _InterlockedExchangeAdd8(&qword_1530FB5B8, v34);
- _InterlockedExchangeAdd8(&qword_1530FB5B0, v21);
- _InterlockedIncrement((volatile signed __int32 *)&dword_1530FB598);
- qword_15363C228 += v21;
- *(_DWORD *)v22 = 1;
- *(_DWORD *)(v22 + 4) = v20;
- v13 = v22 + 12;
- *(_DWORD *)(v22 + 8) = v20;
- *(_BYTE *)(v20 + v22 + 12) = 0;
- }
- else
- {
- v13 = (signed __int64)&FileName;
- }
- Dst = (void *)v13;
- if ( v13 != v17 + 12 )
- memcpy((void *)v13, (const void *)(v17 + 12), *(_DWORD *)(v17 + 4) + 1);
- }
- for ( i = v13; *(_BYTE *)i; ++i )
- {
- v24 = *(_BYTE *)i;
- if ( (unsigned __int8)(*(_BYTE *)i - 65) <= 0x19u )
- v24 += 32;
- *(_BYTE *)i = v24;
- }
- v35 = v5;
- v36 = v13;
- v38 = v3;
- do
- ++v14;
- while ( *(_BYTE *)(v13 + v14) );
- v39 = v14;
- v25 = sub_1500C6D10("sha256");
- if ( v25 != -1 && sub_15134FD20((__int64)&v35, (__int64)&v38, v4 + 2388, v25) )
- {
- v26 = *(_DWORD *)(v13 - 12);
- v27 = v13 - 12;
- if ( v26 >= 0 )
- {
- v28 = v26 - 1;
- *(_DWORD *)v27 = v28;
- if ( v28 <= 0 )
- {
- qword_15363C228 += -13 - *(_DWORD *)(v27 + 8);
- LODWORD(v29) = qword_1530FB608(v27, 0i64);
- _InterlockedExchangeAdd8(&qword_1530FB5C8, v29);
- }
- }
- result = 1;
- }
- else
- {
- sub_150218210("Failed to verify RSA signature of pak header: %s", *(_QWORD *)v4);
- v30 = *(_DWORD *)(v13 - 12);
- v31 = v13 - 12;
- if ( v30 >= 0 )
- {
- v32 = v30 - 1;
- *(_DWORD *)v31 = v32;
- if ( v32 <= 0 )
- {
- qword_15363C228 += -13 - *(_DWORD *)(v31 + 8);
- LODWORD(v33) = qword_1530FB608(v31, 0i64);
- _InterlockedExchangeAdd8(&qword_1530FB5C8, v33);
- }
- }
- result = 0;
- }
- }
- else
- {
- sub_150218210("Unsupported pak signature, or use of unsigned pak when support is disabled: %s", *(_QWORD *)v4);
- result = 0;
- }
- }
- else
- {
- sub_150218210("Failed to decrypt pak header: %s", *(_QWORD *)v4);
- result = 0;
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement