반응형
rev-basic-1
int __cdecl main(int argc, const char **argv, const char **envp)
{
char v4[256]; // [rsp+20h] [rbp-118h] BYREF
memset(v4, 0, sizeof(v4));
printf("Input : ");
sub_140001440("%256s", v4);
if ( (unsigned int)sub_140001000(v4) )
puts("Correct");
else
puts("Wrong");
return 0;
}
sub_140001000(v4)
가 TRUE면 "Correct"를 출력한다.
sub_140001000()
를 분석해보자.
_BOOL8 __fastcall sub_140001000(_BYTE *a1)
{
if ( *a1 != 67 )
return 0i64;
if ( a1[1] != 111 )
return 0i64;
if ( a1[2] != 109 )
return 0i64;
if ( a1[3] != 112 )
return 0i64;
if ( a1[4] != 97 )
return 0i64;
if ( a1[5] != 114 )
return 0i64;
if ( a1[6] != 51 )
return 0i64;
if ( a1[7] != 95 )
return 0i64;
if ( a1[8] != 116 )
return 0i64;
if ( a1[9] != 104 )
return 0i64;
if ( a1[10] != 101 )
return 0i64;
if ( a1[11] != 95 )
return 0i64;
if ( a1[12] != 99 )
return 0i64;
if ( a1[13] != 104 )
return 0i64;
if ( a1[14] != 52 )
return 0i64;
if ( a1[15] != 114 )
return 0i64;
if ( a1[16] != 97 )
return 0i64;
if ( a1[17] != 99 )
return 0i64;
if ( a1[18] != 116 )
return 0i64;
if ( a1[19] != 51 )
return 0i64;
if ( a1[20] == 114 )
return a1[21] == 0;
return 0i64;
}
- a1의 각 자리수가 특정 값인지 if문으로 검증하고 있다.
즉, 모든 조건을 충족하는 flag는 a1[i] == [10진수]
를 만족하는 값이다.
우리가 원하는 flag는 int가 아닌 str이므로 10진수를 char 형태로 바꿔준다.
- 10진수를 오른쪽 마우스로 클릭하면 char 형태로 바꿀 수 있다.
바꾸면 다음과 같다.
_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;
}
DH{compar3_the_ch4ract3r}
반응형