Write-up/Wargame

[Dreamhack wargame] rev-basic-4

Dalseung 2023. 11. 12. 22:19

[Dreamhack] rev-basic-4

문제

image

분석

프로그램 실행

image

프로그램을 받아서 실행했더니, 역시나 바로 종료된다.

ida pro

image

ida pro를 이용해서 파일을 보자.

나는 프로그램을 실행했을 때, 나타나는 문자열을 검색해서 해당 부분의 코드들을 볼 것이다.

처음에는 start 함수가 나온다.

image

[shift + f12]를 사용해서 문자열 검색을 해보자.

image

"Correct"이 보인다. 더블클릭해서 들어가서, 해당 문자열을 참조하는 코드를 보기 위해 [x]키를 눌러 들어간다.

image

코드분석: sub_140001130()
__int64 sub_140001130()
{
  char v1; // [rsp+20h] [rbp-118h]

  memset(&v1, 0, 0x100ui64);
  sub_1400011C0("Input : ");
  sub_140001220("%256s", &v1);
  if ( (unsigned int)sub_140001000((__int64)&v1) )
    puts("Correct");
  else
    puts("Wrong");
  return 0i64;
}

sub_140001130 함수의 작동방식은 다음과 같다.

  1. v1 문자형 변수를 선언한다.
  2. memset 함수를 통해 변수를 초기화한다. (v1변수를 0으로 0x100만큼 초기화)
  3. printf함수로 "Input : " 출력
  4. scanf_s 함수로 256바이트 크기의 문자열을 받음
  5. if 분기문으로 sub_140001000함수의 실행 결과가 참(1)이면 Correct 거짓(0)이면 Wrong 출력을 하고 종료한다.

그렇다면 우리는 sub_140001000함수가 무엇인지 알아볼 필요가 있다.
더블클릭해서 함수를 자세히 보자

코드분석: 함수 sub_140001000()
signed __int64 __fastcall sub_140001000(__int64 a1)
{
  int i; // [rsp+0h] [rbp-18h]

  for ( i = 0; (unsigned __int64)i < 0x1C; ++i )
  {
    if ( (16 * *(_BYTE *)(a1 + i) & 0xF0 | ((signed int)*(unsigned __int8 *)(a1 + i) >> 4)) != byte_140003000[i] )
      return 0i64;
  }
  return 1i64;
}

  1. int i를 선언한다.

  2. i=0인 상태에서 i가 0x1B까지 i를 증가시킬 때까지, for 반복문 안의 if분기문을 돌린다.

  3. 분기문으로 (16*a1[i] &0xF0 | (a1[i]>>4)가 byte_140003000[i]와 같지 않으면 종료한다.

byte_140003000[i]는 무엇인지 한번 보자

image

역시나 byte_140003000에 16진수로 아스키 문자들이 들어가 있는 것을 알 수 있다.

분기문의 결과와 byte_140003000의 값이 같아야지 Correct가 나오므로 저 값들을 풀어보자.

풀이

#!/usr/bin/env python3
a1 = [0x24,0x27,0x13, 0xC6, 0xC6, 0x13, 0x16,0xe6, 0x47, 0xf5, 0x26, 0x96, 0x47, 0xf5, 0x46, 0x27, 0x13, 0x26, 0x26, 0xc6, 0x56, 0xf5, 0xc3, 0xc3, 0xf5, 0xe3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00]
sub_flag = ""
for i in range(0, 28):
    sub_flag += chr(16*a1[i] & 0xf0 | a1[i] >> 4)
print(sub_flag)

image

image

끝.

'Write-up > Wargame' 카테고리의 다른 글

[Dreamhack] ReturnAddressOverwrite  (1) 2024.03.22
[pwnable.kr] fd  (0) 2023.11.12
[Dreamhack wargame] rev-basic-3  (0) 2023.09.04
[Dreamhack wargame] Quiz: x86 Assembly 2 풀이  (0) 2022.09.25
[Dreamhack wargame] Quiz: x86 Assembly 1 풀이  (2) 2022.09.25