이번에도 IDA로 열어서 확인했다.
__int64 sub_140001350()
{
char v1; // [rsp+20h] [rbp-118h]
memset(&v1, 0, 0x100ui64);
sub_1400013E0("Input : ");
sub_140001440("%256s", &v1);
if ( (unsigned int)sub_140001000(&v1) )
puts("Correct");
else
puts("Wrong");
return 0i64;
}
Correct
를 출력하도록 하는 조건을 sub_140001000
에서 확인해본다.
_BOOL8 __fastcall sub_140001000(_BYTE *a1)
{
if ( *a1 != 'C' )
return 0i64;
if ( a1[1] != 'o' )
return 0i64;
if ( a1[2] != 'm' )
return 0i64;
if ( a1[3] != 'p' )
return 0i64;
if ( a1[4] != 'a' )
return 0i64;
if ( a1[5] != 'r' )
return 0i64;
if ( a1[6] != '3' )
return 0i64;
if ( a1[7] != '_' )
return 0i64;
if ( a1[8] != 't' )
return 0i64;
if ( a1[9] != 'h' )
return 0i64;
if ( a1[10] != 'e' )
return 0i64;
if ( a1[11] != '_' )
return 0i64;
if ( a1[12] != 'c' )
return 0i64;
if ( a1[13] != 'h' )
return 0i64;
if ( a1[14] != '4' )
return 0i64;
if ( a1[15] != 'r' )
return 0i64;
if ( a1[16] != 'a' )
return 0i64;
if ( a1[17] != 'c' )
return 0i64;
if ( a1[18] != 't' )
return 0i64;
if ( a1[19] != '3' )
return 0i64;
if ( a1[20] == 'r' )
return a1[21] == 0;
return 0i64;
}
입력값의 한 문자씩 정답에 해당하는 문자열의 문자 하나하나와 비교하는 것을 확인할 수 있다.
[Dreamhack] rev-basic-2 (0) | 2021.03.15 |
---|---|
[Dreamhack] rev-basic-0 (0) | 2021.03.15 |