본문 바로가기
Rev

IDA 기초 (with 정적분석, 동적분석)

by ㅇㅅㅇ.. 2024. 8. 15.

실행 파일 열기

 

1. 정적분석

 

방법 1: 프로그램의 시작 지점 Entry Point부터 분석을 시작하여 원하는 함수를 찾을 때까지 탐색

 

=> 바이너리의 규모가 조금만 커져도 분석에 소요되는 시간이 급증한다.

 


방법 2: 대상 함수의 특성이나 프로그램의 여러 외적인 정보를 이용하여 탐색


문자열 => 정적 분석을 할 때 많이 사용되는 정보 중 하나
(프로그래머는 디버깅 메세지를 출력하거나, 로그 파일을 생성하는 등의 목적으로 여러 문자열을 프로그램에 포함시키는데, 이 문자열들은 특성상 유용한 정보를 제공할 때가 많다.)

 

Shift+F12 단축키로 문자열 조회

 

컴파일 과정에서 다양한 문자열이 바이너리에 추가되는데, 컴파일 과정이 아니라 프로그래머가 추가했을 것으로 추측되는 문자열을 발견

 

해당 문자열을 더블 클릭하면 위와 같은 창이 뜨고

 

aHelloWorld를 클릭하고 단축키 X (XRef 기능)을 통해 해당 문자열이 어디서 사용되는지 추적할 수 있다. xrefs 창에는 해당 변수를 참조하는 모든 주소가 출력되는데 여기선 main+16에서 참조하고 있음을 알 수 있다. 첫 번째 항목을 더블클릭하면

 

main 함수를 찾을 수 있다. main 함수를 클릭한 상태에서 F5로 디컴파일하면

 

디컴파일된 코드를 통해 함수의 주요 정보를 볼 수 있다.

 

  • 인자
    => argc, argv, envp 3가지 인자를 받음
  • 동작
    1. Sleep 함수를 호출하여 1초 정지 (0x3E8u = 부호 없는 1000, 1000 밀리초)
    2. qword_14001DBE0라는 64비트 정수형 변수에 "Hello, world!\n" 문자열의 메모리 주소를 대입
    3. sub_140001060 함수에 "Hello, world!\n"를 인자로 전달하여 호출
  • 반환
    => 0을 반환

 

앞선 코드에서 sub_140001060 가 어떤 함수인지를 알아보기 위해 클릭하고 F5 디컴파일

 

  • 인자
    => 첫 번째 인자로 64비트 정수형 값을 받고, 가변인자(...)를 받는다.
  • 동작
    • 가변 인자 변수 va 선언
    • va_start()로 va_list 초기화
    • 표준 라이브러리 함수__acrt_iob_func()로 '1u' stdout을 포인터 v1에 반환
  • 반환
    => v1, al, 0LL, va를 인자로 하여 sub_140001010 함수 호출

 

 

=> sub_140001060 함수는 printf 함수로 추정할 수 있다.

 


2. 동적 분석

보통 관심이 있는 동작은 프로그램 중 아주 일부분이기에 진입점부터 원하는 함수까지 한 줄씩 실행시키는 것은 비효율적

=> 디버거를 이용하여 중단점 설정(Break Point, F2) 및 실행(Run, F9)을 통해 원하는 부분만 실행

 

main 함수에 중단점 설정(F2) 후 디버깅 실행(F9)

 

 

1. 디버깅과 Step over(F8)

디버깅이 실행되면 위와 같이 화면과 함께 터미널 창이 하나 생긴다. F8 단축키로 한줄한줄씩 실행하면 터미널에서 실행 결과를 확인할 수 있고, register 값이나 stack, 메모리에 저장되는 값 또한 볼 수 있다.
register 창에서 RIP를 확인해보면
F8을 눌러 한줄씩 실행할 때 마다 값이 바뀌는 걸 알 수 있다.
main 함수의 마지막 줄까지 실행되면 원래 루틴으로 돌아간다.
터미널에서 실행된 결과를 통해 sub_140001060 함수가 printf와 동일한 동작을 수행하는 걸 알 수 있다.

 

2. 디버깅과 Step Into(F7)

Step Over의 경우 한 단계 한 단계 실행하면서 다른 함수가 있을 경우 해당 함수의 내부까지는 진입하지 않는다. 하지만 분석을 하다 함수가 호출하는 다른 함수까지 정밀하게 분석해야 될 경우가 있고, Step Into이 이러한 기능을 지원하고 있다. 내부로 진입하고 싶은 함수에서 F7을 누르면 다음과 같이 내부로 들어갈 수 있다.

 

'Rev' 카테고리의 다른 글

IDA 단축키  (2) 2024.08.15