오늘은 북한 해킹 단체인 김수키(Kimsuky) 에서 만든 악성코드인 코인 실전 트레이딩 핵심 비법서로 위장한 악성코드인 moonpeak에 대해 알아보겠습니다. 해당 악성코드는 경찰 공무원 때려치우고 억대 수익 트레이더가 된 비결 총집합이라는 내용으로 된 PDF로 돼 있습니다. MoonPeak 에 가까운 악성코드입니다.
파일명:실전 트레이딩 핵심 비법서.pdf.lnk
사이즈:9 MB
MD5:640f54bb6d29d98d92344136fee49d07
SHA-1:ebec41675fff24858ad558429ce4e4e32c30da55
SHA-256:1553bfac012b20a39822c5f2ef3a7bd97f52bb94ae631ac1178003b7d42e7b7f
입니다.파일 크기로 보면 어느 정도 규모가 있는 파일인 것을 확인할 수가 있으며 추측을 해보면 해당 파일 안에 PDF 파일 등이 있으니 이것은 파이썬 매직을 써주면 따로 뽑아주면 됩니다.

악성코드 분석
파일 이름
실전 트레이딩 핵심 비법서.pdf.lnk
겉보기에는 PDF 파일처럼 보이지만 실제로는 .lnk 바로 가기 파일을 악용한 악성코드입니다.
LNK 내부
XOR로 암호화된 PDF(미끼 파일)
XOR로 암호화된 PowerShell 2차 페이로드
특정 오프셋(offset)에 숨겨져 있음
1.LNK 파일 위치 탐색
현재 디렉토리 에서 LNK 파일을 찾기
파일이 존재하지 않을 때에는
TEMP 폴더에서 같은 이름의 최신 LNK를 찾음
파일은 실행 위치가 달라도 동작하도록 설계 되어져 있음
2.핵심 함수:– pl()
해당 함수
$LC=시작 오프셋
$G8=읽을 바이트 수
$Lpi=XOR 키
$nhT=출력 파일 경로
LNK 파일을 열고 특정 오프셋부터 지정 크기만큼 읽고 모든 바이트를 XOR 연산을 하고 복호화된 결과를 파일로 저장 을 하는것 XOR 에서 꺼내는 역할을 하고 있음


미끼 PDF
시작 오프셋:4096 (0x1000)
크기:9,404,844 bytes (~9MB)
XOR 키:155 (0x9B)
저장 위치:%TEMP%\실전 트레이딩 핵심 비법서.pdf
PDF를 실행
목적:
사용자가 정상 PDF를 본다고 생각하게 만드는 사회공학적 공격
복호화 후 파일 헤더
25 50 44 46
정상
페이로드 2:실제 악성 코드
시작 오프셋:9,408,940
크기:19,857 bytes (~19KB)
XOR 키:14 (0x0E)
저장 위치:%TEMP%\랜덤이름.ps1
숨김 창으로 실행
실행 정책 우회
실행 후 흔적 삭제
4096 + 9,404,844 = 9,408,940
OK
stage2.ps1 내용 분석

vd() :안티분석,가상화(디버거/툴 탐지) 탐지되면 즉시 실행 종료
$yiMcdvGwvUTgK 배열에 프로세스 이름들을 모아두고
샌드박스, 가상환경에서 흔히 실행되는 도구가 하나라도 있으면 바로 종료
실제 포함된 도구
코드 안에서 ROT(카이사르)로 풀리는 것까지 포함 하면 목록에 포함된 내용
가상환경/VM:vmxnet,vmusrvc,vmtoolsd,vboxservice...
디버깅,리버싱:ida,ida64,x64dbg,x32dbg,ImmunityDebugger,ProcessHacker,processlasso...
Sysinternals,모니터링:procmon,procmon64,procexp,procexp64,tcpview64,regmon,filemon
네트워크,캡처:wireshark,dumpcap,windump,fiddler
.NET 리버싱:dnspy,ilspy
기타:autorunsc,resourcehacker,hookexplorer 등
분석 환경 차단 이 1차 목표
2.g-r():랜덤 문자열 생성기 (폴더/파일명 랜덤화)
문자셋:a-zA-Z0-9 총 62자
주의: 루프가 1부터 $fEP 라서 생성 길이가 (입력값-1)
g-r 기본 8->실제 길이 7
g-r 4->실제 길이 3
이걸로 %TEMP% 아래 랜덤 디렉터리, 파일명을 만듦
3. TEMP에 랜덤 폴더 생성

4.지속성(Persistence):숨김 스케줄 작업 등록
스케줄러 존재 여부 확인
Get-ScheduledTask | Where-Object { $_.TaskName -eq <난독화된 이름> }
이미 있으면 재등록을 피하고 없으면 생성
실제 등록되는 작업 이름
코드 후반에 평문으로 한 번 더 나옴
Selling CoinBoruhde Whistling NOprobnl{BD234234324-1243324ADVE}
(앞에서 ROT14로 한 번 감춰놓고 나중에 평문도 섞여 있음)
트리거/반복
감염 5분 뒤 최초 실행
이후 30분 간격 반복
숨김 작업
결론:사용자 재부팅,로그온에 의존하면서 주기적 재시도가 가능한 전형적인 지속성 확보
5.jpg로 위장한 스크립트를 만들고 wscript.exe 로 실행
스케줄러 Action에서 실행되는 EXE
해당 문자열은 ROT 12로 감춰져 있는데 실제로는
kgqfwdh.sls (ROT 12)->wscript.exe
즉 스케줄러가 wscript.exe 를 실행
wscript.exe 가 실행하는 파일
랜덤이름에 .jpg 확장자를 붙임
6.Base64 덩어리: PS1 내려받아 실행하는 다운로더 생성
코드 중간에 큰 Base64 문자열을 UTF-8로 디코드해 $hDrN9dWkM0haf 에 넣고 치환 사용
그 결과를 랜덤 ps1 파일로 저장
PS1의 내부 동작
임시 파일명 생성
Invoke-WebRequest -Uri <URL> -OutFile (temp.ps1)
파일 내용 읽기
특정 토큰,플레이스홀더 치환
실행 후 삭제
7.g-in():시스템 정보+프로세스 목록 수집
해당 함수는 WMI를 이용해 정보를 수집
수집 항목(대표)
Win32_ComputerSystem:
Name, Domain, Manufacturer/Model 계열,TotalPhysicalMemory 등
Win32_OperatingSystem:
Caption, Version, BuildNumber, OSArchitecture, LastBootUpTime 등
Win32_Process:
ProcessName, ParentProcessId, (추가 속성 일부 ROT) 등
프로세스 총 개수도 포함
결과는 Format-Table,Out-String으로 표 형태 문자열로 만들고서 줄 바꿈을 정리해서 하나의 텍스트로 반환
C2에 보내기 위한 정찰용
8.g-c():JS를 내려받아 cscript로 실행 그리고 쿠키/토큰 생성용
hxxp://mid(.)great-site(.)net/aes(.)js 를 다운로드해서 임시 js 파일에 저장
또 다른 페이지(ROT로 감춘 URL)에서 스크립트 조각을 추출 및 치환해서 js에 덧붙임
cscript /nologo temp(.)js 실행
js 파일 삭제
cscript 실행 결과를 반환
9.p-s():C2로 POST 전송 (쿠키 포함)
URL이 ROT6로 감춰져 있는데 실제로는:
b??nj://gcx(.)alyun-mcny(.)h?n/gucnb(.)jbj (ROT6)
->hxxp://mid(.)great-site(.)net/maith(.)php
쿠키
쿠키 이름은 ROT25로 숨김 처리 돼 있음
__uftu (ROT25)->__test
쿠키 값은 g-c() 결과(JS 실행 결과)
서버가 봇 차단 같은 걸 해두고 토큰을 맞게 계산해야 통신이 되는 구조 가능성???
요약
1.분석 도구 있으면 종료
2.TEMP에 랜덤 폴더 생성
3.스케줄러(숨김) 등록:5분 후 시작, 30분 반복
4.jpg 로 위장한 스크립트와 .ps1 생성
5.wscript.exe로 위장 스크립트를 실행해 추가 단계 실행
6.호스트 정보/프로세스 수집
7.JS(aes(.)js 등)로 토큰 생성
8.hxxp://mid(.)great-site(.)net/maith(.)php 로 쿠키 __test=<token 포함 POST 전송 (exfil/등록)
침해지표
네트워크
hxxp://mid(.)great-site(.)net/aes(.)js
hxxp://mid(.)great-site(.)net/maith(.)php
Host:mid(.)great-site(.)net
Cookie name:__test
작업 스케줄러 등록
Scheduled Task (Hidden)
Selling CoinBoruhde Whistling NOprobnl{BD234234324-1243324ADVE}
Trigger:+5 min,repeat 30 min
파일/경로
%TEMP%\랜덤폴더\랜덤.ps1
%TEMP%\랜덤폴더\랜덤.jpg
%TEMP%\aes(.)js
'소프트웨어 팁 > 보안 및 분석' 카테고리의 다른 글
| 김수키(Kimsuky) 에서 만든 악성코드-암호.txt.lnk (0) | 2026.02.19 |
|---|---|
| Kimsuky(김수키)과태료 부과 사전 통지서 로 위장한 악성코드-IPSInvoice.chm (0) | 2026.02.16 |
| 김수키(Kimsuky) 통일 연구원 사칭 악성코드 분석-2026_0212_1281232903482939_참고자료.lnk (0) | 2026.02.14 |
| 마이크로소프트 윈도우 11 메모장 취약점 수정 (0) | 2026.02.14 |
| 윈도우 10 KB5075912,윈도우 11 KB5077181,KB5075941 보안 업데이트 (0) | 2026.02.12 |
| 독일 고위 인사 표적 시그널 계정 탈취 경고 (0) | 2026.02.07 |
| 코니(Konni) 에서 만든 네이버 로그인 사칭 악성코드-210930-001.png.lnk (0) | 2026.02.06 |
| 프랑스 검찰, X사 사무실 압수수색 및 그록 딥페이크 관련 머스크 소환 (0) | 2026.02.05 |





