首页
社区
课程
招聘
[求助]这个是什么算法?
发表于: 2016-1-4 09:20 10126

[求助]这个是什么算法?

2016-1-4 09:20
10126
刚逆向了一个软件,里面有个解密算法是 读文件的0x18个字节BUF经过解密函数后得到 一个URL,想知道是什么解密算法,感觉这个算法应该是市面上通用的算法(看见实现体里面很多左移右移与啊或啊的很庞大,估摸着应该是市面上通用的算法)
算法如下



int __fastcall sub_10B845F(int a1, unsigned int a2, int a3, signed int a4)
{
  signed int v4; // edi@1
  unsigned int v5; // eax@1
  int v6; // edx@6
  int v7; // ebx@6
  int v8; // esi@6
  unsigned int v9; // edi@7
  int v10; // eax@8
  int v11; // ecx@8
  int v12; // eax@8
  int v13; // ecx@11
  int v14; // eax@11
  int v15; // esi@11
  int v16; // edx@11
  int v17; // edi@21
  signed int v18; // ecx@21
  int v19; // esi@21
  int v20; // eax@23
  int v21; // ecx@23
  int result; // eax@25
  int v23; // eax@26
  int v24; // [sp+Ch] [bp-11Ch]@1
  int v25; // [sp+18h] [bp-110h]@6
  int v26; // [sp+18h] [bp-110h]@25
  int v27; // [sp+1Ch] [bp-10Ch]@6
  int v28; // [sp+1Ch] [bp-10Ch]@25
  unsigned int v29; // [sp+20h] [bp-108h]@1
  int v30; // [sp+20h] [bp-108h]@23
  int v31; // [sp+24h] [bp-104h]@8
  int v32[63]; // [sp+28h] [bp-100h]@8
  unsigned int v33; // [sp+124h] [bp-4h]@1
  int v34; // [sp+128h] [bp+0h]@1

  v33 = (unsigned int)&v34 ^ __security_cookie;
  v4 = a4;
  v5 = a2;
  v29 = a2;
  v24 = a1;
  if ( a4 != 16 && a4 != 12 )
  {
    if ( a4 != 8 )
      v4 = 16;
    a4 = v4;
  }
  v6 = a3;
  v7 = 0;
  *(_DWORD *)a1 = v4;
  v8 = 0;
  v25 = 0;
  v27 = 0;
  if ( ((v5 - 8) & 0x80000000u) == 0 )
  {
    v9 = v5 >> 3;
    v27 = 8 * (v5 >> 3);
    do
    {
      v10 = *(_BYTE *)(v6 + 5);
      *(&v31 + v8) = (*(_BYTE *)(v6 + 3) << 24) | (*(_BYTE *)(v6 + 2) << 16) | (*(_BYTE *)(v6 + 1) << 8) | *(_BYTE *)v6;
      v11 = (*(_BYTE *)(v6 + 6) << 16) | (v10 << 8) | *(_BYTE *)(v6 + 4);
      v12 = *(_BYTE *)(v6 + 7) << 24;
      v6 += 8;
      v32[v8] = v12 | v11;
      v8 += 2;
      --v9;
    }
    while ( v9 );
    v4 = a4;
    v5 = v29;
    v25 = v8;
  }
  if ( v5 != v27 )
  {
    v13 = 0;
    v14 = v29 & 7;
    v15 = 0;
    v16 = v14 + v6;
    switch ( v14 )
    {
      case 8:
        --v16;
        v13 = *(_BYTE *)v16 << 24;
        goto LABEL_13;
      case 7:
LABEL_13:
        --v16;
        v13 |= *(_BYTE *)v16 << 16;
        goto LABEL_14;
      case 6:
LABEL_14:
        --v16;
        v13 |= *(_BYTE *)v16 << 8;
        goto LABEL_15;
      case 5:
LABEL_15:
        --v16;
        v13 |= *(_BYTE *)v16;
        goto LABEL_16;
      case 4:
LABEL_16:
        --v16;
        v15 = *(_BYTE *)v16 << 24;
        goto LABEL_17;
      case 3:
LABEL_17:
        --v16;
        v15 |= *(_BYTE *)v16 << 16;
        goto LABEL_18;
      case 2:
LABEL_18:
        --v16;
        v15 |= *(_BYTE *)v16 << 8;
        goto LABEL_19;
      case 1:
LABEL_19:
        v15 |= *(_BYTE *)(v16 - 1);
        break;
      default:
        break;
    }
    *(&v31 + v25) = v15;
    v32[v25] = v13;
  }
  v17 = 2 * v4 + 2;
  v18 = 1;
  v19 = (signed int)(v29 + 3) / 4;
  for ( *(_DWORD *)(v24 + 4) = 0xB7E15163u; v18 < v17; ++v18 )
    *(_DWORD *)(v24 + 4 * v18 + 4) = *(_DWORD *)(v24 + 4 * v18) - 0x61C88647;
  v30 = 0;
  v20 = v19;
  v21 = 0;
  if ( v17 > v19 )
    v20 = v17;
  v28 = 3 * v20;
  result = 0;
  v26 = 0;
  if ( v28 > 0 )
  {
    do
    {
      v21 = __ROL__(*(_DWORD *)(v24 + 4 * result + 4) + v30 + v21, 3);
      *(_DWORD *)(v24 + 4 * result + 4) = v21;
      v23 = __ROL__(v21 + v30 + *(&v31 + v7), (v30 + (_BYTE)v21) & 0x1F);
      *(&v31 + v7) = v23;
      v30 = v23;
      result = v26 + 1;
      if ( v26 + 1 >= v17 )
        result = 0;
      ++v7;
      v26 = result;
      if ( v7 >= v19 )
        v7 = 0;
      --v28;
    }
    while ( v28 );
  }
  return result;
}

unsigned int __fastcall sub_10B7C16(int a1, int a2, unsigned int a3, int a4, int a5, int a6)
{
  int v6; // edi@1
  int v7; // edx@1
  int v8; // esi@2
  int v9; // ebx@2
  int v10; // ecx@2
  unsigned int v11; // eax@2
  int v12; // esi@3
  int v13; // ecx@4
  int v14; // ecx@4
  int v15; // eax@4
  unsigned int v16; // eax@4
  bool v17; // zf@4
  int v18; // ecx@7
  int v19; // edx@7
  int v20; // eax@7
  unsigned int v21; // eax@16
  unsigned int result; // eax@17
  int v23; // ebx@18
  int v24; // ecx@18
  int v25; // esi@18
  bool v26; // sf@18
  unsigned int v27; // eax@18
  int v28; // ebx@19
  int v29; // edi@20
  int v30; // esi@20
  int v31; // ecx@20
  int v32; // edx@20
  int v33; // eax@23
  int v34; // ecx@23
  int v35; // eax@23
  int v36; // eax@23
  int v37; // edx@23
  int v38; // ecx@23
  unsigned int v39; // edx@32
  unsigned int v40; // [sp+Ch] [bp-1Ch]@4
  int v41; // [sp+10h] [bp-18h]@4
  int v42; // [sp+14h] [bp-14h]@18
  unsigned int v43; // [sp+18h] [bp-10h]@7
  int v44; // [sp+1Ch] [bp-Ch]@2
  int v45; // [sp+20h] [bp-8h]@2
  int v46; // [sp+24h] [bp-4h]@5
  unsigned int v47; // [sp+30h] [bp+8h]@3
  int v48; // [sp+30h] [bp+8h]@7
  unsigned int v49; // [sp+30h] [bp+8h]@18
  int v50; // [sp+3Ch] [bp+14h]@18
  int v51; // [sp+3Ch] [bp+14h]@23

  v6 = a2;
  v7 = a1;
  if ( a6 )
  {
    v8 = a5;
    v9 = (*(_BYTE *)(a5 + 3) << 24) | (*(_BYTE *)(a5 + 2) << 16) | (*(_BYTE *)(a5 + 1) << 8) | *(_BYTE *)a5;
    v10 = (*(_BYTE *)(a5 + 7) << 24) | (*(_BYTE *)(a5 + 6) << 16) | (*(_BYTE *)(a5 + 5) << 8) | *(_BYTE *)(a5 + 4);
    v11 = a3 - 8;
    v44 = (*(_BYTE *)(a5 + 7) << 24) | (*(_BYTE *)(a5 + 6) << 16) | (*(_BYTE *)(a5 + 5) << 8) | *(_BYTE *)(a5 + 4);
    v45 = a3 - 8;
    if ( ((a3 - 8) & 0x80000000u) == 0 )
    {
      v12 = v7;
      v47 = a3 >> 3;
      v45 += -8 * v47;
      do
      {
        v13 = (*(_BYTE *)(v12 + 5) << 8) | *(_BYTE *)(v12 + 4);
        v40 = v9 ^ ((*(_BYTE *)(v12 + 3) << 24) | (*(_BYTE *)(v12 + 2) << 16) | (*(_BYTE *)(v12 + 1) << 8) | *(_BYTE *)v12);
        v14 = (*(_BYTE *)(v12 + 6) << 16) | v13;
        v15 = *(_BYTE *)(v12 + 7) << 24;
        v12 += 8;
        v41 = v44 ^ (v15 | v14);
        sub_10B809E(&v40, a4);
        v9 = v40;
        v10 = v41;
        v16 = v40 >> 8;
        *(_BYTE *)v6 = v40;
        *(_BYTE *)(v6 + 1) = v16;
        *(_BYTE *)(v6 + 2) = (unsigned int)v9 >> 16;
        *(_BYTE *)(v6 + 3) = BYTE3(v9);
        *(_BYTE *)(v6 + 4) = v10;
        *(_BYTE *)(v6 + 5) = BYTE1(v10);
        *(_BYTE *)(v6 + 6) = (unsigned int)v10 >> 16;
        *(_BYTE *)(v6 + 7) = BYTE3(v10);
        v6 += 8;
        v17 = v47-- == 1;
        v44 = v10;
      }
      while ( !v17 );
      v11 = v45;
      v46 = v12;
      v8 = a5;
      v7 = v46;
    }
    if ( v11 != -8 )
    {
      v18 = v7 + v11 + 8;
      v19 = 0;
      v43 = v45 + 7;
      v20 = 0;
      v48 = 0;
      switch ( v45 + 7 )
      {
        case 7:
          --v18;
          v19 = *(_BYTE *)v18 << 24;
          goto LABEL_9;
        case 6:
LABEL_9:
          --v18;
          v19 |= *(_BYTE *)v18 << 16;
          goto LABEL_10;
        case 5:
LABEL_10:
          --v18;
          v19 |= *(_BYTE *)v18 << 8;
          goto LABEL_11;
        case 4:
LABEL_11:
          --v18;
          v19 |= *(_BYTE *)v18;
          goto LABEL_12;
        case 3:
LABEL_12:
          --v18;
          v48 = *(_BYTE *)v18 << 24;
          goto LABEL_13;
        case 2:
LABEL_13:
          --v18;
          v48 |= *(_BYTE *)v18 << 16;
          goto LABEL_14;
        case 1:
LABEL_14:
          --v18;
          v48 |= *(_BYTE *)v18 << 8;
          goto LABEL_15;
        case 0:
LABEL_15:
          v20 = *(_BYTE *)(v18 - 1) | v48;
          break;
        default:
          break;
      }
      v41 = v44 ^ v19;
      v40 = v9 ^ v20;
      sub_10B809E(&v40, a4);
      v9 = v40;
      v10 = v41;
      v21 = v40 >> 8;
      *(_BYTE *)v6 = v40;
      *(_BYTE *)(v6 + 1) = v21;
      v8 = a5;
      *(_BYTE *)(v6 + 2) = (unsigned int)v9 >> 16;
      *(_BYTE *)(v6 + 3) = BYTE3(v9);
      *(_BYTE *)(v6 + 4) = v10;
      *(_BYTE *)(v6 + 5) = BYTE1(v10);
      *(_BYTE *)(v6 + 6) = (unsigned int)v10 >> 16;
      *(_BYTE *)(v6 + 7) = BYTE3(v10);
    }
    *(_BYTE *)v8 = v9;
    *(_BYTE *)(v8 + 1) = BYTE1(v9);
    *(_BYTE *)(v8 + 2) = (unsigned int)v9 >> 16;
    *(_BYTE *)(v8 + 3) = BYTE3(v9);
    *(_BYTE *)(v8 + 4) = v10;
    *(_BYTE *)(v8 + 5) = BYTE1(v10);
    result = (unsigned int)v10 >> 16;
    *(_BYTE *)(v8 + 6) = (unsigned int)v10 >> 16;
    *(_BYTE *)(v8 + 7) = BYTE3(v10);
  }
  else
  {
    v23 = a5;
    v42 = a5;
    v24 = (*(_BYTE *)(a5 + 3) << 24) | (*(_BYTE *)(a5 + 2) << 16) | (*(_BYTE *)(a5 + 1) << 8) | *(_BYTE *)a5;
    v50 = (*(_BYTE *)(a5 + 3) << 24) | (*(_BYTE *)(a5 + 2) << 16) | (*(_BYTE *)(a5 + 1) << 8) | *(_BYTE *)a5;
    v25 = (*(_BYTE *)(a5 + 7) << 24) | (*(_BYTE *)(a5 + 6) << 16) | (*(_BYTE *)(a5 + 5) << 8) | *(_BYTE *)(a5 + 4);
    v26 = ((a3 - 8) & 0x80000000u) != 0;
    v27 = a3 - 8;
    v45 = (*(_BYTE *)(a5 + 7) << 24) | (*(_BYTE *)(a5 + 6) << 16) | (*(_BYTE *)(a5 + 5) << 8) | *(_BYTE *)(a5 + 4);
    v49 = a3 - 8;
    if ( !v26 )
    {
      v28 = v6;
      v43 = (v27 + 8) >> 3;
      v49 += -8 * v43;
      do
      {
        v30 = (*(_BYTE *)(v7 + 5) << 8) | *(_BYTE *)(v7 + 4);
        v40 = (*(_BYTE *)(v7 + 3) << 24) | (*(_BYTE *)(v7 + 2) << 16) | (*(_BYTE *)(v7 + 1) << 8) | *(_BYTE *)v7;
        v29 = v40;
        v25 = (*(_BYTE *)(v7 + 7) << 24) | (*(_BYTE *)(v7 + 6) << 16) | v30;
        v46 = v7 + 8;
        v41 = v25;
        sub_10B82CE(&v40, a4);
        v31 = v50 ^ v40;
        v32 = v45 ^ v41;
        *(_BYTE *)v28 = v50 ^ v40;
        *(_BYTE *)(v28 + 1) = BYTE1(v31);
        *(_BYTE *)(v28 + 2) = (unsigned int)v31 >> 16;
        *(_BYTE *)(v28 + 3) = BYTE3(v31);
        v24 = v29;
        *(_BYTE *)(v28 + 4) = v32;
        *(_BYTE *)(v28 + 5) = BYTE1(v32);
        *(_BYTE *)(v28 + 6) = (unsigned int)v32 >> 16;
        *(_BYTE *)(v28 + 7) = BYTE3(v32);
        v28 += 8;
        v17 = v43-- == 1;
        v7 = v46;
        v50 = v29;
        v45 = v25;
      }
      while ( !v17 );
      v27 = v49;
      v44 = v28;
      v23 = v42;
      v6 = v44;
    }
    if ( v27 == -8 )
    {
      v39 = v45;
    }
    else
    {
      v33 = *(_BYTE *)(v7 + 5);
      v42 = (*(_BYTE *)(v7 + 3) << 24) | (*(_BYTE *)(v7 + 2) << 16) | (*(_BYTE *)(v7 + 1) << 8) | *(_BYTE *)v7;
      v40 = v42;
      v34 = (v33 << 8) | *(_BYTE *)(v7 + 4);
      v35 = *(_BYTE *)(v7 + 6);
      v44 = v34;
      v44 = ((v35 | (*(_BYTE *)(v7 + 7) << 8)) << 16) | v34;
      v41 = v44;
      sub_10B82CE(&v40, a4);
      v36 = v25 ^ v41;
      v37 = v50 ^ v40;
      v51 = v25 ^ v41;
      v38 = v6 + v49 + 8;
      switch ( v49 + 7 )
      {
        case 7u:
          --v38;
          *(_BYTE *)v38 = BYTE3(v36);
          v36 = v51;
          goto LABEL_25;
        case 6u:
LABEL_25:
          --v38;
          *(_BYTE *)v38 = (unsigned int)v36 >> 16;
          BYTE1(v36) = BYTE1(v51);
          goto LABEL_26;
        case 5u:
LABEL_26:
          --v38;
          *(_BYTE *)v38 = BYTE1(v36);
          LOBYTE(v36) = v51;
          goto LABEL_27;
        case 4u:
LABEL_27:
          --v38;
          *(_BYTE *)v38 = v36;
          goto LABEL_28;
        case 3u:
LABEL_28:
          --v38;
          *(_BYTE *)v38 = BYTE3(v37);
          goto LABEL_29;
        case 2u:
LABEL_29:
          --v38;
          *(_BYTE *)v38 = (unsigned int)v37 >> 16;
          goto LABEL_30;
        case 1u:
LABEL_30:
          --v38;
          *(_BYTE *)v38 = BYTE1(v37);
          goto LABEL_31;
        case 0u:
LABEL_31:
          *(_BYTE *)(v38 - 1) = v37;
          break;
        default:
          break;
      }
      v24 = v42;
      v39 = v44;
    }
    *(_BYTE *)v23 = v24;
    *(_BYTE *)(v23 + 1) = BYTE1(v24);
    *(_BYTE *)(v23 + 2) = (unsigned int)v24 >> 16;
    *(_BYTE *)(v23 + 3) = BYTE3(v24);
    *(_BYTE *)(v23 + 4) = v39;
    *(_BYTE *)(v23 + 5) = BYTE1(v39);
    result = v39 >> 16;
    *(_BYTE *)(v23 + 6) = v39 >> 16;
    *(_BYTE *)(v23 + 7) = BYTE3(v39);
  }
  return result;
}

int __fastcall sub_10B82CE(int a1, int a2)
{
  int v2; // eax@1
  int v3; // esi@1
  int v4; // esi@2
  int v5; // esi@2
  int v6; // eax@2
  int v7; // eax@2
  int v8; // esi@2
  int v9; // esi@2
  int v10; // eax@2
  int v11; // eax@2
  int v12; // esi@2
  int v13; // esi@2
  int v14; // eax@2
  int v15; // eax@2
  int v16; // esi@2
  int v17; // eax@2
  int v18; // esi@4
  int v19; // esi@4
  int v20; // eax@4
  int v21; // eax@4
  int v22; // esi@4
  int v23; // esi@4
  int v24; // eax@4
  int v25; // eax@4
  int v26; // esi@4
  int v27; // esi@4
  int v28; // eax@4
  int v29; // eax@4
  int v30; // esi@4
  int v31; // eax@4
  int v32; // esi@5
  int v33; // esi@5
  int v34; // eax@5
  int v35; // eax@5
  int v36; // esi@5
  int v37; // esi@5
  int v38; // eax@5
  int v39; // eax@5
  int v40; // esi@5
  int v41; // esi@5
  int v42; // eax@5
  int v43; // eax@5
  int v44; // esi@5
  int v45; // esi@5
  int v46; // eax@5
  int v47; // eax@5
  int v48; // esi@5
  int v49; // esi@5
  int v50; // eax@5
  int v51; // eax@5
  int v52; // esi@5
  int v53; // esi@5
  int v54; // eax@5
  int v55; // eax@5
  int v56; // esi@5
  int v57; // esi@5
  int v58; // eax@5
  int v59; // eax@5
  int v60; // esi@5
  int v61; // esi@5
  int v62; // eax@5
  int result; // eax@5

  v2 = *(_DWORD *)a1;
  v3 = *(_DWORD *)(a1 + 4);
  if ( *(_DWORD *)a2 == 16 )
  {
    v4 = __ROR__(v3 - *(_DWORD *)(a2 + 136), v2 & 0x1F);
    v5 = v2 ^ v4;
    v6 = __ROR__(v2 - *(_DWORD *)(a2 + 132), v5 & 0x1F);
    v7 = v5 ^ v6;
    v8 = __ROR__(v5 - *(_DWORD *)(a2 + 128), v7 & 0x1F);
    v9 = v7 ^ v8;
    v10 = __ROR__(v7 - *(_DWORD *)(a2 + 124), v9 & 0x1F);
    v11 = v9 ^ v10;
    v12 = __ROR__(v9 - *(_DWORD *)(a2 + 120), v11 & 0x1F);
    v13 = v11 ^ v12;
    v14 = __ROR__(v11 - *(_DWORD *)(a2 + 116), v13 & 0x1F);
    v15 = v13 ^ v14;
    v16 = __ROR__(v13 - *(_DWORD *)(a2 + 112), v15 & 0x1F);
    v3 = v15 ^ v16;
    v17 = __ROR__(v15 - *(_DWORD *)(a2 + 108), v3 & 0x1F);
    v2 = v3 ^ v17;
LABEL_4:
    v18 = __ROR__(v3 - *(_DWORD *)(a2 + 104), v2 & 0x1F);
    v19 = v2 ^ v18;
    v20 = __ROR__(v2 - *(_DWORD *)(a2 + 100), v19 & 0x1F);
    v21 = v19 ^ v20;
    v22 = __ROR__(v19 - *(_DWORD *)(a2 + 96), v21 & 0x1F);
    v23 = v21 ^ v22;
    v24 = __ROR__(v21 - *(_DWORD *)(a2 + 92), v23 & 0x1F);
    v25 = v23 ^ v24;
    v26 = __ROR__(v23 - *(_DWORD *)(a2 + 88), v25 & 0x1F);
    v27 = v25 ^ v26;
    v28 = __ROR__(v25 - *(_DWORD *)(a2 + 84), v27 & 0x1F);
    v29 = v27 ^ v28;
    v30 = __ROR__(v27 - *(_DWORD *)(a2 + 80), v29 & 0x1F);
    v3 = v29 ^ v30;
    v31 = __ROR__(v29 - *(_DWORD *)(a2 + 76), v3 & 0x1F);
    v2 = v3 ^ v31;
    goto LABEL_5;
  }
  if ( *(_DWORD *)a2 == 12 )
    goto LABEL_4;
LABEL_5:
  v32 = __ROR__(v3 - *(_DWORD *)(a2 + 72), v2 & 0x1F);
  v33 = v2 ^ v32;
  v34 = __ROR__(v2 - *(_DWORD *)(a2 + 68), v33 & 0x1F);
  v35 = v33 ^ v34;
  v36 = __ROR__(v33 - *(_DWORD *)(a2 + 64), v35 & 0x1F);
  v37 = v35 ^ v36;
  v38 = __ROR__(v35 - *(_DWORD *)(a2 + 60), v37 & 0x1F);
  v39 = v37 ^ v38;
  v40 = __ROR__(v37 - *(_DWORD *)(a2 + 56), v39 & 0x1F);
  v41 = v39 ^ v40;
  v42 = __ROR__(v39 - *(_DWORD *)(a2 + 52), v41 & 0x1F);
  v43 = v41 ^ v42;
  v44 = __ROR__(v41 - *(_DWORD *)(a2 + 48), v43 & 0x1F);
  v45 = v43 ^ v44;
  v46 = __ROR__(v43 - *(_DWORD *)(a2 + 44), v45 & 0x1F);
  v47 = v45 ^ v46;
  v48 = __ROR__(v45 - *(_DWORD *)(a2 + 40), v47 & 0x1F);
  v49 = v47 ^ v48;
  v50 = __ROR__(v47 - *(_DWORD *)(a2 + 36), v49 & 0x1F);
  v51 = v49 ^ v50;
  v52 = __ROR__(v49 - *(_DWORD *)(a2 + 32), v51 & 0x1F);
  v53 = v51 ^ v52;
  v54 = __ROR__(v51 - *(_DWORD *)(a2 + 28), v53 & 0x1F);
  v55 = v53 ^ v54;
  v56 = __ROR__(v53 - *(_DWORD *)(a2 + 24), v55 & 0x1F);
  v57 = v55 ^ v56;
  v58 = __ROR__(v55 - *(_DWORD *)(a2 + 20), v57 & 0x1F);
  v59 = v57 ^ v58;
  v60 = __ROR__(v57 - *(_DWORD *)(a2 + 16), v59 & 0x1F);
  v61 = v59 ^ v60;
  v62 = __ROR__(v59 - *(_DWORD *)(a2 + 12), v61 & 0x1F);
  result = (v61 ^ v62) - *(_DWORD *)(a2 + 4);
  *(_DWORD *)(a1 + 4) = v61 - *(_DWORD *)(a2 + 8);
  *(_DWORD *)a1 = result;
  return result;
}






密文BUF:2D 0F 0D 8F4F2D23F7679814B073346D36AD89C38F5185F1CE        0x18个字节
解密出来得到:http://www.hao123.com/

最后,我想说的是我只想逆向还原,考虑到copy IDA f5的东西不现实,希望会的说下是什么算法,这样我好网上找其实现的源码来还原.希望懂的说下,谢谢了~!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 615
活跃值: (530)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
能逆向算法的都是大神,赶紧膜拜先,其实就是把汇编代码 用 高级C++“还原”,其实我也不会,期待高手,
2016-1-4 10:19
0
雪    币: 33
活跃值: (759)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
RC6 试试
2016-1-4 11:35
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
RC6没试过,但是RC5试过了好像不对,我现在去试试RC6看看
2016-1-4 12:11
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也不是什么大神,就是od追踪加解密算法而已,还原也是IDA f5再修改一下而已
2016-1-4 13:41
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
6
就是RC6,等会发帖写出分析结果,你是一语中的啊
2016-1-4 14:22
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你用RC6测试出来相同结果了?
2016-1-4 14:28
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
8
我分析出来是RC6了,非常确定,现在还在看代码,看能不能找出加密的key
2016-1-4 14:44
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好吧,我下载个RC6加解密源码来试试
2016-1-4 14:46
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
10
加密key要运行起来才能看到.........
好了,我就发个贴总结一下过程吧
2016-1-4 14:48
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
11
2016-1-4 15:03
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=zplusplus;1409959]已总结,欢迎围观
http://bbs.pediy.com/showthread.php?p=1409958#post1409958[/QUOTE]

我在看帖了,sub_10B845F函数出来得到一个BUF确实和RC6的BUF相同,我现在下源码解密,不管怎样,非常感谢你~!
2016-1-4 15:14
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
13
我就搞不懂要别人帮忙,程序都不敢放出来。动态调试加静态分析不是更快吗?万一不是标准的算法,这既是浪费大家的时间,也是浪费你自己的时间。
2016-1-4 22:20
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
有F5的功夫不如F7、F8来的实惠。
2016-1-5 08:13
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
额,有些事还是点到为止,剩下的是标准或者非标准自己动手弄一下都是对自己有好处的,程序真的不好放出来,还望大哥理解
2016-1-5 14:30
0
游客
登录 | 注册 方可回帖
返回
//