首页
社区
课程
招聘
1
[原创]2017CTF第二题_lelfei攻击手法
发表于: 2017-6-5 08:45 4415

[原创]2017CTF第二题_lelfei攻击手法

2017-6-5 08:45
4415

在xp里调试运行上传的攻击脚本,然后在00401257这个地址(push "WELL DONE!")下普通断点,等待程序跑到这个地址断下来就穷举出结果

说明:这个攻击脚本是在原来程序上,直接修改exe内容,通过汇编代码修改程序流程,来达到优化后穷举的目的,

主要分2大步骤,第一步:修改exe使得程序可以自行穷举,第二步:优化使得穷举变快,其中优化是关键


优化的地方:

1)nop掉GetTickCount,跟GetTickCount相关的保存结果,和结果保存后,将来再进行运算的代码都可以nop掉,因为分析代码得出结论GetTickCount并没有什么影响到注册码的判断

2)sub_401A60里的从(00401A8B到00401AA8)的这个循环可以被优化掉,完全是废代码,此处费代码会在循环里调用sub_4019E0,此处浪费时间非常多,将循环优化掉后,就完全不计算GetTickCount相关的代码了,IDA分析如下:

  v1 = this;
  v2 = 0;
  v3 = (char *)this + 4104;
  v4 = (char *)this + 4104;
  do
  {
    v4 += 4;
    v5 = v2++ & 0x3FF;
    *((_DWORD *)v4 - 1) = v5;
  }
  while ( v2 < 1024 );
  v6 = 1024;

//下面紧接着的这个循环可以完全干掉,毫无用处

  do
  {
    v7 = *(_DWORD *)v3;
    v8 = sub_4019E0(v1);
    *(_DWORD *)v3 = *((_DWORD *)v1 + v8 + 1026);
    v3 += 4;
    --v6;
    *((_DWORD *)v1 + v8 + 1026) = v7;
  }
  while ( v6 );
  result = (int)((char *)v1 + 8);
  v10 = (int)((char *)v1 + 8196);
  v11 = 1024;
  do
  {
    v12 = *(_DWORD *)v10;
    v10 -= 4;
    *(_DWORD *)result = v12;
    result += 4;
    --v11;
  }
  while ( v11 );
  return result;
}

上面的代码,第二处也就是中间的循环可以完全干掉,节约大量穷举的时间

3)在00401168处,修改jnz跳转的地址到准备开始下次穷举的位置,此处用IDA分析是

while ( 1 )
  {
    CObj5_CObj5_szKey(&obj5_2, szKey);
    LOBYTE(v23) = 1;
    v8 = sub_401840((int)&obj5_2, (int)&obj5, (int)&obj5_2);
    v9 = sub_401730(v8, (int)&obj5, 9) + v8;
    nullsub_1();
    if ( v9 || sub_4013A0(&obj5) % 2 != 1 )
      goto LABEL_16;
    v10 = sub_4013A0(&obj5);
    v11 = sub_4013B0((int)&obj5, v10 >> 1);
    v12 = sub_4013B0((int)&obj5_2, 0);
    v13 = &obj5_2;
    if ( v11 == v12 )
      break;
LABEL_17:
    LOBYTE(v23) = 0;
    CObj5_Destructor(v13);
    if ( v9 )
    {
      printf("WRONG KEY...\n");
      goto LABEL_19;
    }
  }
  v14 = sub_4013A0(&obj5_2) - 1;
  v15 = 1 - sub_4013A0(&obj5_2);
  v16 = sub_4013A0(&obj5);
  v17 = sub_4013E0(&obj5, (int)&obj5_2, v16 + v15, 1, v14, 0);
  v18 = sub_4013A0(&obj5_2);
  if ( sub_4013E0(&obj5, (int)&obj5_2, 0, 1, v18 - 1, 1) + v17 )
  {
    v9 = 0;
LABEL_16:
    v13 = &obj5_2;
    goto LABEL_17;
  }


[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 1
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2023-2-13 04:59
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
收起 
赞赏  CCkicker   +1.00 2017/06/06
最新回复 (1)
雪    币: 598
活跃值: (282)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
2
工作量有些大,修改优化后穷举速度会快不少吧
2017-6-8 09:10
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册