CTF

[드림핵_포렌식] Reversing Basic Challenge #0

코딩 못하는 공대생 2024. 5. 20. 03:45
728x90

링크 : https://dreamhack.io/wargame/challenges/14

 

rev-basic-0

Reversing Basic Challenge #0 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io


문제 설명

이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.

해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!

획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.

예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}


문제 풀이

문제 실행 화면

 

정적분석

1. ida 실행 후 chall0.exe 실행

  • 바이너리의 아키텍처 : AMD64 (x86-64)
  • 파일 포맷 : PE 구조

더보기

- 바이너리에 디버깅 정보를 담고 있는 심볼 경로가 존재 -> 이를 찾아서 로드 하겠냐

- 문제에는 별도의 심볼 (.pdb)를 제공 안함 -> no

2. 문자열 검색

  • 문자열 검증 -> wrong나 correct를 출력
  • View - Open subviews -> Strings

 

3. 함수 분석

 

1) 상호 참조를 통해 correct 문자열이 어떤 함수에서 참조되는지 확인 가능

  • View - Open subviews - Cross References, 단축키 x
  • main에서 correct 문자열 참조

2) f5를 사용해서 디컴파일

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_140001190("Input : ", argv, envp);
  sub_1400011F0("%256s", v4);
  if ( (unsigned int)sub_140001000(v4) )
    puts("Correct");
  else
    puts("Wrong");
  return 0;
}

 

  • sub_140001190 
    - va_start : 가변 인자를 처리하는 함수
    - __acrt_iob_func (1) : 스트림을 가져올 때 사용되는 함수 ( 1 : 표준 출력 스트림에 대한 포인터. stdout )
    -> 문자열 인자를 받고, stdout 스트림을 내부적으로 사용하는 가변 함수임
    -> printf

 

  • sub_1400011F0
    - va_start : 가변 인자를 처리하는 함수
    - __acrt_iob_func (0) : 스트림을 가져올 때 사용되는 함수 ( 0 : 표준 입력 스트림에 대한 포인터. stdin )
    -> 문자열 인자를 받고, 사용자로부터 입력된 문자열을 v4에 저장
    -> scanf

  • sub_140001190 로 input 문자열 출력 -> sub_140001190 로 사용자의 입력을 v4에 저장 
    -> v4에 저장한 입력값을 sub_140001000의 인자로 사용해 호출 -> 반환 값에 따라 wrong나 correct 출력
    -> sub_140001000이 입력값을 검증하는 함수임
  • sub_140001000
    - strcmp로 문자열(Compar3_the_str1ng)과 비교
    -> 문자열과 인자가 같으면 1 반환 -> correct
    -> 문자열과 인자가 다르면 0 반환 - wrong


728x90

'CTF' 카테고리의 다른 글

[WHS2 CTF_포렌식] BadGuy2  (1) 2024.06.11
[드림핵_포렌식] Reversing Basic Challenge #1  (0) 2024.05.20
[picoCTF_포렌식] information  (0) 2024.02.17
[드림핵_포렌식] Enc-JPG  (0) 2024.01.16
[H4CKING GAME] Easy  (0) 2024.01.16