首页 > 其他分享 >buuoj-[ACTF新生赛2020]Oruga

buuoj-[ACTF新生赛2020]Oruga

时间:2022-12-17 15:22:12浏览次数:57  
标签:v4 0x4D 0x4F 0x23 0x00 v2 2020 Oruga ACTF

1.无壳64bit

2.找到main函数

3.进入sub_78A,:

_BOOL8 __fastcall sub_78A(__int64 a1)
{
  int v2; // [rsp+Ch] [rbp-Ch]
  int v3; // [rsp+10h] [rbp-8h]
  int v4; // [rsp+14h] [rbp-4h]

  v2 = 0;
  v3 = 5;
  v4 = 0;
  while ( byte_201020[v2] != '!' )//!是终点
  {
    v2 -= v4;
    if ( *(_BYTE *)(v3 + a1) != 'W' || v4 == -16 )
    {
      if ( *(_BYTE *)(v3 + a1) != 'E' || v4 == 1 )
      {
        if ( *(_BYTE *)(v3 + a1) != 'M' || v4 == 16 )
        {
          if ( *(_BYTE *)(v3 + a1) != 'J' || v4 == -1 )
            return 0LL;
          v4 = -1;                              // 退一个,J就是向左
        }
        else
        {
          v4 = 16;                              // 加16个偏移,M就是向下
        }
      }
      else
      {
        v4 = 1;                                 // 加一格,E就是向右
      }
    }
    else
    {
      v4 = -16;                                 // 偏移量减16,W就是向上
    }
    ++v3;
    while ( !byte_201020[v2] )//为什么要循环?当当前值为0的时候,v2+=v4,也就是说,继续重复上次操作,也就是继续往前走
    {
      if ( v4 == -1 && (v2 & 0xF) == 0 )        // 只有v2等于0的时候 v2&F==0,也就是左边界还望左走,就不行。。
        return 0LL;
      if ( v4 == 1 && v2 % 16 == 15 )           // 与上同理,右边界
        return 0LL;
      if ( v4 == 16 && (unsigned int)(v2 - 240) <= 0xF )// 下边界
        return 0LL;
      if ( v4 == -16 && (unsigned int)(v2 + 15) <= 0x1E )// 上边界
        return 0LL;
      v2 += v4;
    }
  }
  return *(_BYTE *)(v3 + a1) == 125;
}

地图:

data=[0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x23, 0x23, 0x23, 0x23, 0x00, 0x00, 0x00, 0x23,
  0x23, 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x4F, 0x4F, 0x00, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x4C, 0x00, 0x4F, 0x4F, 0x00, 0x4F, 0x4F, 0x00, 0x50,
  0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x4F,
  0x4F, 0x00, 0x4F, 0x4F, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x4C, 0x4C, 0x00, 0x4F, 0x4F, 0x00, 0x00, 0x00,
  0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00,
  0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x4D, 0x4D, 0x4D, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x4D,
  0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x00, 0x00, 0x00, 0x30,
  0x00, 0x4D, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x00,
  0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x54, 0x54,
  0x54, 0x49, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x00,
  0x00, 0x00, 0x45, 0x00, 0x00, 0x54, 0x00, 0x49, 0x00, 0x4D,
  0x00, 0x4D, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
  0x00, 0x54, 0x00, 0x49, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x4D,
  0x21, 0x00, 0x00, 0x00, 0x45, 0x45]
for i in range(len(data)):
    if i==0:
        print('X',end=' ')
    elif data[i]==0x21:
        print('!',end=' ')
    elif data[i]==0:
        print('0',end=' ')
    else:
        print('1',end=' ')
    if (i+1)%16==0:
        print()

得到flag{MEWEMEWJMEWJM}

标签:v4,0x4D,0x4F,0x23,0x00,v2,2020,Oruga,ACTF
From: https://www.cnblogs.com/Hznuxxw/p/16989030.html

相关文章

  • buuoj-[WUSTCTF2020]Cr0ssfun
    1.64bitnowinexe直接打开2.找到main函数当check(flag)这个函数==1的时候,才正确3.步入:耐心一点,一个一个扣出来就行了。。。a1=[0]*33a1[10]=112a1[13]=6......
  • 2020 Shengyang D
    D.JourneytoUn'Goro求奇数个r段最多的方案显然考虑前缀和s[i]表示前i个位置r的数量我们一段是奇数r那么显然s[i]-s[j]为奇数我们要让pair<i,j>数量最多显然可以......
  • Python爬虫爬取国家统计局2009年到2020年,统计用区划和城乡划分代码(省市区/县三级)并存
    国家统计局->统计标准网址:​​http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/​​流程对统计标准的网站进行分层分级爬取  代码importpymysqlfrombs4importBeaut......
  • 南方科技大学2020年高等代数考研试题参考解答
    南方科技大学2020年高等代数考研试题参考解答......
  • 南方科技大学2020年数学分析考研试题参考解答
    南方科技大学2020年数学分析考研试题参考解答......
  • [NOI2020]制作菜品
    链接:https://www.luogu.com.cn/problem/P6775题目描述:有\(m\)道菜,和\(n\)种原材料,每个原材料有一个质量\(d_{i}\),有\(\sum_{i=1}^{n}{d_{i}}=m\timesk\)(m为正整数),每次......
  • buuoj-[WUSTCTF2020]level3
    1.nowinexe64bit2.打开直接找到main函数是一个base64加密,加密表是:但是解出来是乱码。。然后查了一下(x)谁调用了base64表,发现了这个东西那就是变表了。。写个脚本......
  • ICPC2020 南京J 吉司机线段树
    题目是一个序列。两个操作1对L,R里的所有数字对输入x取max。2询问L,R里某一位二进制位的1的个数。n是正常的200000用线段树来维护两个操作。先考虑第一个操作用吉司机......
  • 2020 ICPC Yinchuan
    B.TheGreatWall显然我们可以很快的思考出来n3的做法直接dp[i][j]表示前i个数分成j段的max然后我们转移配合st表dp[i][j]=max(dp[i][j],dp[k][j-1]+query_max(k+1,i)......
  • BUUCTF子[网鼎杯 2020 青龙组]singal(angr快速嗦哈解法)
    先查壳,发现是32位程序丢ida继续分析,发现存在vm_opread函数,根据以往做题经验来看,这个题像是虚拟机保护的题目。这里首先是将opcode_table(我自己命的名字)复制前456个字......