Ghidra - Import Function

안상준·2026년 1월 8일

Reversing

목록 보기
7/16
post-thumbnail

Ghidra Study

Analysis of Import Function

.exe 실행파일 내에서 Import 함수에 대해서 공부하였다.
Ghidra를 활용하여 Import 함수를 분석해 보았다.

Import 함수란?

Import 함수는 실행 파일 내부에 코드를 직접 포함하지 않고, 외부 DLL 파일에 있는 함수를 호출하기 위해 참조 정보만 남겨둔 함수다.
예를 들어 IsDebuggerPresent라는 Window API를 사용한다 하면, kernel32.dll에 있는 함수의 주소만 실행파일 내부에 IAT라는 곳에 저장하고 실제 함수 동작은 가져오지 않는다.
IAT(Import Address Table)는 Import된 함수의 위치를 저장한 table이다. Import된 함수를 호출하면 IAT를 거쳐 실제 함수가 존재하는 DLL에 이동하여 동작하게 된다.

Import 함수 분석 이유

Import 함수를 분석하는 이유는 코드의 동작을 짐작할 수 있기 때문이다.
이러한 이유 때문에 Malware는 IAT를 Packing(코드 압축, 암호화 기술)하거나, IAT 없이 Window API를 호출하기도 한다.

URLDownloadToFileA 분석

책에서 제공하는 실습 파일을 대상으로 분석을 진행해 보았다.

Ghidra로 파일을 열면 좌측 중단에 Imports 부분이 보일 것이다. 해당 부분이 동적으로 링킹하고 있는 DLL 목록이다.
책에서는 URLDownloadToFileA함수를 대상으로 분석을 진행하였다.

좀 더 빠른 분석을 위해 해당 함수에 대하여 검색해 보았고, 이름 그대로 URL을 이용하여 데이터를 다운로드 하고 파일로 저장하는 함수다.


Ghidra 좌측에서 해당 함수를 클릭하면 함수에 대한 포인터가 정의된 주소로 이동한다.
여기서 포인터는 IAT 메모리 주소를 가리킨다.

함수를 호출하는 곳을 확인하고 싶으면 좌클릭 후 References에서 확인이 가능하다. 사진에 나오는 004011fc으로 이동하면

함수를 CALL하는 부분을 확인할 수 있다.

URLDownloadToFileA함수를 decompile 한 결과고 래퍼함수임을 확인할 수 있다.
(이름이 같은 이유는 Ghidra에서 편의 제공을 위해...)

URLDownloadToFileA를 호출하는 함수 FUN_004010e0을 decompile한 코드가 위 사진이다.
간단히 동작에 대해서 설명하면 PathFileExistA를 호출하여 경로에 파일이 있는지 확인 후 없으면, URLDownloadFileA를 호출하고 있으면 0을 반환하는 동작을 수행한다.

문자열 분석

문자열 분석을 통해 컴파일로 인해 손실되지 않는 정보를 활용하여 프로그램 기능을 추정할 수 있다.

메뉴의 Window > Defined Strings를 통해 문자열 검색이 가능하다.

이런식으로 찾는 것이 가능하다.
여기서 찾은 위치가 위에서 분석한 곳과 다른 이유는 Defined Strings는 PE 파일 구조 중 INT(Import Name Table)영역에 속하기 대문이다.
여기에 나오는 주소인 00416fce는 Windows 로더에게 알리는 용도로 적은 문자열 데이터라고 한다.

프로그램이 돌아가기 직전 Windows 로더는 00416fce에 적힌 URLDownloadToFileA라는 글자를 읽고 이를 urlmon.dll에서 찾아 함수의 실제 주소를 구한다.
해당 주소는 00411118 (IAT)에 써넣는다.
프로그램이 실행되면 CALL DWORD PTR [00411118]이 실행되고 DLL로 점프하여 함수가 실행되는 방식이다.

0개의 댓글