본문 바로가기

해킹&보안/악성코드 및 치트

Reverse Engineering 3

이번 문제도 똑같아보이네요

디컴파일링을 해보고 계속 이어서 봅시다
int __fastcall main(int argc, const char **argv, const char **envp)
{
  char v4[256]; // [rsp+20h] [rbp-118h] BYREF

  memset(v4, 0, sizeof(v4));
  sub_1400011B0("Input : ", argv, envp);
  sub_140001210("%256s", v4);
  if ( (unsigned int)sub_140001000(v4) )
    puts("Correct");
  else
    puts("Wrong");
  return 0;
}

입력받은 값이 sub_140001000일경우에 Correct를 출력한다는 것을 알 수 있습니다.  sub_140001000에 대해서 자세하게 들어가보겠습니다.

__int64 __fastcall sub_140001000(__int64 a1)
{
  int i; // [rsp+0h] [rbp-18h]

  for ( i = 0; (unsigned __int64)i < 0x12; ++i )
  {
    if ( *(_DWORD *)&aC[4 * i] != *(unsigned __int8 *)(a1 + i) )
      return 0i64;
  }
  return 1i64;
}

for문이 0x12번 반복  (0x12 = 10진수로 18) 하면서 aC와 입력 값을 1바이트씩 비교하는데 틀릴 경우 0,  맞을 경우 1을 return해줍니다. 

aC배열을 확인해보면 제가 노란색으로 칠해놓은 부분 처럼 문자가 하나씩 나와있는데(아래에 더 있음)

이것들을 한줄에 정렬해보면 찾아야할 패스워드를 알 수 있습니다.

 

답↓

더보기

Comp4re_the_arr4y

'해킹&보안 > 악성코드 및 치트' 카테고리의 다른 글

Reverse Engineering 5  (0) 2024.05.01
Reverse Engineering 4  (1) 2024.03.27
Reverse Engineering 2  (0) 2024.03.25
Reverse Engineering 1  (1) 2024.03.25
Chall #0  (0) 2024.03.23