首页
社区
课程
招聘
[旧帖] [求助]这段checksum自检在哪里改最精简? 0.00雪花
发表于: 2007-12-2 15:39 3020

[旧帖] [求助]这段checksum自检在哪里改最精简? 0.00雪花

2007-12-2 15:39
3020
作者有意搞了很多跳转,晕了几次了。
有没有高人能够指点一下,多谢了!

int __cdecl file_chk(char *Filename, int a2)  // 此处会套入exe本身的连路经全名,及一个验证常量
{
  int v0; // edi@1
  int v1; // eax@2
  int v2; // ebx@2
  signed int v3; // esi@2
  signed int v4; // ecx@6
  signed int v5; // edi@12
  signed int v6; // edi@31
  int result; // eax@43
  FILE *v8; // eax@2
  int v9; // edi@11
  int v10; // edx@20
  int v11; // edx@41
  int v12; // [sp+4h] [bp-20010h]@1
  unsigned int v13; // [sp+20010h] [bp-4h]@1
  signed int v15; // [sp+8h] [bp-2000Ch]@2
  FILE *File; // [sp+Ch] [bp-20008h]@2
  unsigned __int8 v18; // [sp+10h] [bp-20004h]@7

  v13 = (unsigned int)&v12 ^ global_var1;                      // global_var1 = E3501419
  v0 = global_var3;
  if ( global_var2 )
  {
    global_var3 = global_var3;
    result = v0;
  }
  else
  {
    v15 = *(_BYTE *)a2;                                         // checksum验证常量
    v8 = fopen(Filename, "rb");
    File = v8;
    v2 = fileno(v8);
    v1 = 1;
    v3 = 1;
    while ( 1 )
    {
      if ( v3 < v1 )
      {
        v4 = *(&v18 + v3++);
      }
      else
      {
        if ( v1 )
        {
          v3 = 0;
          v1 = read(v2, &v18, 0x20000u);
          if ( v1 )
          {
            v4 = v18;
            v3 = 1;
          }
          else
          {
            v4 = -1;
          }
        }
        else
        {
          v4 = -1;
        }
      }
      v9 = __ROL__(v0, 1);
      v12 = v4 + v9;
      if ( v4 == v15 )
      {
        v5 = 1;
        do
        {
          if ( v3 < v1 )
          {
            v4 = *(&v18 + v3++);
          }
          else
          {
            if ( v1 )
            {
              v3 = 0;
              v1 = read(v2, &v18, 0x20000u);
              if ( v1 )
              {
                v4 = v18;
                v3 = 1;
              }
              else
              {
                v4 = -1;
              }
            }
            else
            {
              v4 = -1;
            }
          }
          v10 = __ROL__(v12, 1);
          v12 = v4 + v10;
          if ( v4 != *(_BYTE *)(v5 + a2) )
            break;
          ++v5;
        }
        while ( v5 < 3 );
        if ( v5 == 3 )
        {
          if ( v3 < v1 )
          {
            v4 = *(&v18 + v3++);
          }
          else
          {
            if ( v1 )
            {
              v3 = 0;
              v1 = read(v2, &v18, 0x20000u);
              if ( v1 )
              {
                v4 = v18;
                v3 = 1;
              }
              else
              {
                v4 = -1;
              }
            }
            else
            {
              v4 = -1;
            }
          }
          if ( v4 == *(_BYTE *)(a2 + 3) )
          {
            v6 = 12;
            do
            {
              if ( v3 < v1 )
              {
                v4 = *(&v18 + v3++);
              }
              else
              {
                if ( v1 )
                {
                  v3 = 0;
                  v1 = read(v2, &v18, 0x20000u);
                  if ( v1 )
                  {
                    v4 = v18;
                    v3 = 1;
                  }
                  else
                  {
                    v4 = -1;
                  }
                }
                else
                {
                  v4 = -1;
                }
              }
              --v6;
            }
            while ( v6 );
          }
          else
          {
            v11 = __ROL__(v12, 1);
            v12 = v4 + v11;
          }
        }
      }
      if ( v4 == -1 )
        break;
      v0 = v12;
    }
    fclose(File);
    result = v12;               // 得到结果
    global_var3 = v12;     // 保存结果到全局变量,防修改
  }
  return result;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 134
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人看,顶一下
2007-12-3 23:46
0
游客
登录 | 注册 方可回帖
返回