首页
社区
课程
招聘
[旧帖] [求助]找出加密算法? 0.00雪花
发表于: 2009-12-17 03:51 1139

[旧帖] [求助]找出加密算法? 0.00雪花

2009-12-17 03:51
1139
小弟最近在用HEX-RAYS反编译一个DLL,里面找到一函数,听说里面有加密算法,我实在找不到头绪,请大家帮我看看,DLL在最下面,代号如下:

int __cdecl M5(const char *a1, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31, int a32, int a33, int a34, int a35, int a36, int a37, int a38, int a39, int a40, int a41, int a42, int a43, int a44, int a45, int a46, int a47, int a48, int a49, int a50, int a51, int a52, int a53, int a54, int a55, int a56, int a57, int a58, int a59, int a60, int a61, int a62, int a63)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  int ST3C_4_0; // ST3C_4@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  int ST54_4_0; // ST54_4@0
  int ST58_4_0; // ST58_4@0
  int ST5C_4_0; // ST5C_4@0
  int ST60_4_0; // ST60_4@0
  int ST64_4_0; // ST64_4@0
  int ST68_4_0; // ST68_4@0
  int ST6C_4_0; // ST6C_4@0
  int ST70_4_0; // ST70_4@0
  int ST74_4_0; // ST74_4@0
  int ST78_4_0; // ST78_4@0
  int ST7C_4_0; // ST7C_4@0
  int ST80_4_0; // ST80_4@0
  int ST84_4_0; // ST84_4@0
  int ST88_4_0; // ST88_4@0
  int ST8C_4_0; // ST8C_4@0
  int ST90_4_0; // ST90_4@0
  int ST94_4_0; // ST94_4@0
  int ST98_4_0; // ST98_4@0
  int ST9C_4_0; // ST9C_4@0
  int STA0_4_0; // STA0_4@0
  int STA4_4_0; // STA4_4@0
  int STA8_4_0; // STA8_4@0
  int STAC_4_0; // STAC_4@0
  int STB0_4_0; // STB0_4@0
  int STB4_4_0; // STB4_4@0
  int STB8_4_0; // STB8_4@0
  int STBC_4_0; // STBC_4@0
  int STC0_4_0; // STC0_4@0
  int STC4_4_0; // STC4_4@0
  int STC8_4_0; // STC8_4@0
  int STCC_4_0; // STCC_4@0
  int STD0_4_0; // STD0_4@0
  int STD4_4_0; // STD4_4@0
  int STD8_4_0; // STD8_4@0
  int STDC_4_0; // STDC_4@0
  int STE0_4_0; // STE0_4@0
  int STE4_4_0; // STE4_4@0
  int STE8_4_0; // STE8_4@0
  int STEC_4_0; // STEC_4@0
  int STF0_4_0; // STF0_4@0
  int STF4_4_0; // STF4_4@0
  int STF8_4_0; // STF8_4@0
  unsigned int v310; // edx@6
  char *v311; // ecx@10
  int v312; // edx@11
  signed int v313; // eax@28
  signed int *v314; // ecx@52
  int v315; // edx@53
  char *v316; // ecx@104
  int v317; // edx@105
  signed int *v318; // ecx@109
  int v319; // edx@110
  char *v320; // ST00_4@114
  const char *v321; // ST04_4@114
  char *v322; // ecx@124
  int v323; // edx@125
  signed int *v324; // ecx@129
  int v325; // edx@130
  int v326; // eax@141
  char *v327; // ecx@147
  int v328; // edx@148
  signed int *v329; // ecx@152
  int v330; // edx@153
  char *v331; // ecx@158
  int v332; // edx@159
  signed int *v333; // ecx@163
  int v334; // edx@164
  char *v335; // ecx@169
  int v336; // edx@170
  signed int *v337; // ecx@174
  int v338; // edx@175
  char *v339; // ecx@180
  int v340; // edx@181
  signed int *v341; // ecx@185
  int v342; // edx@186
  char *v343; // ecx@227
  int v344; // edx@228
  size_t v345; // eax@232
  char *v346; // ecx@234
  int v347; // edx@235
  char *v348; // ecx@240
  int v349; // edx@241
  char *v350; // ecx@246
  int v351; // edx@247
  char *v352; // ecx@252
  int v353; // edx@253
  char *v354; // ecx@258
  int v355; // edx@259
  char *v356; // ecx@268
  int v357; // edx@269
  int v358; // eax@11
  size_t v359; // eax@37
  size_t v360; // eax@37
  size_t v361; // eax@37
  size_t v362; // eax@47
  int v363; // ST0C_4@47
  unsigned int v364; // eax@48
  size_t v365; // eax@52
  size_t v366; // eax@52
  size_t v367; // eax@52
  size_t v368; // eax@52
  size_t v369; // eax@52
  signed int v370; // eax@53
  size_t v371; // eax@66
  unsigned int v372; // eax@81
  size_t v373; // eax@84
  size_t v374; // eax@84
  size_t v375; // eax@84
  int v376; // eax@105
  signed int v377; // eax@110
  unsigned int v378; // eax@118
  int v379; // eax@125
  signed int v380; // eax@130
  unsigned int v381; // eax@137
  int v382; // eax@148
  signed int v383; // eax@153
  int v384; // eax@159
  signed int v385; // eax@164
  int v386; // eax@170
  signed int v387; // eax@175
  int v388; // eax@181
  signed int v389; // eax@186
  unsigned int v390; // eax@193
  unsigned int v391; // eax@202
  unsigned int v392; // eax@211
  unsigned int v393; // eax@220
  int v394; // eax@228
  int v395; // eax@235
  int v396; // eax@241
  int v397; // eax@247
  int v398; // eax@253
  int v399; // eax@259
  int v400; // eax@269
  int (__cdecl *v401)(int, int, int, int, int, int); // [sp+574h] [bp-7B4h]@1
  int *v402; // [sp+578h] [bp-7B0h]@1
  char v403; // [sp+D10h] [bp-18h]@1
  char *v404; // [sp+57Ch] [bp-7ACh]@1
  ? v405; // [sp+580h] [bp-7A8h]@1
  int v406; // [sp+0h] [bp-D28h]@1
  int *v407; // [sp+584h] [bp-7A4h]@1
  char v408; // [sp+55Ch] [bp-7CCh]@1
  int v409; // [sp+558h] [bp-7D0h]@3
  char v410; // [sp+D00h] [bp-28h]@6
  char v411; // [sp+D01h] [bp-27h]@6
  char v412; // [sp+D09h] [bp-1Fh]@6
  char *v413; // [sp+3CCh] [bp-95Ch]@6
  int v414; // [sp+4h] [bp-D24h]@7
  signed int v415; // [sp+560h] [bp-7C8h]@8
  char v416; // [sp+557h] [bp-7D1h]@8
  char v417; // [sp+CF1h] [bp-37h]@8
  char v418; // [sp+CF9h] [bp-2Fh]@8
  signed int v419; // [sp+CF0h] [bp-38h]@8
  char v420; // [sp+CF4h] [bp-34h]@8
  char v421; // [sp+BF0h] [bp-138h]@8
  char v422; // [sp+BF1h] [bp-137h]@8
  char v423; // [sp+AF0h] [bp-238h]@8
  char v424; // [sp+AF1h] [bp-237h]@8
  int v425; // [sp+9A0h] [bp-388h]@15
  char v426; // [sp+AD0h] [bp-258h]@15
  const char *v427; // [sp+AB0h] [bp-278h]@26
  const char *v428; // [sp+AC0h] [bp-268h]@26
  char v429; // [sp+4BFh] [bp-869h]@26
  char v430; // [sp+590h] [bp-798h]@26
  char v431; // [sp+591h] [bp-797h]@26
  signed int v432; // [sp+8A0h] [bp-488h]@26
  int v433; // [sp+3F0h] [bp-938h]@38
  int v434; // [sp+3E4h] [bp-944h]@39
  int v435; // [sp+3D8h] [bp-950h]@40
  const char *v436; // [sp+AE0h] [bp-248h]@47
  char v437; // [sp+9B0h] [bp-378h]@47
  char v438; // [sp+9B1h] [bp-377h]@47
  int v439; // [sp+548h] [bp-7E0h]@47
  unsigned int v440; // [sp+540h] [bp-7E8h]@48
  unsigned int v441; // [sp+544h] [bp-7E4h]@48
  int v442; // [sp+534h] [bp-7F4h]@50
  int v443; // [sp+528h] [bp-800h]@51
  _BYTE v444[248]; // [sp+8A8h] [bp-480h]@52
  signed int v445; // [sp+8A4h] [bp-484h]@52
  __int16 v446; // [sp+8AAh] [bp-47Eh]@52
  int v447; // [sp+51Ch] [bp-80Ch]@58
  int v448; // [sp+510h] [bp-818h]@59
  int v449; // [sp+504h] [bp-824h]@60
  char v450; // [sp+690h] [bp-698h]@66
  char v451; // [sp+87Ch] [bp-4ACh]@66
  char v452; // [sp+88Dh] [bp-49Bh]@66
  int v453; // [sp+4D8h] [bp-850h]@67
  int v454; // [sp+4CCh] [bp-85Ch]@68
  int v455; // [sp+4C0h] [bp-868h]@69
  int v456; // [sp+4F8h] [bp-830h]@80
  unsigned int v457; // [sp+4F0h] [bp-838h]@81
  unsigned int v458; // [sp+4F4h] [bp-834h]@81
  int v459; // [sp+4E4h] [bp-844h]@83
  int v460; // [sp+410h] [bp-918h]@117
  unsigned int v461; // [sp+408h] [bp-920h]@118
  unsigned int v462; // [sp+40Ch] [bp-91Ch]@118
  int v463; // [sp+3FCh] [bp-92Ch]@120
  int v464; // [sp+430h] [bp-8F8h]@136
  unsigned int v465; // [sp+428h] [bp-900h]@137
  unsigned int v466; // [sp+42Ch] [bp-8FCh]@137
  int v467; // [sp+41Ch] [bp-90Ch]@139
  int v468; // [sp+450h] [bp-8D8h]@192
  unsigned int v469; // [sp+448h] [bp-8E0h]@193
  unsigned int v470; // [sp+44Ch] [bp-8DCh]@193
  int v471; // [sp+43Ch] [bp-8ECh]@195
  int v472; // [sp+470h] [bp-8B8h]@201
  unsigned int v473; // [sp+468h] [bp-8C0h]@202
  unsigned int v474; // [sp+46Ch] [bp-8BCh]@202
  int v475; // [sp+45Ch] [bp-8CCh]@204
  int v476; // [sp+490h] [bp-898h]@210
  unsigned int v477; // [sp+488h] [bp-8A0h]@211
  unsigned int v478; // [sp+48Ch] [bp-89Ch]@211
  int v479; // [sp+47Ch] [bp-8ACh]@213
  int v480; // [sp+4B0h] [bp-878h]@219
  unsigned int v481; // [sp+4A8h] [bp-880h]@220
  unsigned int v482; // [sp+4ACh] [bp-87Ch]@220
  int v483; // [sp+49Ch] [bp-88Ch]@222

  v401 = sub_6774C900;
  v402 = dword_6778C114;
  v404 = &v403;
  v405 = loc_677441E0;
  v407 = &v406;
  sub_67758690(&v408);
  if ( strlen(a1) == 108 )
  {
    v409 = a245 & 0xF;
    if ( !(a245 & 0xF) )
    {
      if ( *(_BYTE *)a244 && strlen(a247) == 44 )
      {
        v310 = 0;
        v410 = byte_6778F0EA;
        memset(&v411, v409, 8u);
        v412 = 0;
        v413 = &v410;
        do
        {
          *((_BYTE *)&v414 + v310) = *(&a2 + v310);
          ++v310;
        }
        while ( v310 < 0x3C8 );
        v415 = -1;
        M16(
          a1,
          ST04_1_0,
          ST08_4_0,
          ST0C_4_0,
          ST10_4_0,
          ST14_4_0,
          ST18_4_0,
          ST1C_4_0,
          ST20_4_0,
          ST24_4_0,
          ST28_4_0,
          ST2C_4_0,
          ST30_4_0,
          ST34_4_0,
          ST38_4_0,
          ST3C_4_0,
          ST40_4_0,
          ST44_4_0,
          ST48_4_0,
          ST4C_4_0,
          ST50_4_0,
          ST54_4_0,
          ST58_4_0,
          ST5C_4_0,
          ST60_4_0,
          ST64_4_0,
          ST68_4_0,
          ST6C_4_0,
          ST70_4_0,
          ST74_4_0,
          ST78_4_0,
          ST7C_4_0,
          ST80_4_0,
          ST84_4_0,
          ST88_4_0,
          ST8C_4_0,
          ST90_4_0,
          ST94_4_0,
          ST98_4_0,
          ST9C_4_0,
          STA0_4_0,
          STA4_4_0,
          STA8_4_0,
          STAC_4_0,
          STB0_4_0,
          STB4_4_0,
          STB8_4_0,
          STBC_4_0,
          STC0_4_0,
          STC4_4_0,
          STC8_4_0,
          STCC_4_0,
          STD0_4_0,
          STD4_4_0,
          STD8_4_0,
          STDC_4_0,
          STE0_4_0,
          STE4_4_0,
          STE8_4_0,
          STEC_4_0,
          STF0_4_0,
          STF4_4_0,
          STF8_4_0);
        v416 = byte_6778F0EA;
        memset(&v417, 0, 8u);
        v418 = 0;
        v419 = 1918985570;
        v420 = 0;
        v421 = byte_6778F0EA;
        memset(&v422, 0, 0xFEu);
        v423 = v416;
        memset(&v424, 0, 0xFEu);
        if ( strlen(a1) == 108 )
        {
          if ( !strcmp(&v410, (const char *)&v419) )
          {
            if ( !(a245 & 0xF) )
            {
              if ( *(_BYTE *)a244 )
              {
                if ( strlen(a247) == 44 )
                {
                  strlen(a1);
                  strcmp(&v410, (const char *)&v419);
                  v415 = 84;
                  sub_6777C790(&v436, &unk_6778F20F, &v426);
                  v362 = strlen(a247);
                  v415 = 83;
                  sub_6777ACB0(&v436, a247, v362);
                  v415 = 82;
                  sub_6777C790(&v428, &unk_6778F20F, &v426);
                  v415 = 81;
                  sub_6777C790(&v427, &unk_6778F20F, &v426);
                  v437 = byte_6778F0EA;
                  memset(&v438, 0, 0xFEu);
                  v363 = *((_DWORD *)v436 - 3) >> 1;
                  v415 = 80;
                  sub_6777C960(&v425, &v436, 0, v363);
                  v415 = 79;
                  sub_6777B160(&v427, &v425);
                  v439 = v425 - 12;
                  if ( v425 - 12 != (_DWORD)&unk_6778E1A0 )
                  {
                    v415 = 77;
                    if ( sub_6774F980(v425 - 4, -1) <= 0 )
                      sub_6777A5D0(v439);
                  }
                  v364 = *((_DWORD *)v436 - 3);
                  v440 = *((_DWORD *)v436 - 3);
                  v364 >>= 1;
                  v441 = v364;
                  if ( v440 < v364 )
                  {
                    v415 = 80;
                    sub_6774ECD0("basic_string::substr");
                  }
                  v415 = 80;
                  sub_6777C960(&v425, &v436, v441, v440);
                  v415 = 76;
                  sub_6777B160(&v428, &v425);
                  v442 = v425 - 12;
                  if ( v425 - 12 != (_DWORD)&unk_6778E1A0 )
                  {
                    v415 = 74;
                    if ( sub_6774F980(v425 - 4, -1) <= 0 )
                      sub_6777A5D0(v442);
                  }
                  v415 = 80;
                  sub_6778B1E0(&v425);
                  v415 = 73;
                  sub_6777B160(&v436, &v425);
                  v443 = v425 - 12;
                  if ( v425 - 12 != (_DWORD)&unk_6778E1A0 )
                  {
                    v415 = 71;
                    if ( sub_6774F980(v425 - 4, -1) <= 0 )
                      sub_6777A5D0(v443);
                  }
                  v415 = 80;
                  strcpy(&v437, v436);
                  v365 = strlen((const char *)&unk_6778F20F);
                  sub_6777B050(&v436, &unk_6778F20F, v365);
                  v366 = strlen((const char *)&unk_6778F20F);
                  sub_6777B050(&v428, &unk_6778F20F, v366);
                  v367 = strlen((const char *)&unk_6778F20F);
                  sub_6777B050(&v427, &unk_6778F20F, v367);
                  LOBYTE(v432) = byte_6778F0EA;
                  memset((char *)&v432 + 1, 0, 0xFEu);
                  v444[0] = 0;
                  v432 = 942420825;
                  v445 = 1480540268;
                  v368 = strlen((const char *)&v432);
                  *(signed int *)((char *)&v432 + v368) = 2067094910;
                  *((_BYTE *)&v446 + v368) = 0;
                  *(signed int *)((char *)&v445 + v368) = 1462644809;
                  *(_WORD *)&v444[v368] = 13884;
                  v369 = strlen((const char *)&v432);
                  *(signed int *)((char *)&v445 + v369) = 2830637;
                  v314 = &v432;
                  *(signed int *)((char *)&v432 + v369) = 695025246;
                  do
                  {
                    v370 = *v314;
                    ++v314;
                    v315 = ~v370 & (v370 - 16843009) & 0x80808080;
                  }
                  while ( !v315 );
                  if ( !(v315 & 0x8080) )
                  {
                    v315 = (unsigned int)v315 >> 16;
                    v314 = (signed int *)((char *)v314 + 2);
                  }
                  if ( (char *)v314 + -__MKCADD__(v315, v315) - 3 - (char *)&v432 == 25 )
                  {
                    v450 = 0;
                    v451 = 0;
                    v452 = 0;
                    v415 = 80;
                    sub_6774B320(&v450, &v432, 16);
                    LOBYTE(v432) = 0;
                    v430 = byte_6778F0EA;
                    memset(&v431, 0, 0xFEu);
                    v356 = &v437;
                    do
                    {
                      v400 = *(_DWORD *)v356;
                      v356 += 4;
                      v357 = ~v400 & (v400 - 16843009) & 0x80808080;
                    }
                    while ( !v357 );
                    if ( !(v357 & 0x8080) )
                    {
                      v357 = (unsigned int)v357 >> 16;
                      v356 += 2;
                    }
                    if ( &v356[-__MKCADD__(v357, v357) - 3] - &v437 == 44 )
                    {
                      v415 = 80;
                      sub_67741270(&v437, &v430, 45);
                      sub_6774C130(&v450, &v430, &v423, 32, 0);
                    }
                    else
                    {
                      v437 = 0;
                    }
                  }
                  else
                  {
                    LOBYTE(v432) = 0;
                  }
                  v447 = (int)(v427 - 12);
                  if ( (_UNKNOWN *)(v427 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 69;
                    if ( sub_6774F980(v427 - 4, -1) <= 0 )
                      sub_6777A5D0(v447);
                  }
                  v448 = (int)(v428 - 12);
                  if ( (_UNKNOWN *)(v428 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 67;
                    if ( sub_6774F980(v428 - 4, -1) <= 0 )
                      sub_6777A5D0(v448);
                  }
                  v449 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 65;
                    if ( sub_6774F980(v436 - 4, -1) <= 0 )
                      sub_6777A5D0(v449);
                  }
                }
              }
            }
          }
        }
        if ( strlen(a1) == 108 )
        {
          v311 = &v423;
          do
          {
            v358 = *(_DWORD *)v311;
            v311 += 4;
            v312 = ~v358 & (v358 - 16843009) & 0x80808080;
          }
          while ( !v312 );
          if ( !(v312 & 0x8080) )
          {
            v312 = (unsigned int)v312 >> 16;
            v311 += 2;
          }
          if ( &v311[-__MKCADD__(v312, v312) - 3] - &v423 == 25 )
          {
            if ( !strcmp(&v410, (const char *)&v419) )
            {
              if ( !(a245 & 0xF) )
              {
                if ( *(_BYTE *)a244 )
                {
                  v430 = byte_6778F0EA;
                  memset(&v431, 0, 0xFEu);
                  v450 = 0;
                  v451 = 0;
                  v452 = 0;
                  v415 = 64;
                  sub_6777C790(&v425, &unk_6778F20F, &v426);
                  v371 = strlen(&v423);
                  v415 = 63;
                  sub_6777ACB0(&v425, &v423, v371);
                  v415 = 62;
                  sub_6777C790(&v427, &unk_6778F20F, &v426);
                  v415 = 61;
                  sub_6777C790(&v428, &unk_6778F20F, &v426);
                  v423 = 0;
                  if ( *(_DWORD *)(v425 - 12) == 25 )
                  {
                    if ( !(a245 & 0xF) )
                    {
                      if ( *(_BYTE *)a244 )
                      {
                        v415 = 60;
                        sub_6777C960(&v436, &v425, 0, 12);
                        v415 = 59;
                        sub_6777B160(&v427, &v436);
                        v456 = (int)(v436 - 12);
                        if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                        {
                          v415 = 57;
                          if ( sub_6774F980(v436 - 4, -1) <= 0 )
                            sub_6777A5D0(v456);
                        }
                        v372 = *(_DWORD *)(v425 - 12);
                        v457 = *(_DWORD *)(v425 - 12);
                        v372 >>= 1;
                        v458 = v372;
                        if ( v457 < v372 )
                        {
                          v415 = 60;
                          sub_6774ECD0("basic_string::substr");
                        }
                        v415 = 60;
                        sub_6777C960(&v436, &v425, v458, v457);
                        v415 = 56;
                        sub_6777B160(&v428, &v436);
                        v459 = (int)(v436 - 12);
                        if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                        {
                          v415 = 54;
                          if ( sub_6774F980(v436 - 4, -1) <= 0 )
                            sub_6777A5D0(v459);
                        }
                        v373 = strlen((const char *)&unk_6778F20F);
                        v415 = 60;
                        sub_6777B050(&v425, &unk_6778F20F, v373);
                        strcpy(&v423, v428);
                        *(_WORD *)(&v423 + strlen(&v423)) = 42;
                        strcat(&v423, v427);
                        v374 = strlen((const char *)&unk_6778F20F);
                        sub_6777B050(&v427, &unk_6778F20F, v374);
                        v375 = strlen((const char *)&unk_6778F20F);
                        sub_6777B050(&v428, &unk_6778F20F, v375);
                        sub_6774B320(&v450, &v423, 16);
                        v423 = 0;
                        sub_6774BA40(&v450, a244, &v430, a245, 0);
                        sub_67741180(&v430, &v421, a245);
                      }
                    }
                  }
                  v453 = (int)(v428 - 12);
                  if ( (_UNKNOWN *)(v428 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 52;
                    if ( sub_6774F980(v428 - 4, -1) <= 0 )
                      sub_6777A5D0(v453);
                  }
                  v454 = (int)(v427 - 12);
                  if ( (_UNKNOWN *)(v427 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 50;
                    if ( sub_6774F980(v427 - 4, -1) <= 0 )
                      sub_6777A5D0(v454);
                  }
                  v455 = v425 - 12;
                  if ( v425 - 12 != (_DWORD)&unk_6778E1A0 )
                  {
                    v415 = 48;
                    if ( sub_6774F980(v425 - 4, -1) <= 0 )
                      sub_6777A5D0(v455);
                  }
                }
              }
            }
          }
        }
        v415 = 47;
        sub_6777C790(&v425, &unk_6778F20F, &v426);
        if ( strlen(a1) == 108 && !strcmp(&v410, (const char *)&v419) && v421 && !(a245 & 0xF) && *(_BYTE *)a244 )
        {
          if ( a245 == 16 )
          {
            v350 = &v421;
            do
            {
              v397 = *(_DWORD *)v350;
              v350 += 4;
              v351 = ~v397 & (v397 - 16843009) & 0x80808080;
            }
            while ( !v351 );
            if ( !(v351 & 0x8080) )
            {
              v351 = (unsigned int)v351 >> 16;
              v350 += 2;
            }
            if ( &v350[-__MKCADD__(v351, v351) - 3] - &v421 == 24 )
            {
              v345 = strlen(&v421);
              goto LABEL_233;
            }
          }
          if ( a245 == 32 )
          {
            v348 = &v421;
            do
            {
              v396 = *(_DWORD *)v348;
              v348 += 4;
              v349 = ~v396 & (v396 - 16843009) & 0x80808080;
            }
            while ( !v349 );
            if ( !(v349 & 0x8080) )
            {
              v349 = (unsigned int)v349 >> 16;
              v348 += 2;
            }
            if ( &v348[-__MKCADD__(v349, v349) - 3] - &v421 == 44 )
            {
              v345 = strlen(&v421);
              goto LABEL_233;
            }
          }
          if ( a245 == 48 )
          {
            v346 = &v421;
            do
            {
              v395 = *(_DWORD *)v346;
              v346 += 4;
              v347 = ~v395 & (v395 - 16843009) & 0x80808080;
            }
            while ( !v347 );
            if ( !(v347 & 0x8080) )
            {
              v347 = (unsigned int)v347 >> 16;
              v346 += 2;
            }
            if ( &v346[-__MKCADD__(v347, v347) - 3] - &v421 == 64 )
            {
              v345 = strlen(&v421);
              goto LABEL_233;
            }
          }
          if ( a245 == 64 )
          {
            v343 = &v421;
            do
            {
              v394 = *(_DWORD *)v343;
              v343 += 4;
              v344 = ~v394 & (v394 - 16843009) & 0x80808080;
            }
            while ( !v344 );
            if ( !(v344 & 0x8080) )
            {
              v344 = (unsigned int)v344 >> 16;
              v343 += 2;
            }
            if ( &v343[-__MKCADD__(v344, v344) - 3] - &v421 == 88 )
            {
              v345 = strlen(&v421);
LABEL_233:
              v415 = 46;
              sub_6777ACB0(&v425, &v421, v345);
              goto LABEL_26;
            }
          }
          if ( a245 == 80 )
          {
            v354 = &v421;
            do
            {
              v399 = *(_DWORD *)v354;
              v354 += 4;
              v355 = ~v399 & (v399 - 16843009) & 0x80808080;
            }
            while ( !v355 );
            if ( !(v355 & 0x8080) )
            {
              v355 = (unsigned int)v355 >> 16;
              v354 += 2;
            }
            if ( &v354[-__MKCADD__(v355, v355) - 3] - &v421 == 108 )
            {
              v345 = strlen(&v421);
              goto LABEL_233;
            }
          }
          if ( a245 == 160 )
          {
            v352 = &v421;
            do
            {
              v398 = *(_DWORD *)v352;
              v352 += 4;
              v353 = ~v398 & (v398 - 16843009) & 0x80808080;
            }
            while ( !v353 );
            if ( !(v353 & 0x8080) )
            {
              v353 = (unsigned int)v353 >> 16;
              v352 += 2;
            }
            if ( &v352[-__MKCADD__(v353, v353) - 3] - &v421 == 216 )
            {
              v345 = strlen(&v421);
              goto LABEL_233;
            }
          }
        }
LABEL_26:
        v415 = 45;
        sub_6777C790(&v427, &unk_6778F20F, &v426);
        v415 = 44;
        sub_6777C790(&v428, &unk_6778F20F, &v426);
        v429 = byte_6778F0EA;
        v430 = byte_6778F0EA;
        memset(&v431, 0, 0xFEu);
        LOBYTE(v432) = v429;
        memset((char *)&v432 + 1, 0, 0xFEu);
        if ( strlen(a1) == 108 )
        {
          if ( !strcmp(&v410, (const char *)&v419) )
          {
            v313 = *(_DWORD *)(v425 - 12);
            if ( v313 )
            {
              if ( !(a245 & 0xF) && *(_BYTE *)a244 )
              {
                if ( a245 == 16 && v313 == 24 )
                {
                  v415 = 43;
                  sub_6777C960(&v436, &v425, 0, 12);
                  v415 = 42;
                  sub_6777B160(&v427, &v436);
                  v480 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 40;
                    if ( sub_6774F980(v436 - 4, -1) <= 0 )
                      sub_6777A5D0(v480);
                  }
                  v393 = *(_DWORD *)(v425 - 12);
                  v481 = *(_DWORD *)(v425 - 12);
                  v393 >>= 1;
                  v482 = v393;
                  if ( v481 < v393 )
                  {
                    v415 = 43;
                    sub_6774ECD0("basic_string::substr");
                  }
                  v415 = 43;
                  sub_6777C960(&v436, &v425, v482, v481);
                  v415 = 39;
                  sub_6777B160(&v428, &v436);
                  v483 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) == &unk_6778E1A0 || (v415 = 37, sub_6774F980(v436 - 4, -1) > 0) )
                    goto LABEL_121;
                  v326 = v483;
                  goto LABEL_142;
                }
                if ( a245 == 32 && *(_DWORD *)(v425 - 12) == 44 )
                {
                  v415 = 43;
                  sub_6777C960(&v436, &v425, 0, 22);
                  v415 = 36;
                  sub_6777B160(&v427, &v436);
                  v476 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 34;
                    if ( sub_6774F980(v436 - 4, -1) <= 0 )
                      sub_6777A5D0(v476);
                  }
                  v392 = *(_DWORD *)(v425 - 12);
                  v477 = *(_DWORD *)(v425 - 12);
                  v392 >>= 1;
                  v478 = v392;
                  if ( v477 < v392 )
                  {
                    v415 = 43;
                    sub_6774ECD0("basic_string::substr");
                  }
                  v415 = 43;
                  sub_6777C960(&v436, &v425, v478, v477);
                  v415 = 33;
                  sub_6777B160(&v428, &v436);
                  v479 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) == &unk_6778E1A0 || (v415 = 31, sub_6774F980(v436 - 4, -1) > 0) )
                    goto LABEL_121;
                  v326 = v479;
                  goto LABEL_142;
                }
                if ( a245 == 48 && *(_DWORD *)(v425 - 12) == 64 )
                {
                  v415 = 43;
                  sub_6777C960(&v436, &v425, 0, 32);
                  v415 = 30;
                  sub_6777B160(&v427, &v436);
                  v472 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 28;
                    if ( sub_6774F980(v436 - 4, -1) <= 0 )
                      sub_6777A5D0(v472);
                  }
                  v391 = *(_DWORD *)(v425 - 12);
                  v473 = *(_DWORD *)(v425 - 12);
                  v391 >>= 1;
                  v474 = v391;
                  if ( v473 < v391 )
                  {
                    v415 = 43;
                    sub_6774ECD0("basic_string::substr");
                  }
                  v415 = 43;
                  sub_6777C960(&v436, &v425, v474, v473);
                  v415 = 27;
                  sub_6777B160(&v428, &v436);
                  v475 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) == &unk_6778E1A0 || (v415 = 25, sub_6774F980(v436 - 4, -1) > 0) )
                    goto LABEL_121;
                  v326 = v475;
                  goto LABEL_142;
                }
                if ( a245 == 64 && *(_DWORD *)(v425 - 12) == 88 )
                {
                  v415 = 43;
                  sub_6777C960(&v436, &v425, 0, 44);
                  v415 = 24;
                  sub_6777B160(&v427, &v436);
                  v468 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 22;
                    if ( sub_6774F980(v436 - 4, -1) <= 0 )
                      sub_6777A5D0(v468);
                  }
                  v390 = *(_DWORD *)(v425 - 12);
                  v469 = *(_DWORD *)(v425 - 12);
                  v390 >>= 1;
                  v470 = v390;
                  if ( v469 < v390 )
                  {
                    v415 = 43;
                    sub_6774ECD0("basic_string::substr");
                  }
                  v415 = 43;
                  sub_6777C960(&v436, &v425, v470, v469);
                  v415 = 21;
                  sub_6777B160(&v428, &v436);
                  v471 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) == &unk_6778E1A0 || (v415 = 19, sub_6774F980(v436 - 4, -1) > 0) )
                    goto LABEL_121;
                  v326 = v471;
                  goto LABEL_142;
                }
                if ( a245 == 80 && *(_DWORD *)(v425 - 12) == 108 )
                {
                  v415 = 43;
                  sub_6777C960(&v436, &v425, 0, 54);
                  v415 = 18;
                  sub_6777B160(&v427, &v436);
                  v464 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 16;
                    if ( sub_6774F980(v436 - 4, -1) <= 0 )
                      sub_6777A5D0(v464);
                  }
                  v381 = *(_DWORD *)(v425 - 12);
                  v465 = *(_DWORD *)(v425 - 12);
                  v381 >>= 1;
                  v466 = v381;
                  if ( v465 < v381 )
                  {
                    v415 = 43;
                    sub_6774ECD0("basic_string::substr");
                  }
                  v415 = 43;
                  sub_6777C960(&v436, &v425, v466, v465);
                  v415 = 15;
                  sub_6777B160(&v428, &v436);
                  v467 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) == &unk_6778E1A0 || (v415 = 13, sub_6774F980(v436 - 4, -1) > 0) )
                    goto LABEL_121;
                  v326 = v467;
                  goto LABEL_142;
                }
                if ( a245 == 160 && *(_DWORD *)(v425 - 12) == 216 )
                {
                  v415 = 43;
                  sub_6777C960(&v436, &v425, 0, 108);
                  v415 = 12;
                  sub_6777B160(&v427, &v436);
                  v460 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) != &unk_6778E1A0 )
                  {
                    v415 = 10;
                    if ( sub_6774F980(v436 - 4, -1) <= 0 )
                      sub_6777A5D0(v460);
                  }
                  v378 = *(_DWORD *)(v425 - 12);
                  v461 = *(_DWORD *)(v425 - 12);
                  v378 >>= 1;
                  v462 = v378;
                  if ( v461 < v378 )
                  {
                    v415 = 43;
                    sub_6774ECD0("basic_string::substr");
                  }
                  v415 = 43;
                  sub_6777C960(&v436, &v425, v462, v461);
                  v415 = 9;
                  sub_6777B160(&v428, &v436);
                  v463 = (int)(v436 - 12);
                  if ( (_UNKNOWN *)(v436 - 12) == &unk_6778E1A0 || (v415 = 7, sub_6774F980(v436 - 4, -1) > 0) )
                    goto LABEL_121;
                  v326 = v463;
LABEL_142:
                  sub_6777A5D0(v326);
LABEL_121:
                  v415 = 43;
                  strcpy(&v430, v427);
                  strcpy((char *)&v432, v428);
                  goto LABEL_37;
                }
              }
            }
          }
        }
LABEL_37:
        v359 = strlen((const char *)&unk_6778F20F);
        v415 = 43;
        sub_6777B050(&v425, &unk_6778F20F, v359);
        v360 = strlen((const char *)&unk_6778F20F);
        sub_6777B050(&v427, &unk_6778F20F, v360);
        v361 = strlen((const char *)&unk_6778F20F);
        sub_6777B050(&v428, &unk_6778F20F, v361);
        if ( strlen(a1) != 108
          || strcmp(&v410, (const char *)&v419)
          || !v430
          || !(_BYTE)v432
          || a245 & 0xF
          || !*(_BYTE *)a244 )
          goto LABEL_38;
        if ( a245 == 16 )
        {
          v339 = &v430;
          do
          {
            v388 = *(_DWORD *)v339;
            v339 += 4;
            v340 = ~v388 & (v388 - 16843009) & 0x80808080;
          }
          while ( !v340 );
          if ( !(v340 & 0x8080) )
          {
            v340 = (unsigned int)v340 >> 16;
            v339 += 2;
          }
          if ( &v339[-__MKCADD__(v340, v340) - 3] - &v430 == 12 )
          {
            v341 = &v432;
            do
            {
              v389 = *v341;
              ++v341;
              v342 = ~v389 & (v389 - 16843009) & 0x80808080;
            }
            while ( !v342 );
            if ( !(v342 & 0x8080) )
            {
              v342 = (unsigned int)v342 >> 16;
              v341 = (signed int *)((char *)v341 + 2);
            }
            if ( (char *)v341 + -__MKCADD__(v342, v342) - 3 - (char *)&v432 == 12 )
              goto LABEL_157;
          }
        }
        if ( a245 == 32 )
        {
          v335 = &v430;
          do
          {
            v386 = *(_DWORD *)v335;
            v335 += 4;
            v336 = ~v386 & (v386 - 16843009) & 0x80808080;
          }
          while ( !v336 );
          if ( !(v336 & 0x8080) )
          {
            v336 = (unsigned int)v336 >> 16;
            v335 += 2;
          }
          if ( &v335[-__MKCADD__(v336, v336) - 3] - &v430 == 22 )
          {
            v337 = &v432;
            do
            {
              v387 = *v337;
              ++v337;
              v338 = ~v387 & (v387 - 16843009) & 0x80808080;
            }
            while ( !v338 );
            if ( !(v338 & 0x8080) )
            {
              v338 = (unsigned int)v338 >> 16;
              v337 = (signed int *)((char *)v337 + 2);
            }
            if ( (char *)v337 + -__MKCADD__(v338, v338) - 3 - (char *)&v432 == 22 )
              goto LABEL_134;
          }
        }
        if ( a245 != 48 )
          goto LABEL_281;
        v331 = &v430;
        do
        {
          v384 = *(_DWORD *)v331;
          v331 += 4;
          v332 = ~v384 & (v384 - 16843009) & 0x80808080;
        }
        while ( !v332 );
        if ( !(v332 & 0x8080) )
        {
          v332 = (unsigned int)v332 >> 16;
          v331 += 2;
        }
        if ( &v331[-__MKCADD__(v332, v332) - 3] - &v430 != 32 )
          goto LABEL_281;
        v333 = &v432;
        do
        {
          v385 = *v333;
          ++v333;
          v334 = ~v385 & (v385 - 16843009) & 0x80808080;
        }
        while ( !v334 );
        if ( !(v334 & 0x8080) )
        {
          v334 = (unsigned int)v334 >> 16;
          v333 = (signed int *)((char *)v333 + 2);
        }
        if ( (char *)v333 + -__MKCADD__(v334, v334) - 3 - (char *)&v432 != 32 )
        {
LABEL_281:
          if ( a245 == 64 )
          {
            v327 = &v430;
            do
            {
              v382 = *(_DWORD *)v327;
              v327 += 4;
              v328 = ~v382 & (v382 - 16843009) & 0x80808080;
            }
            while ( !v328 );
            if ( !(v328 & 0x8080) )
            {
              v328 = (unsigned int)v328 >> 16;
              v327 += 2;
            }
            if ( &v327[-__MKCADD__(v328, v328) - 3] - &v430 == 44 )
            {
              v329 = &v432;
              do
              {
                v383 = *v329;
                ++v329;
                v330 = ~v383 & (v383 - 16843009) & 0x80808080;
              }
              while ( !v330 );
              if ( !(v330 & 0x8080) )
              {
                v330 = (unsigned int)v330 >> 16;
                v329 = (signed int *)((char *)v329 + 2);
              }
              if ( (char *)v329 + -__MKCADD__(v330, v330) - 3 - (char *)&v432 == 44 )
              {
LABEL_157:
                v415 = 43;
                strcpy(a246, (const char *)&v432);
                v321 = &v430;
                v320 = a246;
                goto LABEL_115;
              }
            }
          }
          if ( a245 == 80 )
          {
            v322 = &v430;
            do
            {
              v379 = *(_DWORD *)v322;
              v322 += 4;
              v323 = ~v379 & (v379 - 16843009) & 0x80808080;
            }
            while ( !v323 );
            if ( !(v323 & 0x8080) )
            {
              v323 = (unsigned int)v323 >> 16;
              v322 += 2;
            }
            if ( &v322[-__MKCADD__(v323, v323) - 3] - &v430 == 54 )
            {
              v324 = &v432;
              do
              {
                v380 = *v324;
                ++v324;
                v325 = ~v380 & (v380 - 16843009) & 0x80808080;
              }
              while ( !v325 );
              if ( !(v325 & 0x8080) )
              {
                v325 = (unsigned int)v325 >> 16;
                v324 = (signed int *)((char *)v324 + 2);
              }
              if ( (char *)v324 + -__MKCADD__(v325, v325) - 3 - (char *)&v432 == 54 )
              {
LABEL_134:
                v415 = 43;
                strcpy(a246, (const char *)&v432);
                v321 = &v430;
                v320 = a246;
                goto LABEL_115;
              }
            }
          }
          if ( a245 != 160 )
            goto LABEL_38;
          v316 = &v430;
          do
          {
            v376 = *(_DWORD *)v316;
            v316 += 4;
            v317 = ~v376 & (v376 - 16843009) & 0x80808080;
          }
          while ( !v317 );
          if ( !(v317 & 0x8080) )
          {
            v317 = (unsigned int)v317 >> 16;
            v316 += 2;
          }
          if ( &v316[-__MKCADD__(v317, v317) - 3] - &v430 != 108 )
            goto LABEL_38;
          v318 = &v432;
          do
          {
            v377 = *v318;
            ++v318;
            v319 = ~v377 & (v377 - 16843009) & 0x80808080;
          }
          while ( !v319 );
          if ( !(v319 & 0x8080) )
          {
            v319 = (unsigned int)v319 >> 16;
            v318 = (signed int *)((char *)v318 + 2);
          }
          if ( (char *)v318 + -__MKCADD__(v319, v319) - 3 - (char *)&v432 != 108 )
            goto LABEL_38;
        }
        v415 = 43;
        strcpy(a246, (const char *)&v432);
        v321 = &v430;
        v320 = a246;
LABEL_115:
        strcat(v320, v321);
LABEL_38:
        v430 = 0;
        LOBYTE(v432) = 0;
        v410 = 0;
        LOBYTE(v419) = 0;
        v433 = (int)(v428 - 12);
        if ( (_UNKNOWN *)(v428 - 12) != &unk_6778E1A0 )
        {
          v415 = 5;
          if ( sub_6774F980(v428 - 4, -1) <= 0 )
            sub_6777A5D0(v433);
        }
        v434 = (int)(v427 - 12);
        if ( (_UNKNOWN *)(v427 - 12) != &unk_6778E1A0 )
        {
          v415 = 3;
          if ( sub_6774F980(v427 - 4, -1) <= 0 )
            sub_6777A5D0(v434);
        }
        v435 = v425 - 12;
        if ( v425 - 12 != (_DWORD)&unk_6778E1A0 )
        {
          v415 = 1;
          if ( sub_6774F980(v425 - 4, -1) <= 0 )
            sub_6777A5D0(v435);
        }
        return sub_67758770(&v408);
      }
    }
  }
  return sub_67758770(&v408);
}

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有点长,没看出什么头绪,帮你顶一下,希望引来高手
2009-12-17 11:32
0
游客
登录 | 注册 方可回帖
返回
//