2020SCTF——PWN snake

0x00 背景

今年SCTF上的一道PWN题,难度还行,关键是要大概读懂程序,找到可利用的漏洞。由于比赛环境使用的是libc2.23,我为了复现也搞了一个ubuntu16.04的虚拟机(也是libc2.23)。这样搞fastbin利用比较方便。最后在libc的小版本上还是有一点出入,不过,问题不大。

0x01 源码分析

整个main函数的大致逻辑如下,一个42*62的二维数组保存整个游戏区域。依据输入的方向键改变蛇移动的方向。碰到边界后游戏结束。打印分数,并可以留言。然后就进入了喜闻乐见的菜单界面。

while ( 1 )
  {
   
    v10 = 0;
    v13 = 60;//起始y坐标
    v14 = 4;//起始x坐标
    v11 = 0;//y方向的速度
    v12 = 1;//x方向的速度
    dword_603120 = 0;
    memset(ptr_togame_area, 0, 0xA2CuLL);
    sub_4012D7((__int64)ptr_togame_area);
    while ( 1 )                                 // in_the_game
    {
   
      sub_40142A(&v13, &v14, &v11, &v12);
      sub_400EBA((__int64)&v16, dword_603120 + 1, &v13, &v14, (__int64)ptr_togame_area);
      printf("player name: %s \t  score: %d\n", buf, (unsigned int)dword_603120);
      v15 = sub_401560(v13, v14, (__int64)ptr_togame_area, &v11, &v12);
      if ( v15 )
        break;
      v7 = ptr_togame_area;
      if ( v7[(signed int)sub_400E87(v13 + v11, v12 + v14)] == 97 )
      {
   
        ++dword_603120;
        sub_4010E0();
      }
      else
      {
   
        sub_401375();
        usleep(0x11170u);
        sub_400EA4();
      }
    }
    v15 = 0;
    printf(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值