zoukankan      html  css  js  c++  java
  • 攻防世界 reverse 进阶 easyre-153

    easyre-153

    查壳:

    upx壳 

    脱壳:

     1 int __cdecl main(int argc, const char **argv, const char **envp)
     2 {
     3   int pipedes[2]; // [esp+18h] [ebp-38h]
     4   __pid_t v5; // [esp+20h] [ebp-30h]
     5   int v6; // [esp+24h] [ebp-2Ch]
     6   char buf; // [esp+2Eh] [ebp-22h]
     7   unsigned int v8; // [esp+4Ch] [ebp-4h]
     8 
     9   v8 = __readgsdword(0x14u);
    10   pipe(pipedes);                                // pipe函数可用于创建一个管道,以实现进程间的通信。
    11                                                 // pipe函数的定义如下:
    12                                                 // #include<unistd.h>
    13                                                 // int pipe(int fd[2]);
    14                                                 //         pipe函数定义中的fd参数是一个大小为2的一个数组类型的指针。该函数成功时返回0,并将一对打开的文件描述符值填入fd参数指向的数组。失败时返回 -1并设置errno。
    15                                                 //         通过pipe函数创建的这两个文件描述符 fd[0] 和 fd[1] 分别构成管道的两端,往 fd[1] 写入的数据可以从 fd[0] 读出。并且 fd[1] 一端只能进行写操作,fd[0] 一端只能进行读操作,不能反过来使用。要实现双向数据传输,可以使用两个管道。
    16   v5 = fork();                                  //     1)在父进程中,fork返回新创建子进程的进程ID;
    17                                                 //     2)在子进程中,fork返回0;
    18                                                 //     3)如果出现错误,fork返回一个负值;
    19   if ( !v5 )                                    // 等于0,即在子进程中时
    20   {
    21     puts("
    OMG!!!! I forgot kid's id");
    22     write(pipedes[1], "69800876143568214356928753", 0x1Du);// 写入
    23     puts("Ready to exit     ");
    24     exit(0);
    25   }
    26   read(pipedes[0], &buf, 0x1Du);                // 读取
    27   __isoc99_scanf("%d", &v6);
    28   if ( v6 == v5 )
    29   {
    30     if ( (*(_DWORD *)((_BYTE *)lol + 3) & 0xFF) == 204 )
    31     {
    32       puts(":D");
    33       exit(1);
    34     }
    35     printf("
    You got the key
     ");             
    36     lol(&buf);                                  // 生成flag
    37   }
    38   wait(0);
    39   return 0;
    40 }

    查看lol(&buf)

     1 int __cdecl lol(_BYTE *a1)
     2 {
     3   char v2; // [esp+15h] [ebp-13h]
     4   char v3; // [esp+16h] [ebp-12h]
     5   char v4; // [esp+17h] [ebp-11h]
     6   char v5; // [esp+18h] [ebp-10h]
     7   char v6; // [esp+19h] [ebp-Fh]
     8   char v7; // [esp+1Ah] [ebp-Eh]
     9   char v8; // [esp+1Bh] [ebp-Dh]
    10 
    11   v2 = 2 * a1[1];
    12   v3 = a1[4] + a1[5];
    13   v4 = a1[8] + a1[9];
    14   v5 = 2 * a1[12];
    15   v6 = a1[18] + a1[17];
    16   v7 = a1[10] + a1[21];
    17   v8 = a1[9] + a1[25];
    18   return printf("flag_is_not_here");
    19 }

    wp:

     1 a1='69800876143568214356928753'
     2 a1=list(map(ord,a1))
     3 v2 = 2 * a1[1];
     4 v3 = a1[4] + a1[5];
     5 v4 = a1[8] + a1[9];
     6 v5 = 2 * a1[12];
     7 v6 = a1[18] + a1[17];
     8 v7 = a1[10] + a1[21];
     9 v8 = a1[9] + a1[25];
    10 
    11 # x=locals().items()
    12 # print(x)
    13 flag=''
    14 for i in range(2,9):
    15     flag+=chr(locals()['v'+str(i)])
    16 print(flag)

    rhelheg

    特娘的,提交需要加上RCTF{}

    RCTF{rhelheg}

  • 相关阅读:
    并查集 [Total Eclipse]
    2020 Multi-University Training Contest 2 [The Oculus]
    2020牛客暑期多校训练营(第三场)G Operating on a Graph
    杭电多校第一场 [Fibonacci Sum]
    Codeforces Round #658 (Div. 2) E. Mastermind
    二次剩余
    SpringBlade 后端项目 部署 2.0-boot
    SpringBlade 前端项目 部署 Saber
    前端 天气插件
    SpringBlade 打包
  • 原文地址:https://www.cnblogs.com/DirWang/p/11451783.html
Copyright © 2011-2022 走看看