首页
社区
课程
招聘
[求助]代码交流!高手讲解!
发表于: 2011-9-17 20:37 4634

[求助]代码交流!高手讲解!

2011-9-17 20:37
4634
这段IDA 伪代码反成C++ 怎么写

signed int __thiscall sub_412C70(int this, int a2, signed int a3, int a4)
{
  signed int result; // eax@23
  signed int v8; // eax@16
  void *Src; // [sp+84h] [bp-4h]@1
  signed int v10; // [sp+68h] [bp-20h]@1
  signed int v11; // [sp+64h] [bp-24h]@1
  signed int v12; // [sp+74h] [bp-14h]@1
  signed int v13; // [sp+70h] [bp-18h]@1
  __int64 v14; // [sp+5Ch] [bp-2Ch]@1
  signed int v15; // [sp+80h] [bp-8h]@1
  signed int v16; // [sp+78h] [bp-10h]@3
  signed int v17; // [sp+6Ch] [bp-1Ch]@3
  signed int v18; // [sp+7Ch] [bp-Ch]@3
  int v19; // [sp+Ch] [bp-7Ch]@5
  signed int v21; // [sp+50h] [bp-38h]@16

  Src = (void *)this;
  v10 = 257;
  memcpy((void *)(this + 8192), (const void *)this, 0x202u);
  v11 = 256;
  v12 = 0;
  v13 = 256;
  v14 = 0i64;
  v15 = 0;
  while ( v15 < a3 )
  {
    ++v12;
    ++v13;
    v12 &= (v11 < v12) - 1;
    v13 &= (v11 < v13) - 1;
    *((_WORD *)Src + v13 + 4096) = *(_WORD *)(a2 + 2 * v15);
    v16 = v12;
    v17 = 0;
    v18 = 0;
    while ( v18 < v10 )
    {
      _EAX = v11 - v18;
      v19 = *((_WORD *)Src + v16 + 4096);
      __asm
      {
        fild    [ebp+var_7C]
        fmul    ds:dbl_50B990[eax*8]
      }
      v17 += (signed __int16)_ftol();
      ++v16;
      v16 &= (v11 < v16) - 1;
      ++v18;
    }
    if ( v17 <= 32000 )
    {
      if ( v17 >= -32000 )
        *(_WORD *)(a4 + 2 * v15) = v17;
      else
        *(_WORD *)(a4 + 2 * v15) = -32000;
    }
    else
    {
      *(_WORD *)(a4 + 2 * v15) = 32000;
    }
    v19 = abs(*(_WORD *)(a4 + 2 * v15));
    __asm
    {
      fild    [ebp+var_7C]
      fadd    [ebp+var_2C]
      fstp    [ebp+var_2C]
    }
    ++v15;
  }
  __asm
  {
    fild    [ebp+arg_4]
    fdivr   [ebp+var_2C]
    fstp    [ebp+var_2C]
    fld     [ebp+var_2C]
    fcomp   ds:dbl_50C1A8
    fnstsw  ax
  }
  if ( !(_AX & 0x4100) )
  {
    __asm
    {
      fld     ds:dbl_50C1A0
      fdiv    [ebp+var_2C]
      fstp    [ebp+var_34]
      fld     [ebp+var_34]
      fcomp   ds:dbl_50C198
      fnstsw  ax
    }
    if ( !(_AX & 0x4100) )
    {
      v15 = 0;
      while ( v15 < a3 )
      {
        v19 = *(_WORD *)(a4 + 2 * v15);
        __asm
        {
          fild    [ebp+var_7C]
          fmul    [ebp+var_34]
        }
        v8 = _ftol();
        v21 = v8;
        if ( v8 <= 32000 )
        {
          if ( v21 >= -32000 )
            *(_WORD *)(a4 + 2 * v15) = v21;
          else
            *(_WORD *)(a4 + 2 * v15) = -32000;
        }
        else
        {
          *(_WORD *)(a4 + 2 * v15) = 32000;
        }
        ++v15;
      }
    }
  }
  v16 = v12;
  v15 = 0;
  while ( 1 )
  {
    result = v15;
    if ( v15 >= v10 )
      break;
    *((_WORD *)Src + v15) = *((_WORD *)Src + v16++ + 4096);
    v16 &= (v11 < v16) - 1;
    ++v15;
  }
  return result;
}

求高手讲解!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1054
活跃值: (1258)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
干嘛非要c++呢?
直接嵌入 不就行了
2011-9-17 22:44
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
怎么理解!不太明白哦
2011-9-17 23:30
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
4
他说的是直接F5嵌入程序,
2011-9-19 09:45
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
从代码上看,你应该是用IDA的插件反编译了吧。
你想干嘛呢?如果是写注册机,是不需要看懂的,直接嵌入机器码就可以。
2011-9-20 20:43
0
游客
登录 | 注册 方可回帖
返回
//