[Dreamhack] Reverse Engineering Stage 6 - rev-basic-3

2023. 8. 6. 23:50·Hacking/Reversing

문제 설명

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

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

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

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

https://dreamhack.io/wargame/challenges/17

 

rev-basic-3

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

dreamhack.io

 

파일 실행

다운로드 받은 파일을 실행해 프로그램이 어떤식으로 동작하는지 확인해 보았다.

문자열을 넣었을 때 Wrong이라는 문자열을 출력한다.

IDA를 통해 해당 프로그램을 분석해 보자

 

WinMain 함수

함수를 확인해 보니 call로 sub_140001000으로 이동한 뒤 jz로 분기점이 갈리는 것 같다.

따라서 해당 함수로 이동해 보았다.

 

함수 중에서 눈에 띄었던 부분이다.

xor 함수와 if, for문을 사용해서 무언가 작용을 하는 것을 눈치채어 f5를 이용해서 프로그래밍 코드로 변환하여 보았다.

들어온 문자열을 열심히 연산하여 저장된 문자열과 같은지 확인한다.

저장되어 비교하는 문자열이 무엇인지를 구하면 될 것 같다.

 

저장된 값은 

0x49 0x60 0x67 0x74 0x63 0x67 0x42 0x66 0x80 0x78 0x69

0x7B 0x99 0x6D 0x88 0x68 0x94 0x9F 0x8D 0x4D 0xA5 0x9D 0x45

이다.

 

이제 위의 프로그램을 역연산하면 된다.

#include <stdio.h>

void reverseCalculation(unsigned char *chars) {
	char ch;
    for (int i = 0; i < 0x18; ++i) {
        ch = (chars[i] - 2 * i) ^ i;
        printf("%c", ch);
    }
}

int main() {

    unsigned char chars[] = {0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78,
		0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45, 0x00};
    
    reverseCalculation(chars);
    return 0;
}

역연산을 위한 코드이다.

아까 발견했던 문자열을 역으로 계산하여 출력하는 간단한 코드이다.

 

해당 프로그램을 돌린 결과이다.

플래그가 맞는지 인증해보자.

 

클리어

예전에 비슷한 문제를 풀어본 적이 있어서 그런지 별로 어렵지 않았다.

 

 

 

 

'Hacking/Reversing' 카테고리의 다른 글
  • [Dreamhack] Reverse Engineering Stage 8 - 코드 브라우저 1
  • [Dreamhack] Reverse Engineering Stage 7 - Ghidra Introduction & Install
  • [Dreamhack] Reverse Engineering Stage 6 - Exercise: patch
  • [Dreamhack] Reverse Engineering Stage 6 - Exercise: rev-basic-1
단축키실행해보세요
단축키실행해보세요
공대생
  • 단축키실행해보세요
    Ctrl + Shift + ESC
    단축키실행해보세요
  • 전체
    오늘
    어제
    • 분류 전체보기 (171)
      • 외부 활동 (4)
      • BOJ (36)
        • Python (24)
        • C++ (12)
        • Java (0)
      • Hacking (91)
        • Crypto (4)
        • Forensics (2)
        • Mobile Hacking (5)
        • Reversing (21)
        • System (21)
        • Web Hacking (38)
      • Cloud (14)
        • Serverless (1)
        • AWS (8)
      • ML (5)
      • Data Structure (16)
      • Git (0)
      • DevOps (0)
        • Terraform (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Dreamhack
    datastructure
    XPath
    유석종교수님
    beebox
    SAA
    자료구조
    pwnable
    AWS
    부하테스트
    basicrce3
    python
    백준
    SISS
    System
    c
    AI
    acc
    backjoon
    CodeEngn
    S3
    Redis
    Reversing
    EC2
    htmlinjection
    cloud
    ML
    bWAPP
    Reflected
    Systemhacking
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
단축키실행해보세요
[Dreamhack] Reverse Engineering Stage 6 - rev-basic-3
상단으로

티스토리툴바