Skip to content

EasyRe 153 wp

Odoiys edited this page Sep 17, 2019 · 1 revision

easyre-153

这道题没想到过程,有点意思。

一开始放到ida,注意到没有main函数,当时没有意识到加壳了,只是感觉不太对,上网查了wp才知道有壳。

wp上说是UPX的壳,直接脱掉。

pipe函数可用于创建一个管道,以实现进程间的通信。

pipe函数的定义如下:

#include<unistd.h>

int pipe(int fd[2]);

pipe函数定义中的fd参数是一个大小为2的一个数组类型的指针。该函数成功时返回0,并将一对打开的文件描述符值填入fd参数指向的数组。失败时返回 -1并设置errno。

通过pipe函数创建的这两个文件描述符 fd[0] 和 fd[1] 分别构成管道的两端,往 fd[1] 写入的数据可以从 fd[0] 读出。并且 fd[1] 一端只能进行写操作,fd[0] 一端只能进行读操作,不能反过来使用。要实现双向数据传输,可以使用两个管道。

1)在父进程中,fork返回新创建子进程的进程ID;

2)在子进程中,fork返回0;

3)如果出现错误,fork返回一个负值;

等于0,即在子进程中时

程序向pipedes[1]写入"69800876143568214356928753"

接收在read函数中的buf中

最后送到lol(&buf)这里执行

这里有个问题就是,所有的数字都是字符串,所以要用ascii码来计算

看py:

a1='69800876143568214356928753'

a1=list(map(ord,a1))

v2 = 2 * a1[1];

v3 = a1[4] + a1[5];

v4 = a1[8] + a1[9];

v5 = 2 * a1[12];

v6 = a1[18] + a1[17];

v7 = a1[10] + a1[21];

v8 = a1[9] + a1[25];

flag=''

for i in range(2,9):

# bing.append(locals()['v'+str(i)])

` flag+=chr(locals()['v'+str(i)])

print(locals()['v' +str(i)])

print(flag)

map(,):左边的星号是执行的函数,右边的星号是字典

locals():会以字典类型返回当前位置的全部局部变量。

新的

Clone this wiki locally