본문 바로가기

Reversing/Dreamhack : Reverse Engineering

IDA

정적 분석

main 함수 찾기🔍

바이너리에서 함수를 찾는 방법

  1. 프로그램의 시작 지점인 Entry Point (진입점)부터 분석을 시작해 원하는 함수를 찾을 때까지 탐색
  2. 대상 함수의 특성이나 프로그램의 여러 외적인 정보를 이용해서 탐색

문자열 검색

  • 정적 분석시 많이 사용되는 정보는 프로그램에 포함된 문자열
  • Shift + F12 → 문자열 검색창

상호 참조🔀

  • 정적 분석을 하다가, 어떤 수상한 값이나 함수를 찾았다면, 우리는 이를 참조하는 함수를 분석
  • 단축키 x
  • 해당 변수를 참조하는 모든 주소가 출력

 

💡 main 함수를 찾는 일반적인 방법

  • 일반적으로 main함수는 C계열 언어에서 프로그래머가 작성한 코드 중 가장 먼저 실행되는 함수
  • 운영체제는 바이너리를 실행할 때, 바이너리에 명시된 진입점부터 프로그램을 실행함
  • 진입점이 main 함수인게 불가능한 것은 아니지만, 일반적으로는 그렇지 않음
  • 진입점과 main 함수의 사이를 채우는 것은 컴파일러의 몫
  • 대부분의 컴파일러는 둘 사이에 여러 함수를 삽입해서 바이너가 실행될 환경을 먼저 구성하고, 그 뒤에 main 함수가 호출되게 함.
  • main 함수를 쉽게 찾기 위해서는 컴파일로 작성하는 진입점에 위치한 함수에 익숙해져야함

 

1. parameter

  • IDA는 argc, argv, envp로 3개의 인자를 받는다고 해석함

2. 동작

  • Sleep함수를 호출해 1초 대기
  • 0x3E8u → 1000
  • qword_14001DBE0에 “Hello, world!\n” 문자열의 주소를 넣는다.
  • sub_140001060에 “Hello, world!\n” 를 parameter로 전달하여 호출
  • 0을 반환

3. 반환값

  • 0
qword_14001DBE0
값이 변경될 수 있는 전역변수 → data 섹션
"Hello, world!\n”
실행 도중 값이 변경될 일 없는 상수 → rodata 섹션
sub_140001060
 

 

sub_140001060 함수 분석

  • va_start 함수를 통해 가변 인자를 처리하는 함수
  • __acrt_iob_func 함수는 스트림을 가져올 때 사용되는 함수 → 인자로 들어가는 1 : stdout
  • 문자열 인자를 받고 stdout 스트림을 내부적으로 사용하는 가변 함수

→ sub_140001060 함수는 printf 함수로 추정

 

 

💡 스트림이란?

데이터가 조금씩 흘러온다는 의미에서 명명되었음

데이터는 스트림의 형식으로 한 프로세스에서 다른 프로세스로, 한 프로세스에서 다른 파일로 이동함

  • OS는 stdin(standard input), stdout(standard output), stderr(standard error)와 같은 기본 스트림을 프로세스마다 생성
  • printf함수는 stdout을 통해 출력 데이터를 우리가 볼수 있도록 함
  • scanf함수는 stdin으로 받아서 프로세스에 전달함.

 

동적분석

  • Breakpoint(F2): 중단점을 설정합니다. 프로그램이 해당 지점에 도달하는 순간 정지합니다.
  • Restart(Ctrl + F2): 디버깅을 중단합니다.
  • Run(F9): 프로그램을 계속 실행, 또는 디버깅을 시작합니다.
  • Step Into(F7): 어셈블리 코드를 한 줄 실행합니다. 함수의 호출이라면, 함수 내부로 들어갑니다.
  • Step Over(F8): 어셈블리 코드를 한 줄 실행합니다. 함수 내부로는 들어가지 않습니다.



'Reversing > Dreamhack : Reverse Engineering' 카테고리의 다른 글

[Dreamhack] rev-basic-0  (0) 2025.04.21
[Dreamhack] patch  (0) 2025.04.21
Quiz: x86 Assembly 2-3  (0) 2025.04.16
Quiz: x86 Assembly 1  (0) 2025.04.16
x86 Assembly🤖: Essential Part  (0) 2025.04.16