int
__cdecl __noreturn main(
int
argc, const char
*
*
argv, const char
*
*
envp)
{
unsigned
int
buf;
/
/
[rsp
+
10h
] [rbp
-
450h
]
int
v4;
/
/
[rsp
+
14h
] [rbp
-
44Ch
]
int
fd;
/
/
[rsp
+
18h
] [rbp
-
448h
]
unsigned
int
v6;
/
/
[rsp
+
1Ch
] [rbp
-
444h
]
void
*
ptr;
/
/
[rsp
+
20h
] [rbp
-
440h
]
char
*
v8;
/
/
[rsp
+
28h
] [rbp
-
438h
]
char v9;
/
/
[rsp
+
30h
] [rbp
-
430h
]
unsigned __int64 v10;
/
/
[rsp
+
448h
] [rbp
-
18h
]
v10
=
__readfsqword(
0x28u
);
buf
=
0
;
v4
=
0
;
setvbuf(stdout,
0LL
,
1
,
0x2000uLL
);
fd
=
open
(
"/dev/urandom"
,
0
, argv);
write(
1
,
"Welcome to the 2020kanxueCTF.\n"
,
0x21uLL
);
while
(
1
)
{
write(
1
,
"\nShellcode > "
,
0xEuLL
);
fflush(stdout);
v6
=
read_all(&v9,
1024LL
);
read(fd, &buf,
4uLL
);
read(fd, &v4,
4uLL
);
ptr
=
(void
*
)init_buffer(v6,
0LL
, buf);
printf(
"\n(get %d bytes)\n"
, v6);
if
( v6 )
my_memcpy((char
*
)ptr
+
HEADER_LEN
+
4
, &v9, v6);
buf
=
0
;
v8
=
(char
*
)ptr
+
20
;
__asm { vzeroall }
sleep(
1u
);
v4
=
0
;
((void (__fastcall
*
)(signed __int64, _QWORD))v8)(
1LL
,
0LL
);
printf(
"We are We failed!\n"
);
fflush(stdout);
free(ptr);
sleep(
2u
);
}
}