Advertisement
BitEmE

Untitled

Nov 24th, 2015
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 KB | None | 0 0
  1. NOP this ones
  2.  
  3. .text:000000015135AC01 83 F8 FF                                      cmp     eax, 0FFFFFFFFh
  4. .text:000000015135AC04 74 55                                         jz      short loc_15135AC5B
  5.  
  6. .text:000000015135AC22 84 C0                                         test    al, al
  7. .text:000000015135AC24 74 35                                         jz      short loc_15135AC5B
  8.  
  9.  
  10. char __fastcall sub_15135A940(__int64 a1, __int64 a2, unsigned int a3)
  11. {
  12.   __int64 v3; // r13@1
  13.   __int64 v4; // r14@1
  14.   __int64 v5; // r12@1
  15.   __int64 v6; // rax@1
  16.   __int64 v7; // r9@1
  17.   char result; // al@2
  18.   int v9; // eax@3
  19.   char *v10; // rbx@10
  20.   char *v11; // rbp@10
  21.   const char *v12; // rbp@13
  22.   signed __int64 v13; // rbx@15
  23.   signed __int64 v14; // rsi@15
  24.   size_t v15; // rdi@16
  25.   signed int v16; // eax@21
  26.   signed __int64 v17; // rdi@21
  27.   int v18; // eax@23
  28.   unsigned __int64 v19; // rax@24
  29.   __int64 v20; // r15@25
  30.   unsigned __int64 v21; // rbx@27
  31.   __int64 v22; // rax@29
  32.   signed __int64 i; // rcx@32
  33.   char v24; // al@33
  34.   int v25; // eax@38
  35.   int v26; // eax@40
  36.   signed __int64 v27; // rcx@40
  37.   int v28; // eax@41
  38.   unsigned __int64 v29; // rax@42
  39.   int v30; // eax@44
  40.   signed __int64 v31; // rcx@44
  41.   int v32; // eax@45
  42.   unsigned __int64 v33; // rax@46
  43.   __int64 v34; // [sp+20h] [bp-58h]@29
  44.   __int64 v35; // [sp+28h] [bp-50h]@36
  45.   __int64 v36; // [sp+30h] [bp-48h]@36
  46.   void *Dst; // [sp+80h] [bp+8h]@15
  47.   int v38; // [sp+98h] [bp+20h]@36
  48.   int v39; // [sp+9Ch] [bp+24h]@38
  49.  
  50.   v3 = a3;
  51.   v4 = a1;
  52.   v5 = a2;
  53.   LODWORD(v6) = sub_151357A20(a1 + 8, a2, a3);
  54.   if ( v6 != 1 )
  55.   {
  56.     sub_150218290(8u, 2u, (__int64)"Cannot fread() a portion of data from archive", v7);
  57.     return 0;
  58.   }
  59.   v9 = *(_DWORD *)(v4 + 196);
  60.   if ( !v9 )
  61.     goto LABEL_50;
  62.   if ( v9 != 3 )
  63.   {
  64.     sub_150218210(
  65.       "Attempting to load encrypted pak by unsupported method, or unencrypted pak when support is disabled: %s",
  66.       *(_QWORD *)v4);
  67.     return 0;
  68.   }
  69.   if ( (unsigned __int8)sub_15134FC80(v5, v3, v4 + 2540, v4 + 2524) )
  70.   {
  71. LABEL_50:
  72.     if ( *(_DWORD *)(v4 + 200) == 1 )
  73.     {
  74.       v10 = strrchr(*(const char **)v4, 92);
  75.       v11 = strrchr(*(const char **)v4, 47);
  76.       if ( v10 > v11 )
  77.         v11 = v10;
  78.       if ( v11 )
  79.         v12 = v11 + 1;
  80.       else
  81.         v12 = *(const char **)v4;
  82.       v13 = (signed __int64)&FileName;
  83.       v14 = -1i64;
  84.       Dst = (void *)&FileName;
  85.       if ( v12 )
  86.       {
  87.         v15 = -1i64;
  88.         do
  89.           ++v15;
  90.         while ( v12[v15] );
  91.         if ( v15 )
  92.         {
  93.           sub_15022D370(&Dst, v15);
  94.           v13 = (signed __int64)&FileName;
  95.           if ( &FileName != v12 )
  96.             memcpy(Dst, v12, v15);
  97.         }
  98.       }
  99.       v16 = *(_DWORD *)(v13 - 12);
  100.       v17 = v13 - 12;
  101.       if ( v16 > 1 )
  102.       {
  103.         if ( v16 >= 0 )
  104.         {
  105.           v18 = v16 - 1;
  106.           *(_DWORD *)v17 = v18;
  107.           if ( v18 <= 0 )
  108.           {
  109.             qword_15363C228 += -13 - *(_DWORD *)(v17 + 8);
  110.             LODWORD(v19) = qword_1530FB608(v13 - 12, 0i64);
  111.             _InterlockedExchangeAdd8(&qword_1530FB5C8, v19);
  112.           }
  113.         }
  114.         v20 = *(_DWORD *)(v17 + 4);
  115.         if ( *(_DWORD *)(v17 + 4) )
  116.         {
  117.           v21 = v20 + 13;
  118.           if ( !dword_1530FB59C )
  119.             sub_15021DE90();
  120.           LODWORD(v22) = qword_1530FB590(v20 + 13, &v34, 0i64);
  121.           _InterlockedExchangeAdd8(&qword_1530FB5B8, v34);
  122.           _InterlockedExchangeAdd8(&qword_1530FB5B0, v21);
  123.           _InterlockedIncrement((volatile signed __int32 *)&dword_1530FB598);
  124.           qword_15363C228 += v21;
  125.           *(_DWORD *)v22 = 1;
  126.           *(_DWORD *)(v22 + 4) = v20;
  127.           v13 = v22 + 12;
  128.           *(_DWORD *)(v22 + 8) = v20;
  129.           *(_BYTE *)(v20 + v22 + 12) = 0;
  130.         }
  131.         else
  132.         {
  133.           v13 = (signed __int64)&FileName;
  134.         }
  135.         Dst = (void *)v13;
  136.         if ( v13 != v17 + 12 )
  137.           memcpy((void *)v13, (const void *)(v17 + 12), *(_DWORD *)(v17 + 4) + 1);
  138.       }
  139.       for ( i = v13; *(_BYTE *)i; ++i )
  140.       {
  141.         v24 = *(_BYTE *)i;
  142.         if ( (unsigned __int8)(*(_BYTE *)i - 65) <= 0x19u )
  143.           v24 += 32;
  144.         *(_BYTE *)i = v24;
  145.       }
  146.       v35 = v5;
  147.       v36 = v13;
  148.       v38 = v3;
  149.       do
  150.         ++v14;
  151.       while ( *(_BYTE *)(v13 + v14) );
  152.       v39 = v14;
  153.       v25 = sub_1500C6D10("sha256");
  154.       if ( v25 != -1 && sub_15134FD20((__int64)&v35, (__int64)&v38, v4 + 2388, v25) )
  155.       {
  156.         v26 = *(_DWORD *)(v13 - 12);
  157.         v27 = v13 - 12;
  158.         if ( v26 >= 0 )
  159.         {
  160.           v28 = v26 - 1;
  161.           *(_DWORD *)v27 = v28;
  162.           if ( v28 <= 0 )
  163.           {
  164.             qword_15363C228 += -13 - *(_DWORD *)(v27 + 8);
  165.             LODWORD(v29) = qword_1530FB608(v27, 0i64);
  166.             _InterlockedExchangeAdd8(&qword_1530FB5C8, v29);
  167.           }
  168.         }
  169.         result = 1;
  170.       }
  171.       else
  172.       {
  173.         sub_150218210("Failed to verify RSA signature of pak header: %s", *(_QWORD *)v4);
  174.         v30 = *(_DWORD *)(v13 - 12);
  175.         v31 = v13 - 12;
  176.         if ( v30 >= 0 )
  177.         {
  178.           v32 = v30 - 1;
  179.           *(_DWORD *)v31 = v32;
  180.           if ( v32 <= 0 )
  181.           {
  182.             qword_15363C228 += -13 - *(_DWORD *)(v31 + 8);
  183.             LODWORD(v33) = qword_1530FB608(v31, 0i64);
  184.             _InterlockedExchangeAdd8(&qword_1530FB5C8, v33);
  185.           }
  186.         }
  187.         result = 0;
  188.       }
  189.     }
  190.     else
  191.     {
  192.       sub_150218210("Unsupported pak signature, or use of unsigned pak when support is disabled: %s", *(_QWORD *)v4);
  193.       result = 0;
  194.     }
  195.   }
  196.   else
  197.   {
  198.     sub_150218210("Failed to decrypt pak header: %s", *(_QWORD *)v4);
  199.     result = 0;
  200.   }
  201.   return result;
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement