攻防世界 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("\nOMG!!!! 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("\nYou got the key\n "); 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}
标签:char,153,reverse,esp,int,easyre,a1,ebp,fd 来源: https://www.cnblogs.com/DirWang/p/11451783.html