__int64 __fastcall main(int a1, char **a2, char **a3)
{
int i; // [rsp+Ch] [rbp-34h]
char v5[40]; // [rsp+10h] [rbp-30h] BYREF
unsigned __int64 v6; // [rsp+38h] [rbp-8h]
v6 = __readfsqword(0x28u);
puts("Wait! I'm generating flag!!");
sub_1411(v5, a2);
printf("Here's your flag: DH{");
for ( i = 0; i <= 31; ++i )
printf("%02x", (unsigned __int8)v5[i]);
puts("}");
return 0LL;
}
문제에서 프로그램이 잠을 자서 결과값을 얻을 수 없다고 한다.
결과값을 우리가 구하는게 아니라 잠을 못 자게 프로그램을 수정해야 한다.
unsigned __int64 sub_14D2()
{
signed __int64 v0; // rax
struct timespec rqtp; // [rsp+10h] [rbp-30h] BYREF
struct timespec rmtp; // [rsp+20h] [rbp-20h] BYREF
unsigned __int64 v4; // [rsp+38h] [rbp-8h]
v4 = __readfsqword(0x28u);
++qword_4038;
qword_4038 *= 2LL;
rqtp.tv_sec = qword_4038;
rqtp.tv_nsec = 1LL;
v0 = sys_nanosleep(&rqtp, &rmtp);
return v4 - __readfsqword(0x28u);
}
호출: sub_1552 -> sub_14D2
저 sleep만 지우면 되지 않을까

무결성 검사 때문에 수정하면 안 된다.

엥 gdb로 건드리는 것도 안 된다고...
exit도 그냥 없애버릴까
정답!