[Dreamhack]Exercise: Helloworld

최윤지·2024년 9월 8일

Reverse Engineering

목록 보기
4/7

정적 분석

정적 분석은 주로 main 함수를 찾고, 이를 분석하며 시작

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

  • 프로그램의 시작 지점인 진입점(Entry Point, EP)부터 분석을 시작하여 원하는 함수를 찾을 때까지 탐색

    • 단점: 바이너리의 규모가 조금만 커져도 분석에 소요되는 시간 급증
  • 대상 함수의 특성이나 프로그램의 여러 외적인 정보를 이용하여 탐색

프로그램을 정적 분석할 때, 많이 사용되는 정보 중 하나가 프로그램에 포함된 문자열

shift + F12 : 바이너리에 포함된 문자열이 열거된 Strings 창이 나타남

많은 문자열 중 "Hello, world!\n"라는 문자열을 찾아 더블 클릭

X : 상호 참조
"aHelloWorld"를 클릭하고 X를 누르면 문자열 xref 모습과 같이 xrefs(cross reference) 창이 나타남
=> 해당 변수를 참조하는 모든 주소가 출력됨

첫 번째 항목을 더블 클릭하면 main 함수를 찾을 수 있음

F5 : 디컴파일
F5를 눌러 디컴파일

분석
: argc, argv, envp 3개의 인자를 받음

  1. Sleep 함수를 호출하여 1초 대기
  2. qword_14001DBE0에 "Hello, world!\n"
  3. sub_140001060에 "Hello, world!\n"를 인자로 전달하여 호출
  4. 0 반환

qword_14001DBE0 : 값이 변경될 수 있는 전역변수 => data
"Hello, world!\n" : 상수 => rodata

동적 분석

동적 분석은 프로그램을 실행하면서 분석

F2 : 중단점 설정
main 함수로 진입하여 중단점 설정

F9 : 디버깅 시작
디버깅을 시작하여 main 함수까지 실행

F8 : Step Over, 어셈블리 코드를 한 줄 실행(함수 내부로 진입X)

Ctrl + F2 : 디버깅 중단

F7 : Step Into, 어셈블리 코드를 한 줄 실행(함수 내부로 진입)

0개의 댓글