안녕하세요, 끝까지 파고드는 보안 분석가 여러분! 🕵️♂️
지난 시간까지 우리는 난독화된 코드를 해독하고, 예쁘게 주석까지 달았습니다. 이제 코드가 무슨 뜻인지 대충 알 것 같습니다.
이쯤 되면 손가락이 근질거립니다.
"그냥 더블 클릭해서 실행해볼까? 샌드박스 돌리면 결과 바로 나올 텐데?"
하지만 잠깐! ✋
악성코드는 생각보다 영악합니다.
- 가상환경 탐지: "어? 여기 샌드박스네? 착한 척하고 가만히 있어야지." 😇
- 시한폭탄 (Logic Bomb): "2025년 12월 25일에만 터질 거야." 💣
- 서버 연결 불가: 해커의 C2 서버가 이미 닫혀서 실행해도 아무 일도 안 일어날 수 있습니다.
이럴 때 필요한 최고급 기술이 바로 '실행 없이 동작 결과 예측하기(Emulation)'입니다.
마치 머릿속으로 바둑 수를 두듯이, AI를 가상의 CPU로 활용해서 코드의 미래를 시뮬레이션해보는 것이죠.
오늘은 AI에게 "너는 지금부터 컴퓨터야. 이 코드를 머릿속으로 실행해봐!" 라고 시키는 심화 실습을 진행하겠습니다. 🧠⚡️

1. 왜 굳이 '예측'을 하나요? (Dynamic vs Static)
동적 분석(실제 실행)은 편하지만, 위에서 말한 대로 함정에 빠지기 쉽습니다. 반면, 정적 분석(코드만 보기)은 안전하지만 구체적인 데이터(예: 생성될 파일명, 접속할 URL)를 알기 어렵습니다.
AI 기반 동작 예측은 이 둘의 장점을 합친 것입니다.
코드를 실행하지 않지만(안전), 실행한 것과 같은 결과값(구체적 정보)을 얻어내는 기술이죠.
2. [실습 시나리오] DGA(도메인 생성 알고리즘) 예측하기 🎲
악성코드, 특히 봇넷(Botnet)은 차단을 피하기 위해 매일 접속 주소를 바꿉니다. 이를 DGA(Domain Generation Algorithm)라고 합니다.
우리가 분석 중인 악성코드에서 아래와 같은 날짜 기반 URL 생성 함수를 찾았다고 가정해 봅시다.
📄 [Code] 분석 대상 DGA 함수 (Python 의사 코드)
Python
# 해독된 DGA 함수
def generate_c2_url(year, month, day):
base_string = "malware"
# 1. 연, 월, 일을 더함
seed = year + month + day
# 2. 시드값으로 복잡한 연산 (여기서는 단순화함)
magic_number = (seed * 0x41) % 25
# 3. 아스키 코드로 변환하여 문자 생성
suffix_char = chr(97 + magic_number) # 97은 'a'
# 4. 최종 도메인 조합
final_domain = f"http://{base_string}-{suffix_char}.com"
return final_domain
이 코드를 실행하려면 파이썬을 설치하고 코드를 옮겨야 합니다. 귀찮죠? AI에게 시켜봅시다.
3. AI를 '가상 인터프리터'로 만들기 🤖
AI에게 단순히 "해석해줘"가 아니라 "실행 결과를 시뮬레이션해줘"라고 해야 합니다.
🗣️ [Prompt] 예측 프롬프트 입력
[역할] 당신은 파이썬 코드 인터프리터(Python Interpreter)입니다.
[상황] 나는 악성코드가 특정 날짜에 어떤 C2 서버 도메인을 생성하는지 알고 싶습니다.
[요청사항]
- 아래 제공된 generate_c2_url 함수의 로직을 단계별로(Step-by-step) 추적하세요.
- 입력값(Input)이 Year=2025, Month=12, Day=25 일 때, 변수 seed, magic_number, suffix_char가 어떻게 변하는지 계산 과정을 보여주세요.
- 최종적으로 생성될 final_domain 문자열을 출력하세요.
- 주의: 코드를 실제로 실행할 수 없으므로, 논리적 연산을 통해 정확한 값을 도출해야 합니다.
[코드]
(위의 DGA 함수 코드 붙여넣기)
4. [결과] AI의 미래 예언 적중! 🎯
AI는 마치 자신이 컴퓨터가 된 것처럼 변수 값을 계산해서 보여줍니다.
🤖 AI 시뮬레이션 결과
1. 입력값 설정:
- year = 2025
- month = 12
- day = 25
2. 단계별 실행 추적:
- Line 4 (Seed 계산):seed = 2062
- seed = 2025 + 12 + 25
- Line 6 (Magic Number 계산):2062 * 65 = 134030magic_number = 5
- 134030 % 25 = 5
- magic_number = (2062 * 65) % 25 (0x41은 십진수로 65)
- Line 8 (Suffix Char 생성):아스키 코드 102는 문자 'f' 입니다.
- chr(97 + 5) -> chr(102)
3. 최종 결과:
- final_domain = "http://malware-f.com"
🔮 예측 결론:
2025년 12월 25일에 이 악성코드는 http://malware-f.com 으로 접속을 시도할 것입니다.
5. 이 기술의 활용 분야 🛠️
단순 계산뿐만 아니라 다양한 시나리오에서 이 '가상 실행' 기술이 쓰입니다.
- 복호화 키 예측: "파일 헤더 앞 4바이트가 0xDEADBEEF일 때, XOR 키가 무엇이어야 복호화가 될까?"
- 안티 디버깅 우회: "IsDebuggerPresent() 함수가 True를 리턴한다고 가정했을 때, 코드 흐름이 어디로 튀는지 보여줘."
- 랜섬웨어 동작 확인: "이 루프가 다 돌고 나면 파일 확장자가 뭘로 바뀌지?" (.enc? .lock?)
6. 주의사항: AI는 계산기가 아니다! ⚠️
정말 중요한 팁입니다.
LLM(대형 언어 모델)은 '언어' 모델이지 '계산기'가 아닙니다.
복잡한 비트 연산(Bitwise Operation)이나 큰 수의 나눗셈을 시키면 가끔 틀린 답(Hallucination)을 뻔뻔하게 내놓습니다.
- Tip 1: 계산 과정이 복잡하면, AI에게 "Python 코드를 짜서 계산해줘"라고 요청하는 것(Code Interpreter 기능 사용)이 훨씬 정확합니다.
- Tip 2: 중요한 지표(IoC)라면, AI가 예측한 로직을 바탕으로 간단한 스크립트를 직접 짜서 교차 검증해야 합니다.
🎉 실습 마무리: "손 안 대고 코 풀기" 성공!
오늘 우리는 악성코드를 실제로 실행하지도, 위험한 서버에 접속하지도 않고 2025년 크리스마스에 접속할 해커의 서버 주소를 알아냈습니다. 이것이 바로 고수들이 사용하는 '브레인 에뮬레이션(Brain Emulation)'의 AI 버전입니다. 😎
이제 여러분은:
- 코드를 자르고 (Chunking)
- 청소하고 (Cleaning)
- 풀어내고 (Deobfuscation)
- 주석 달고 (Commenting)
- 실행 결과까지 예측 (Prediction) 했습니다.
사실상 분석은 끝났습니다. 남은 건 무엇일까요?
네, 이 멋진 분석 결과를 정리해서 보고하는 일입니다. 다음 시간에는 "침해사고 대응 보고서 자동 생성"으로 대장정의 막을 내리겠습니다.
마지막까지 화이팅! 💪
'일반IT > IT보안' 카테고리의 다른 글
| [실습] "너, 행동이 좀 수상한데?" 🤨 정상 파일 vs 악성 파일, API 호출 비교로 잡아내기! (AI 활용법) (0) | 2025.12.12 |
|---|---|
| [이론] C언어 vs 어셈블리어, 완벽 매핑 가이드! 🧩 (리버싱의 기초 체력 다지기) (0) | 2025.12.12 |
| [실습] "이 코드, 누가 주석 좀 달아줘!" 😫 AI 조수에게 상세 주석(Comment) 자동 생성 시키기 ✍️ (0) | 2025.12.12 |
| [실습] 꼬불꼬불 라면 사리 같은 '스파게티 코드', AI로 쫙 펴서 평문으로 만들기! 🍜 (제어 흐름 난독화 해제) (1) | 2025.12.11 |
| [실습] 난독화된 코드, AI가 토하지 않게 떠먹여주기! 🥄 (청크 분할 전략) (0) | 2025.12.11 |