• [ACTF新生赛2020]rome


    打开PE查看工具被唬到了,以为是什么猛壳,那么多区段,实则只是linux下的gcc编译器整出来的,害:

     完事先看程序结构,啥啊,不就是简单的两个函数处理大小写字母和符号,然后后硬编码字符串比较,太憨憨了:

    int func()
    {
      int result; // eax
      int v1; // [esp+14h] [ebp-44h]
      int v2; // [esp+18h] [ebp-40h]
      int v3; // [esp+1Ch] [ebp-3Ch]
      int v4; // [esp+20h] [ebp-38h]
      unsigned __int8 input; // [esp+24h] [ebp-34h]
      unsigned __int8 v6; // [esp+25h] [ebp-33h]
      unsigned __int8 v7; // [esp+26h] [ebp-32h]
      unsigned __int8 v8; // [esp+27h] [ebp-31h]
      unsigned __int8 v9; // [esp+28h] [ebp-30h]
      int v10; // [esp+29h] [ebp-2Fh]
      int v11; // [esp+2Dh] [ebp-2Bh]
      int v12; // [esp+31h] [ebp-27h]
      int v13; // [esp+35h] [ebp-23h]
      unsigned __int8 v14; // [esp+39h] [ebp-1Fh]
      char v15; // [esp+3Bh] [ebp-1Dh]
      char v16; // [esp+3Ch] [ebp-1Ch]
      char v17; // [esp+3Dh] [ebp-1Bh]
      char v18; // [esp+3Eh] [ebp-1Ah]
      char v19; // [esp+3Fh] [ebp-19h]
      char v20; // [esp+40h] [ebp-18h]
      char v21; // [esp+41h] [ebp-17h]
      char v22; // [esp+42h] [ebp-16h]
      char v23; // [esp+43h] [ebp-15h]
      char v24; // [esp+44h] [ebp-14h]
      char v25; // [esp+45h] [ebp-13h]
      char v26; // [esp+46h] [ebp-12h]
      char v27; // [esp+47h] [ebp-11h]
      char v28; // [esp+48h] [ebp-10h]
      char v29; // [esp+49h] [ebp-Fh]
      char v30; // [esp+4Ah] [ebp-Eh]
      char v31; // [esp+4Bh] [ebp-Dh]
      int i; // [esp+4Ch] [ebp-Ch]
    
      v15 = 'Q';
      v16 = 's';
      v17 = 'w';
      v18 = '3';
      v19 = 's';
      v20 = 'j';
      v21 = '_';
      v22 = 'l';
      v23 = 'z';
      v24 = '4';
      v25 = '_';
      v26 = 'U';
      v27 = 'j';
      v28 = 'w';
      v29 = '@';
      v30 = 'l';
      v31 = 0;
      printf("Please input:");
      scanf("%s", &input);
      result = input;
      if ( input == 'A' )
      {
        result = v6;
        if ( v6 == 'C' )
        {
          result = v7;
          if ( v7 == 'T' )
          {
            result = v8;
            if ( v8 == 'F' )
            {
              result = v9;
              if ( v9 == '{' )
              {
                result = v14;
                if ( v14 == '}' )
                {
                  v1 = v10;
                  v2 = v11;
                  v3 = v12;
                  v4 = v13;
                  for ( i = 0; i <= 15; ++i )
                  {
                    if ( *(&v1 + i) > 64 && *(&v1 + i) <= 90 )// 大写字母
                      *(&v1 + i) = (*(&v1 + i) - 51) % 26 + 65;
                    if ( *(&v1 + i) > 96 && *(&v1 + i) <= 122 )// 小写字母
                      *(&v1 + i) = (*(&v1 + i) - 79) % 26 + 97;
                  }
                  for ( i = 0; i <= 15; ++i )
                  {
                    result = *(&v15 + i);
                    if ( *(&v1 + i) != result )
                      return result;
                  }
                  result = printf("You are correct!");
                }
              }
            }
          }
        }
      }
      return result;
    }

    对那两个函数逆操作我就不整了,能穷举就绝不动脑子:

    #include<iostream>
    #include<stdio.h>
    
    using namespace std;
    
    int main()
    {
        char flag[16] = { 0 };
        char c[16] = { 'Q','s','w','3','s','j', '_','l','z','4','_','U','j','w','@','l' };
    
        for (int k = 0; k < 16; k++)
        {
            for (int i = 0; i < 127; i++)
            {
                int z = 0;
                z = i;  //
                if (i > 64 && i <= 90)
                    i = (i - 51) % 26 + 65;
                if (i > 96 && i <= 122)
                    i = (i - 79) % 26 + 97;
                if (i == c[k])
                    flag[k] = z;
            }
        }
    
        for (int i = 0; i < 16; i++)
            cout << flag[i];
        return 0;
    
    }

    ACTF{Cae3ar_th4_Gre@t}

     题目链接:https://buuoj.cn/files/588c32051222b5dba864ddeb07c44e74/attachment.tar?token=eyJ1c2VyX2lkIjo1NTY4LCJ0ZWFtX2lkIjpudWxsLCJmaWxlX2lkIjoxNjgzfQ.XorhXQ.nuD8GYtPOowBrVIYfxGh9Y7rn2A

  • 相关阅读:
    Raspberry Pi(树莓派2代B型新手初体验)
    Webview内存泄漏解决办法
    学习日记(二)——自定义来电界面,监听来电广播,悬浮窗
    学习日记(一)----BaseActivity的写法
    学习记录---- viewpager里嵌套listview中adapter的写法
    listView的流畅性优化
    git 命令学习(二)
    git 命令学习(一)
    软件项目管理结课小结
    软件测试结课小结
  • 原文地址:https://www.cnblogs.com/jentleTao/p/12642500.html
Copyright © 2020-2023  润新知