Tal_Liberman

Weird MS Signature

Dec 26th, 2017
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.69 KB | None | 0 0
  1. @Tal_Liberman
  2. https://about.me/liberman/
  3. void funca(unsigned int *data, unsigned int data_size, unsigned int *md5, unsigned int *output)
  4. {
  5.   unsigned int v4; // ebx@1
  6.   unsigned int *v5; // edx@1
  7.   int v6; // edi@3
  8.   unsigned int v7; // esi@3
  9.   unsigned int v8; // ecx@3
  10.   int v9; // ST18_4@5
  11.   unsigned int v10; // ecx@5
  12.   int v11; // edx@5
  13.   int v12; // edi@5
  14.   unsigned int v13; // edx@5
  15.   int result; // eax@5
  16.   unsigned int v15; // ecx@7
  17.   unsigned int v16; // ecx@7
  18.   int v17; // edi@7
  19.   unsigned int v18; // ecx@7
  20.   unsigned int v19; // [sp+4h] [bp-10h]@3
  21.   unsigned int v20; // [sp+Ch] [bp-8h]@3
  22.   int v21; // [sp+10h] [bp-4h]@5
  23.  
  24.   v4 = data_size;
  25.   v5 = data;
  26.   if ( v4 < 2 || v4 & 1 )
  27.   {
  28.     result = 0;
  29.   }
  30.   else
  31.   {
  32.     v6 = 0;
  33.     v7 = 0;
  34.     v8 = (*md5 | 1) + 1778057216;
  35.     v19 = (md5[1] | 1) + 333119488;
  36.     v20 = ((v4 - 2) >> 1) + 1;
  37.     while ( 1 )
  38.     {
  39.       v4 -= 2;
  40.       v9 = (int)(v5 + 1);
  41.       v10 = 2046337941 * ((*v5 + v7) * v8 - 284857861 * ((*v5 + v7) >> 16))
  42.           + 1755016095 * (((*v5 + v7) * v8 - 284857861 * ((*v5 + v7) >> 16)) >> 16);
  43.       v11 = 3935764481 * v10 - 1007687017 * (v10 >> 16);
  44.       v12 = v11 + v6;
  45.       v13 = *(_DWORD *)v9 + v11;
  46.       v21 = v9 + 4;
  47.       result = 516489217
  48.              * (1505996589 * (v13 * v19 - 1021897765 * (v13 >> 16))
  49.               - 573759729 * ((v13 * v19 - 1021897765 * (v13 >> 16)) >> 16));
  50.       v8 = (*md5 | 1) + 1778057216;
  51.       v7 = result
  52.          + 901586633
  53.          * ((1505996589 * (v13 * v19 - 1021897765 * (v13 >> 16))
  54.            - 573759729 * ((v13 * v19 - 1021897765 * (v13 >> 16)) >> 16)) >> 16);
  55.       v6 = v7 + v12;
  56.       --v20;
  57.       if ( !v20 )
  58.         break;
  59.       v5 = (unsigned int *)v21;
  60.     }
  61.     if ( v4 == 1 )
  62.     {
  63.       v15 = 2046337941 * ((*(_DWORD *)v21 + v7) * ((*md5 | 1) + 1778057216) - 284857861 * ((*(_DWORD *)v21 + v7) >> 16))
  64.           + 1755016095
  65.           * (((*(_DWORD *)v21 + v7) * ((*md5 | 1) + 1778057216) - 284857861 * ((*(_DWORD *)v21 + v7) >> 16)) >> 16);
  66.       v16 = -359202815 * v15 - 1007687017 * (v15 >> 16);
  67.       v17 = v16 + v6;
  68.       v18 = 1505996589 * (v16 * v19 - 1021897765 * (v16 >> 16))
  69.           - 573759729 * ((v16 * v19 - 1021897765 * (v16 >> 16)) >> 16);
  70.       result = v18 >> 16;
  71.       v7 = 516489217 * v18 + 901586633 * (v18 >> 16);
  72.       v6 = v7 + v17;
  73.     }
  74.     result = 1;
  75.     output[1] = v6;
  76.     *output = v7;
  77.   }
  78. }
  79.  
  80. void funcb(unsigned int *data, unsigned int data_size, unsigned int *md5, unsigned int *output)
  81. {
  82.   unsigned int v4; // ebx@1
  83.   int v5; // edi@3
  84.   unsigned int v6; // ecx@3
  85.   unsigned int v7; // esi@3
  86.   unsigned int v8; // edx@3
  87.   int v9; // esi@3
  88.   int v10; // edx@4
  89.   int v11; // ST14_4@4
  90.   unsigned int v12; // ecx@4
  91.   unsigned int v13; // ecx@4
  92.   int v14; // edi@4
  93.   unsigned int v15; // ecx@4
  94.   unsigned int v16; // ecx@4
  95.   int v17; // edx@4
  96.   int v18; // eax@4
  97.   unsigned int v19; // edx@4
  98.   int result; // eax@4
  99.   unsigned int v21; // ecx@6
  100.   unsigned int v22; // ecx@6
  101.   int v23; // edi@6
  102.   unsigned int v24; // ecx@6
  103.   unsigned int v25; // [sp+4h] [bp-Ch]@3
  104.   unsigned int *v26; // [sp+Ch] [bp-4h]@1
  105.  
  106.   v4 = data_size;
  107.   v26 = data;
  108.   if ( data_size < 2 || data_size & 1 )
  109.   {
  110.     result = 0;
  111.   }
  112.   else
  113.   {
  114.     v5 = 0;
  115.     v6 = *md5 | 1;
  116.     v7 = (data_size - 2) >> 1;
  117.     v8 = 0;
  118.     v25 = md5[1] | 1;
  119.     v9 = v7 + 1;
  120.     do
  121.     {
  122.       v4 -= 2;
  123.       v10 = *v26 + v8;
  124.       v11 = (int)(v26 + 1);
  125.       v12 = 2970681344 * v6 * v10 - 812076783 * (v6 * v10 >> 16);
  126.       v13 = 495124480
  127.           * (315537773 * ((1537146880 * v12 - 2029495393 * (v12 >> 16)) >> 16)
  128.            - 1184038912 * (1537146880 * v12 - 2029495393 * (v12 >> 16)))
  129.           + 629022083
  130.           * ((315537773 * ((1537146880 * v12 - 2029495393 * (v12 >> 16)) >> 16)
  131.             - 1184038912 * (1537146880 * v12 - 2029495393 * (v12 >> 16))) >> 16);
  132.       v14 = v13 + v5;
  133.       v15 = v25 * (*(_DWORD *)v11 + v13);
  134.       v26 = (unsigned int *)(v11 + 4);
  135.       v16 = 2533294080 * (385155072 * v15 - 1569450251 * (v15 >> 16))
  136.           - 746350849 * ((385155072 * v15 - 1569450251 * (v15 >> 16)) >> 16);
  137.       v17 = 2090019721 * (v16 >> 16);
  138.       v18 = 730398720 * v16;
  139.       v6 = *md5 | 1;
  140.       v19 = v18 + v17;
  141.       result = 1079730327 * (v19 >> 16);
  142.       v8 = 2674458624 * v19 - result;
  143.       v5 = v8 + v14;
  144.       --v9;
  145.     }
  146.     while ( v9 );
  147.     if ( v4 == 1 )
  148.     {
  149.       v21 = 2970681344 * (*md5 | 1) * (v8 + *v26) - 812076783 * ((*md5 | 1) * (v8 + *v26) >> 16);
  150.       v22 = 495124480
  151.           * (315537773 * ((1537146880 * v21 - 2029495393 * (v21 >> 16)) >> 16)
  152.            - 1184038912 * (1537146880 * v21 - 2029495393 * (v21 >> 16)))
  153.           + 629022083
  154.           * ((315537773 * ((1537146880 * v21 - 2029495393 * (v21 >> 16)) >> 16)
  155.             - 1184038912 * (1537146880 * v21 - 2029495393 * (v21 >> 16))) >> 16);
  156.       v23 = v22 + v5;
  157.       v24 = 385155072 * v25 * v22 - 1569450251 * (v25 * v22 >> 16);
  158.       result = (730398720 * (2533294080 * v24 - 746350849 * (v24 >> 16))
  159.               + 2090019721 * ((2533294080 * v24 - 746350849 * (v24 >> 16)) >> 16)) >> 16;
  160.       v8 = 2674458624
  161.          * (730398720 * (2533294080 * v24 - 746350849 * (v24 >> 16))
  162.           + 2090019721 * ((2533294080 * v24 - 746350849 * (v24 >> 16)) >> 16))
  163.          - 1079730327 * result;
  164.       v5 = v8 + v23;
  165.     }
  166.     result = 1;
  167.     output[1] = v5;
  168.     *output = v8;
  169.   }
  170. }
  171.  
  172. void weird_signature(unsigned int *data, unsigned int data_size, unsigned int *md5, unsigned int *outputa, unsigned int *outputb)
  173. {
  174.  
  175.     funca((unsigned int *)data, (data_size>>2) & 0x3FFFFFFE, (unsigned int *)md5, outputa);
  176.     funcb((unsigned int *)data, (data_size>>2) & 0x3FFFFFFE, (unsigned int *)md5, outputb);
  177. }
Advertisement
Add Comment
Please, Sign In to add comment