안녕하세요, 보안 연구원 여러분! 🕵️♂️
우리가 사람을 판단할 때, 그 사람의 '외모'만 보고 판단하지 않죠? 그 사람이 평소에 '어떤 행동'을 하는지를 봐야 진짜 성격을 알 수 있습니다.
소프트웨어(파일)도 마찬가지입니다.
겉모습(아이콘, 파일명)은 계산기(Calculator)처럼 위장할 수 있어도, 내부에서 운영체제(OS)에 요청하는 행동인 API(Application Programming Interface) 호출은 속이기 어렵습니다.
- 정상 파일(계산기): "화면에 숫자 그려줘", "마우스 클릭 받아줘"
- 악성 파일(랜섬웨어): "파일 목록 싹 다 가져와", "암호화해", "인터넷 연결해서 키 보내"
오늘은 정상 파일과 악성 파일의 API 호출 목록(Import Table)을 추출하고, 이를 AI에게 보여주며 "누가 범인인지 맞춰봐!"라고 질의하는 실습을 해보겠습니다.
AI가 과연 이 '행동 목록'만 보고 악성코드를 탐지할 수 있을까요? 확인해 보시죠! 🚀

1. API 호출 목록(Import Table)이란? 📋
윈도우 실행 파일(PE)은 혼자서 모든 걸 다 하지 않습니다. 파일을 읽거나, 인터넷을 하려면 윈도우 운영체제에게 "도와줘!"라고 요청해야 하는데요. 이때 사용하는 함수들이 바로 Windows API입니다.
이 파일이 "나 실행될 때 이 함수들이 필요해!"라고 적어놓은 목록을 IAT(Import Address Table)라고 부르는데, 이것만 봐도 파일의 목적을 80%는 짐작할 수 있습니다.
2. [준비] API 목록 추출하기 🛠️
추출 방법은 여러 가지(PEStudio, Ghidra 등)가 있지만, 우리는 가장 빠르고 간편한 Python 스크립트를 이용해 보겠습니다. (pefile 라이브러리 필요)
💡 Tip: Python이 없다면 'PEStudio' 같은 무료 도구에 파일을 넣고 'Imports' 탭을 긁어오셔도 됩니다!
🐍 Python 추출 스크립트 (extract_api.py)
Python
import pefile
def get_api_list(file_path):
try:
pe = pefile.PE(file_path)
print(f"--- [ {file_path} ] API List ---")
for entry in pe.DIRECTORY_ENTRY_IMPORT:
for imp in entry.imports:
if imp.name:
print(imp.name.decode('utf-8'))
except Exception as e:
print(f"Error: {e}")
# 실습: 정상 파일(계산기)와 악성 샘플 경로를 지정하세요
get_api_list("C:\\Windows\\System32\\calc.exe")
get_api_list("malware_sample.exe")
3. [데이터] 추출된 API 목록 비교 (Sample Data) 📊
스크립트를 돌려서 얻은 두 파일의 API 목록입니다. 눈으로 쓱 봐도 뭔가 느낌이 다르지 않나요?
✅ 파일 A (정상 파일: 계산기)
GetMessageW
TranslateMessage
DispatchMessageW
SetWindowTextW
DrawTextW
BeginPaint
EndPaint
LoadIconW
...
👉 특징: Paint, Window, Message... 주로 화면을 그리고 사용자와 상호작용(GUI) 하는 함수들이 보입니다.
⛔ 파일 B (악성 파일: 랜섬웨어 의심)
FindFirstFileA
FindNextFileA
CryptAcquireContextA
CryptGenKey
CryptEncrypt
InternetOpenA
InternetConnectA
HttpSendRequestA
WriteFile
Process32First
VirtualAllocEx
...
👉 특징: FindFile(파일 뒤지기), Crypt(암호화), Internet(네트워크), VirtualAlloc(메모리 할당)... 뭔가 은밀하고 공격적인 작업을 할 것 같습니다.
4. [실습] AI에게 "누가 범인이야?" 물어보기 🗣️
이제 이 목록을 그대로 복사해서 AI(ChatGPT, Claude 등)에게 판단을 맡겨봅시다.
📝 프롬프트 (Prompt)
[역할] 당신은 악성코드 분석 전문가입니다.
[상황] 나는 두 개의 실행 파일(A, B)에서 추출한 API Import 목록을 가지고 있습니다.
[요청사항]
- 각 파일의 API 목록을 분석하여 해당 프로그램의 주요 기능(행위)을 추론하세요.
- 두 파일 중 악성코드로 의심되는 파일을 지목하고, 그 근거가 되는 위협적인 API 조합을 설명하세요.
- 예상되는 악성 행위 유형(예: 랜섬웨어, 키로거, 인젝터 등)을 분류하세요.
[데이터]
(파일 A 목록):
GetMessageW, TranslateMessage, SetWindowTextW, DrawTextW, ... (위의 정상 목록 붙여넣기)
(파일 B 목록):
FindFirstFileA, CryptEncrypt, InternetOpenA, VirtualAllocEx, ... (위의 악성 목록 붙여넣기)
5. [결과] AI의 소름 돋는 분석 🕵️♀️
AI는 단순한 함수 이름의 나열을 보고 '문맥(Context)'을 읽어냅니다.
🤖 AI 분석 결과
1. 행위 분석:
- 파일 A: 윈도우 창을 생성하고, 화면에 텍스트를 그리며, 사용자 입력을 대기하는 전형적인 GUI 응용 프로그램입니다. 위험한 기능이 보이지 않습니다.
- 파일 B: 파일 시스템을 탐색(FindFile)하고, 데이터를 암호화(CryptEncrypt)하며, 외부 서버와 통신(HttpSendRequest)합니다. 또한 다른 프로세스의 메모리에 접근(VirtualAllocEx)하려는 징후가 보입니다.
2. 범인 지목: 🚨 파일 B (악성 의심)
3. 결정적 증거 (Suspicious API Combination):
- 랜섬웨어 징후: FindFirstFile + WriteFile + CryptEncrypt 조합은 PC 내의 파일을 찾아 내용을 암호화하고 덮어쓰는 전형적인 랜섬웨어 패턴입니다.
- C2 통신: InternetOpen + HttpSendRequest는 암호화 키를 전송하거나 명령을 받기 위한 네트워크 행위입니다.
- 인젝션(Injection): VirtualAllocEx는 다른 프로세스에 악성 코드를 심을 때 자주 사용됩니다.
4. 결론:
파일 B는 랜섬웨어(Ransomware) 또는 정보 탈취형 트로이목마일 가능성이 매우 높습니다. 즉시 격리하세요!
6. 마치며: AI, 정적 분석의 훌륭한 파트너 🤝
어떠신가요? 우리는 코드를 한 줄도 보지 않고, 단지 "얘가 무슨 도구(API)를 챙겼는지" 목록만 보여줬을 뿐인데 AI는 정확하게 악성 여부를 판단했습니다.
물론 지능적인 악성코드는 API를 숨기기도(Dynamic Loading) 하지만, 이 'API 프로파일링' 기법은 초동 분석에서 가장 빠르고 효과적인 방법의 하나입니다.
여러분의 PC에 있는 찜찜한 파일이 있다면, 오늘 배운 방법으로 API 목록을 뽑아서 AI에게 한번 물어보세요! 의외의 결과를 들려줄지도 모릅니다. 👻
다음 시간에는 이론 편, "어셈블리 명령어 패턴과 C언어의 매핑 구조"를 통해 겉모습이 아닌 진짜 코드 속으로 들어가는 준비를 해보겠습니다. 기대해 주세요!
'일반IT > IT보안' 카테고리의 다른 글
| [실습] "이거 아까 걔 아냐?" 👯♂️ 악성코드 원본 vs 변종, AI로 유전자 검사(유사도 분석) 하기 (0) | 2025.12.14 |
|---|---|
| [실습] 악성코드의 '지문'을 찾아라! 🕵️♂️ 고유 문자열 및 시그니처 추출 완벽 가이드 (1) | 2025.12.12 |
| [이론] C언어 vs 어셈블리어, 완벽 매핑 가이드! 🧩 (리버싱의 기초 체력 다지기) (0) | 2025.12.12 |
| [심화] 실행 버튼 누르지 마세요! 🚫 AI로 악성코드의 미래를 예언하는 법 🔮 (정적 분석의 꽃, 동작 예측) (0) | 2025.12.12 |
| [실습] "이 코드, 누가 주석 좀 달아줘!" 😫 AI 조수에게 상세 주석(Comment) 자동 생성 시키기 ✍️ (0) | 2025.12.12 |