목차
1. 개요
1.1) 분석 파일 정보
2. 상세 분석
2.1) 탐지 회피
2.1.1) 코드 난독화
2.1.2) GetModuleHandleW 구현
2.1.3) GetProcAddress 구현
2.1.4) LoadLibraryW 동적 호출
2.1.5) Winhttp 함수 주소 추출
2.1.6) syscall table 생성
2.1.7) Heaven’s Gate 기법
2.1.8) ntdll.dll 매핑
2.2) 패킹 여부 확인
2.3) C2 연결
2.3.1) 추가 C2 연결
2.3.2) c2conf 복호화
3. 결론
4. 참고 문헌

1. 개요
Lumma Stealer는 C언어 기반 정보탈취 악성코드로, 감염된 PC 내 암호화폐 지갑과 브라우저에 저장된 계정·결제정보를 탈취하는 것을 주목적으로 한다. 이 악성코드는 Malware-as-a-Service(MaaS) 형태로 유통되어 유료 서비스로 제공되며, 전문 지식이 없는 일반 사용자도 쉽게 사이버 공격에 가담할 수 있게 해 위협이 크다. 이 때문에 다양한 변종이 존재하고, 빌드와 가격은 크게 세 가지 등급으로 나뉜다.

- Experienced - $250/month : 로그를 대량으로 다운로드하는 기능과 특정 매개변수로 로그를 필터링하는 기능을 포함.
- Professional - $500/month : 스틸러에 대한 규칙을 무제한으로 생성할 수 있고, 다른 사용자와 통계 공유가 가능하며 비상주 로더 등 추가 기능을 제공.
- Corporate - $1000/month : 개발자는 기업 플랜을 통해 사용자가 무작위 빌드를 받는다고 주장. 즉, 각 빌드는 서로 다르게 생성되며, Heaven’s Gate(32비트 모드에서 64비트 모드로 전환해 64비트 코드를 실행하는 기법)를 구현해 샌드박스·디버거 등 동적 분석을 회피하는 기능을 포함.
이전 글에서는 ClickFix 기법과 침해 사례 및 감염 경로에 대해 다뤘다. 이번 글에서는 Heaven’s Gate, API 난독화, 게임 플랫폼 남용 등 탐지 회피 기술을 탑재한 Lumma Stealer를 분석하려고 한다.
1.1) 분석 파일 정보
Lumma는 다양한 변종으로 악성코드를 유포한다. 그중 Lumma Stealer를 수집하여 분석을 진행하였다.
| C2 | blast-hubs[.]com blastikcn[.]com decreaserid[.]world dsfljsdfjewf[.]info hoyoverse[.]blog inspirzedthoughts[.]tech lestagames[.]world pasteflawwed[.]world stormlegue[.]com hxxps://steamcommunity[.]com/profiles/76561199822375128 |
| File name | 7g487n.exe |
| MD5 | d4c0863a69bd1214eaa2ee7b7eb4ec72 |
| SHA-256 | 16538b354e9e7484f7a5ab63f566b131308addc1968b7a69034b758f11b07173 |
| File type | Win32 EXE |
| File size | 334.00 KB (342016 bytes) |
| Creation Time | 25-02-16 15:26:45 UTC |
| File name | output.241471247.txt |
| MD5 | 4c55078da7f0d632b0af29dfa23e0db7 |
| SHA-256 | 533a6854efe4f57824ad9e8154d448d22eab66af085e377e190b648f2363ecef |
| File type | ASCII text |
| File size | 7.27 KB (7448 bytes) |
2. 상세 분석
2.1) 탐지 회피
Lumma Stealer는 탐지 회피 및 분석 지연을 위해 문자열 암호화/난독화, API Resolving, heaven`s gate 기법 등을 사용한다.
2.1.1) 코드 난독화



Lumma Stealer는 모든 정적 문자열을 바이너리 내부에 암호화된 상태로 저장해 필요시 런타임에 복호화하여 사용하며, 다수의 jmp 명령으로 제어 흐름을 난독화해 정적 분석을 방해한다.
2.1.2) GetModuleHandleW 구현
대부분의 함수는 표준 WinAPI나 CRT 호출을 피하고 자체 구현한 네이티브 코드로 호출되며, 이는 흔한 탐지 지표와 행위 기반 룰을 회피하기 위함이다.

447240() 루틴에서는 복호화된 문자열을 매개변수로 받고 GetModuleHandleW() API 호출 없이
직접 PEB의 LDR 구조체 내 InLoadOrderModuleList를 순회한다. 해당 방식으로 프로세스에 로드된 모듈들의 베이스 주소를 수동으로 찾아 ntdll.dll, kernel32.dll, user32.dll 등의 베이스 주소를 얻는다.

4471D0() 루틴은 mov eax, fs:[0x30] 명령을 사용해 FS 세그먼트의 TEB(스레드 환경 블록)에서 PEB 주소를 가져온다.
이후 PEB를 통해 프로세스 관련 정보를 직접 참조할 수 있다.

PEB.Ldr(0x0C) → InLoadOrderModuleList(0x0C)를 순회하며, 매개변수로 전달된 복호화된 모듈 이름을 기반으로 해당 모듈의 베이스 주소를 찾아 반환한다.
2.1.3) GetProcAddress 구현

447590() 루틴은 첫 번째 인수로 연산된 API 함수명을 받고, 두 번째 인수로 복호화된 모듈 이름을 받는다. 전달된 모듈의 NT Header -> Export Directory(IMAGE_DIRECTORY_ENTRY_EXPORT)를 읽어 내보낸 함수 목록을 검사하고, 각 함수명에 동일한 연산을 적용해 전달된 값과 비교해 일치하면 그 엔트리의 RVA를 추출해 모듈 베이스에 더한 뒤 실제 함수 주소를 반환한다. 해당 패턴은 정적 문자열 노출을 줄이고 탐지를 회피하려는 목적을 가진 악성코드에서 주로 관찰되는 기법이다.
이렇게 가져온 주요 함수 주소는 다음과 같다.
| KERNEL32.DLL | LoadLibraryExW, FreeLibrary |
| ntdll.dll | RtlAllocateHeap, RtlReAllocateHeap, RtlHeapFree |
2.1.4) LoadLibraryW 동적 호출

앞서 획득한 LoadLibraryW 주소를 사용해 crypt32.dll, winhttp.dll, ws2_32.dll을 동적으로 로드한다.
2.1.5) Winhttp 함수 주소 추출

C2 연결 및 통신에 필요한 WinHTTP 함수들(WinHttpOpen, WinHttpConnect, WinHttpOpenRequest, WinHttpSendRequest, WinHttpReceiveResponse, WinHttpReadData 등)의 주소를 동적으로 가져온다.
2.1.6) syscall table 생성

ntdll.dll의 Export Table을 읽어 AddressOfNames 엔트리에서 내보낸 함수명들을 순회하며 추출한다.

RtlAllocateHeap()로 힙 메모리를 확보한 후, 미리 추출한 ntdll.dll 함수명들을 연산을 통해 암호화한다. 그다음 각 함수에 대응하는 syscall 번호를 식별하고 할당한 힙 영역에 syscall 번호 테이블과 암호화된 함수명들을 정렬하여 테이블을 생성한다. 이러한 동작은 헤븐즈 게이트 코드 실행 시 syscall을 호출하기 위해 필요한 syscall number를 수집·정렬해 준비하는 과정으로 해석된다.
그림 9)와 같이 각 구성된 테이블은 4바이트 단위로 두 개씩 묶여 있으며, 첫 4바이트는 암호화된 함수명을, 다음 4바이트는 해당 함수에 대응하는 syscall number가 저장되어 있다.
2.1.7) Heaven’s Gate 기법

NTSYSAPI NTSTATUS ZwOpenSection(
[out] PHANDLE SectionHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes
);
Heaven’s Gate 기법을 사용해 ZwOpenSection()을 호출한다. Heaven’s Gate는 32비트 바이너리에서 wow64cpu.dll의 전환 메커니즘을 통해 64비트 syscall을 수행한다. 모든 Heaven’s Gate 호출은 4458B0() 루틴을 통해 이루어지며, 첫 번째 인수로 syscall 번호를 받고, 두 번째 인수로 syscall 반환 후 스택 정리 크기(예: ret 0xC)를 받아 MSDN 규약에 따라 SectionHandle, DesiredAccess, ObjectAttributes 등의 파라미터로 syscall을 수행한다.


WOW64(Windows on Windows 64-bit)는 64비트 OS에서 32비트로 빌드된 애플리케이션을 실행하게 해 주는 호환성 서브시스템이다. 32비트 프로세스는 레지스터 너비, 주소 체계 등 차이 때문에 직접 64비트 시스템콜을 호출할 수 없으므로, 정상 동작에서는 WOW64 모듈들이 제공하는 전환 경로를 통해 64비트 컨텍스트로 진입해 syscall을 수행한다.
Heaven’s Gate 기법은 32비트 컨텍스트에서 64비트로 전환되는 정상 경로를 강제로 우회하거나 생략함으로써, 32비트 프로세스가 곧바로 64비트 코드를 실행하도록 만든다. 구현 방식으로는 call far, jump far, ret far 같은 far 제어 전송을 사용하며 해당 분석 샘플은 jmp far(0x33) 명령을 사용하여 64비트 코드를 실행한다. 이로 인해 OllyDbg 같은 일반적인 디버거나 단순한 API 트레이싱 도구로는 호출 흐름을 추적·감지하기가 어렵다.

64비트 Windows에서 32비트 애플리케이션을 실행하면, WOW64와 관련된 64비트 모듈들이 프로세스 주소 공간에 자동으로 로드된 것을 확인할 수 있다.

WinDbg 같은 64비트 전환 및 커널 레벨 디버깅을 지원하는 도구에서는 Heaven’s Gate의 호출 흐름을 동적 분석할 수 있다. 호출 흐름을 트레이스 하면 최종적으로 ZwOpenSection() 시스템 콜이 호출되는 것을 확인할 수 있다.
2.1.8) ntdll.dll 매핑

동일한 방식으로 Heaven’s Gate 기법을 사용해 NtMapViewOfSection()을 호출하여 ntdll.dll의 복사본을 메모리에 매핑한다.
2.2) 패킹 여부 확인

GetUserDefaultUILanguage()로 실행 환경의 UI 언어(LANGID)를 조회한다. 반환값으로 0x0412가 나왔으며,
이는 한국어(대한민국)를 가리키는 식별자이다.

RtlAllocateHeap()로 힙 메모리를 할당한 뒤, 할당된 메모리에 현재 실행 중인 Lummac2.4.exe의 경로를 작성한다.

Heaven’s Gate를 통해 ZwOpenFile()을 호출한다. 호출 결과로 얻은 FileHandle이 0x190로 관찰되었고, 이 핸들은 현재 실행하고 있는 C:\Users\*****\Desktop\Lumma\LummaC2.4.exe 의 핸들로 확인된다.

RtlAllocateHeap()로 힙 메모리를 할당한 후, Heaven’s Gate를 통해 NtReadFile()을 호출해 Lummac2.4.exe 바이너리를 읽어 메모리에 기록한다. 해당 동작은 이후 메모리 패킹 여부를 검사하기 위한 것으로 추정된다.


패킹 여부를 검사하고 패킹이 적용되어 있지 않거나 해제된 상태이면, 내부에 저장된 암호화된 lpText 버퍼를 복호화해 평문을 생성한다. 이 평문은 이후 메시지박스 호출 시 표시될 텍스트로 사용된다.

Heaven’s Gate를 통해 NtRaiseHardError()를 호출하여 메시지박스를 생성한다. 일반적인 구현과 달리 MessageBox()를 직접 호출하지 않고 NtRaiseHardError()를 이용해 간접적으로 UI를 띄우는 점이 특징적이다. 개발자 측은 이 동작이 암호화되지 않은 원본 샘플의 유출을 막기 위한 보호 조치라고 설명했다. 메시지박스에서 사용자가 “아니요”를 선택하면 악성코드는 추가적인 행위를 수행하지 않고 종료된다.
2.3) C2 연결

RtlAllocateHeap()로 힙 영역을 동적으로 할당하고, 그 버퍼에 C2 통신에 사용될 암호화된 버퍼를 기록한다.

실행 중 내부에 저장된 ChaCha20 암호화 데이터를 복호화하여 C2 도메인 주소를 얻는다. 복호화된 도메인 주소는 다음과 같다.


추출한 C2 도메인들을 순회하면서 접속 가능한 서버를 찾고, 접속이 가능한 C2를 발견하면 WinHttpSendRequest()로 HTTP POST 요청을 전송해 C2와 연결을 수립한다. 첫 요청은 act=life로 heartbeat를 알리고, 이후 act=receive_message&ver=4.0&lid=yau6Na–5504031492&j 형태의 요청으로 메시지 수신/명령 페이로드를 요청한다.
| act=receive_message | 서버로부터 명령/메시지를 받아오기 위한 액션 |
| ver=4.0 | Lumma 버전 정보 |
| lid=... | 하드코딩/생성된 ID |
2.3.1) 추가 C2 연결

내부에 등록된 모든 C2에 접속하지 못할 경우 게임 플랫폼인 Steam을 이용해 C2 정보를 조회한다. 이전 버전에는 모든 C2 정보가 바이너리 내부에 고정되어 있었지만, 현재는 정상적인 웹 서비스(Steam)를 악용해 원격에서 동적으로 C2를 제공함으로써 공격자가 원하는 시점에 C2를 교체할 수 있다. 이런 방식은 정적 분석과 서명 기반 탐지를 회피하고, 네트워크 트래픽만으로는 악성 행위를 구분하기 어렵게 만든다.

접속되는 URL은 공격자가 개설한 것으로 추정되는 Steam 계정 프로필 페이지에 접속해 "actual_persona_name" 항목을 파싱 한 뒤, 해당 문자열을 시저 암호로 복호화해 C2 도메인을 얻는다.
2.3.2) c2conf 복호화
C2에 연결한 뒤 서버로부터 암호화된 설정 파일(JSON)을 내려받아 복호화한다.
현재 C2 도메인이 비활성화되어 있기 때문에 알려진 conf 파일을 수집하여 복호화를 진행하였다.
알려진 Lumma Stealer 주요 탈취 데이터
- 암호화폐 지갑 관련 프로그램 정보
- 브라우저에 저장된 로그인 정보(쿠키·세션·자동 완성) 및 브라우저 확장(특히 가상화폐 지갑 확장) 정보
- 패스워드 관리자/저장 프로그램 정보
- 사용자 디렉터리 내의 .txt 등 텍스트 파일
- 메신저(채팅) 프로그램 정보
- FTP 클라이언트 정보
- VPN 클라이언트 정보
- 원격 접속 프로그램 정보(RDP/원격제어 도구 등)
- 메모·노트 프로그램 정보
- 메일 클라이언트 정보

인코딩 된 문자열의 첫 32바이트는 복호화에 사용되는 키이고, 그 이후 바이트들이 암호화된 본문이다. 복호화는 본문과 32바이트 키를 XOR 연산하여 수행된다. 복호화 후 탈취하는 데이터를 정리하면 다음과 같다.
| 1 | File/Dir | %userprofile% | *.txt | Important Files/Profile |
| 2 | File/Dir | %appdata%\Binance | app-store.json | Wallets/Binance |
| 3 | File/Dir | %appdata%\Binance | .finger-print.fp | Wallets/Binance |
| 4 | File/Dir | %appdata%\Binance | simple-storage.json | Wallets/Binance |
| 5 | File/Dir | %appdata%\Electrum\wallets | * | Wallets/Electrum |
| 6 | File/Dir | %appdata%\Ethereum | keystore | Wallets/Ethereum |
| 7 | File/Dir | %appdata%\Exodus\exodus.wallet | * | Wallets/Exodus |
| 8 | File/Dir | %appdata%\Ledger Live | * | Wallets/Ledger Live |
| 9 | File/Dir | %appdata%\atomic\Local Storage\leveldb | * | Wallets/Atomic |
| 10 | File/Dir | %localappdata%\Coinomi\Coinomi\wallets | * | Wallets/Coinomi |
| 11 | File/Dir | %appdata%\Authy Desktop\Local Storage\leveldb | * | Wallets/Authy Desktop |
| 12 | File/Dir | %appdata%\Bitcoin\wallets | * | Wallets/Bitcoin core |
| 13 | File/Dir | %appdata%\com.liberty.jaxx\IndexedDB | *.leveldb | Wallets/JAXX New Version |
| 14 | File/Dir | %appdata%\Electrum\wallets | * | Wallets/Electrum |
| 15 | File/Dir | %appdata%\AnyDesk | *.conf | Applications/AnyDesk |
| 16 | File/Dir | %appdata%\FileZilla | recentservers.xml | Applications/FileZilla |
| 17 | File/Dir | %appdata%\FileZilla | sitemanager.xml | Applications/FileZilla |
| 18 | File/Dir | %userprofile% | *.kbdx | Applications/KeePass |
| 19 | File/Dir | %programfiles%\Steam | ssfn* | Applications/Steam |
| 20 | File/Dir | %programfiles%\Steam\config | * | Applications/Steam/config |
| 21 | File/Dir | %appdata%\Telegram Desktop | *s | Applications/Telegram |
| 22 | Extension | ejbalbakoplchlghecdalmeeeajnimhm | — | MetaMask |
| 23 | Extension | nkbihfbeogaeaoehlefnkodbefgpgknn | — | MetaMask |
| 24 | Extension | egjidjbpglichdcondbcbdnbeeppgdph | — | Trust Wallet |
| 25 | Extension | ibnejdfjmmkpcnlpebklmnkoeoihofec | — | TronLink |
| 26 | Extension | fnjhmkhhmkbjkkabndcnnogagogbneec | — | Ronin Wallet |
| 27 | Extension | fhbohimaelbohpjbbldcngcnapndodjp | — | Binance Chain Wallet |
| 28 | Extension | ffnbelfdoeiohenkjibnmadjiehjhajb | — | Yoroi |
| 29 | Extension | jbdaocneiiinmjbjlgalhcelgbejmnid | — | Nifty |
| 30 | Extension | afbcbjpbpfadlkmhmclhkeeodmamcflc | — | Math |
| 31 | Extension | hnfanknocfeofbddgcijnmhnfnkdnaad | — | Coinbase |
| 32 | Extension | hpglfhgfnhbgpjdenjgmdgoeiappafln | — | Guarda |
| 33 | Extension | blnieiiffboillknjnepogjhkgnoapac | — | EQUA |
| 34 | Extension | cjelfplplebdjjenllpjcblmjkfcffne | — | Jaxx Liberty |
| 35 | Extension | fihkakfobkmkjojpchpfgcmhfjnmnfpi | — | BitApp |
| 36 | Extension | kncchdigobghenbbaddojjnnaogfppfj | — | iWlt |
| 37 | Extension | kkpllkodjeloidieedojogacfhpaihoh | — | EnKrypt |
| 38 | Extension | amkmjjmmflddogmhpjloimipbofnfjih | — | Wombat |
| 39 | Extension | nlbmnnijcnlegkjjpcfjclmcfggfefdm | — | MEW CX |
| 40 | Extension | nanjmdknhkinifnkgdcggcfnhdaammmj | — | Guild |
| 41 | Extension | nkddgncdjgjfcddamfgcmfnlhccnimig | — | Saturn |
| 42 | Extension | cphhlgmgameodnhkjdmkpanlelnlohao | — | NeoLine |
| 43 | Extension | nhnkbkgjikgcigadomkphalanndcapjk | — | Clover |
| 44 | Extension | kpfopkelmapcoipemfendmdcghnegimn | — | Liquality |
| 45 | Extension | aiifbnbfobpmeekipheeijimdpnlpgpp | — | TerraStation |
| 46 | Extension | dmkamcknogkgcdfhhbddcghachkejeap | — | Keplr |
| 47 | Extension | fhmfendgdocmcbmfikdcogofphimnkno | — | Sollet |
| 48 | Extension | cnmamaachppnkjgnildpdmkaakejnhae | — | Auro |
| 49 | Extension | jojhfeoedkpkglbfimdfabpdfjaoolaf | — | Polymesh |
| 50 | Extension | flpiciilemghbmfalicajoolhkkenfe | — | ICONex |
| 51 | Extension | nknhiehlklippafakaeklbeglecifhad | — | Nabox |
| 52 | Extension | hcflpincpppdclinealmandijcmnkbgn | — | KHC |
| 53 | Extension | ookjlbkiijinhpmnjffcofjonbfbgaoc | — | Temple |
| 54 | Extension | mnfifefkajgofkcjkemidiaecocnkjeh | — | TezBox |
| 55 | Extension | lodccjjbdhfakaekdiahmedfbieldgik | — | DAppPlay |
| 56 | Extension | ijmpgkjfkbfhoebgogflfebnmejmfbm | — | BitClip |
| 57 | Extension | lkcjlnjfpbikmcmbachjpdbijejflpcm | — | Steem Keychain |
| 58 | Extension | onofpnbbkehpmmoabgpcpmigafmmnjh | — | Nash Extension |
| 59 | Extension | bcopgchhojmggmffilplmbdicgaihlkp | — | Hycon Lite Client |
| 60 | Extension | klnaejjgbibmhlephnhpmaofohgkpgkd | — | ZilPay |
| 61 | Extension | aeachknmefphepccionboohckonoeemg | — | Coin98 |
| 62 | Extension | bhghoamapcdpbohphigoooaddinpkbai | — | Authenticator |
| 63 | Extension | dkdedlpgdmmkkfjabffeganieamfklkm | — | Cyano |
| 64 | Extension | nlgbhdfgdhgbiamfdfmbikcdghidoadd | — | Byone |
| 65 | Extension | infeboajgfhgbjpjbeppbkgnabfdkdaf | — | OneKey |
| 66 | Extension | cihmoadaighcejopammfbmddcmdekcje | — | Leaf |
| 67 | Extension | gaedmjdfmmahhbjefcbgaolhhanlaolb | — | Authy |
| 68 | Extension | oeljdldpnmdbchonielidgobddfffla | — | EOS Authenticator |
| 69 | Extension | ilgcnhelpchnceeipipijaljkblbcob | — | GAuth Authenticator |
| 70 | Extension | imloifkgjagghnncjkhggdhalmcnfklk | — | Trezor Password Manager |
| 71 | Extension | bfnaelmomeimhlpmgjnjophhpkkoljpa | — | Phantom |
| 72 | Extension | ppbibelpcjmhbdihakflkdcoccbgbkpo | — | UniSat |
| 73 | Browser Data | %localappdata%\Google\Chrome\User Data | — | Chrome |
| 74 | Browser Data | %localappdata%\Chromium\User Data | — | Chromium |
| 75 | Browser Data | %localappdata%\Microsoft\Edge\User Data | — | Edge |
| 76 | Browser Data | %localappdata%\Kometa\User Data | — | Kometa |
| 77 | Browser Data | %appdata%\Opera Software\Opera Stable | — | Opera Stable |
| 78 | Browser Data | %appdata%\Opera Software\Opera GX Stable | — | Opera GX Stable |
| 79 | Browser Data | %appdata%\Opera Software\Opera Neon\User Data | — | Opera Neon |
| 80 | Browser Data | %localappdata%\BraveSoftware\Brave-Browser\User Data | — | Brave Software |
| 81 | Browser Data | %localappdata%\Comodo\Dragon\User Data | — | Comodo |
| 82 | Browser Data | %localappdata%\CocCoc\Browser\User Data | — | CocCoc |
| 83 | Profile | %appdata%\Mozilla\Firefox\Profiles | — | Mozilla Firefox |
표 1) Lumma에서 탈취하는 데이터

해당 샘플에는 지금까지 설명한 것 외에도 Heaven’s Gate 관련 호출이 다수 존재한다. 현재 분석 시점에서는 모든 C2 도메인이 비활성화되어 있어 C2로부터의 실제 응답에 따라 어떤 추가 행위가 발생하는지는 완전히 재현 및 확인되지 않았다. 따라서 분석한 내용보다 더 많은 루틴이 존재할 수도 있다.
3. 결론
분석을 통해 LummaC2.4 샘플은 여러 고급 회피·은폐 기법을 결합해 정교하게 설계된 정보 탈취형 악성코드로 확인된다. Heaven’s Gate를 통해 64비트 시스템콜을 호출하고 필요한 API 주소를 동적으로 가져오거나, 내부 문자열을 런타임에서 복호화하며, 분기 흐름을 jmp 등으로 난독화하는 등, 분석 지연을 유도하고 일반적인 정적·동적 분석 도구를 통한 행위 추적을 어렵게 만든다.
또한 C2 통신 방식 또한 고도화되어, 기존의 하드코딩된 C2 주소 대신 Steam 프로필 페이지를 이용해 동적으로 C2 도메인을 획득하는 방식을 사용하여 C2 인프라 차단을 어렵게 만들며, 공격자가 손쉽게 제어 서버를 교체할 수 있는 유연성을 제공한다.
4. 참고 문헌
(Somansa Lummar Stealer 분석 )
'Reversing > Malware Analysis' 카테고리의 다른 글
| [Agent Tesla] 악성메일로 유포되는 .NET 기반 악성코드 분석 (0) | 2025.11.22 |
|---|---|
| [Kimsuky] 정상 인증서를 악용하는 Go언어 기반 악성코드 분석 (0) | 2025.11.13 |
| [Lumma Stealer] clickfix 기법을 활용한 악성코드 유포(1) (1) | 2025.10.04 |
| [BPFDoor] 악성코드 분석 - 패킷 필터를 악용하는 악성코드 (0) | 2025.09.19 |
| [HANCITOR] 악성코드 분석(3) - C2 통신 페이로드 과정 분석 (0) | 2025.09.10 |