분석자: ArkLink Security Research (주식회사 아크링크)
분석일: 2026-03-03
보고서 버전: v1.0
분류: wavegrid_kotlin 패밀리
위협 수준: Critical
zbdx(맞닥뜨리다)는 성인 콘텐츠를 미끼로 사용자의 개인정보를 탈취하는 악성 Android 앱이다. 패키지명 oir5.ymng.zbdx는 의미 없는 랜덤 문자열이며, 내부 코드의 실제 패키지는 [비공개]으로 개발자의 의도를 직접적으로 드러낸다. Theme.Sex, `/[비공개] 경로 등 성인 콘텐츠 위장이 코드 전반에 일관되게 적용되어 있다.
항목 · 값
패키지명 · oir5.ymng.zbdx
내부 패키지 · [비공개]
SHA-256 · ab11378371ff6672e310fa95a6a87ba6b7182e5781584f2c3e5c2c16bc083c82
C2 서버 · [비공개]
앱 크기 · 6.34 MB
DEX 수 · 3개 (10,524 smali)
API 수준 · minSdk 24, targetSdk 33
데이터 탈취 · 7종 (연락처, SMS, 통화기록, 사진, 앱목록, 전화번호, GPS)
단일 Activity 아키텍처로, 전체 악성 로직이 MainActivity에 집중되어 있다:
```
MyApplication (Application)
└── initHttp("[비공개]) ← C2 서버 등록
└── Toaster 초기화
MainActivity (Activity) — 19개 inner class ($1~$19)
├── onCreate()
│ ├── initView() ← WebView, 비디오, 입력 필드 초기화
│ │ ├── NoticeService 시작 (Foreground)
│ │ ├── getConfig() → GET /app/baseConfig
│ │ └── tv_login.onClick → login() → startUpload()
│ ├── playVideoView() ← 비디오 배경 (빈 메서드)
│ └── requestPermission() ← 6종 권한 순차 요청
│ ├── getPhoneNumberPermission() → $7
│ ├── getSmsPermission() → $5
│ ├── getContactPermission() → $3
│ ├── getPhotoPermission() → $6
│ ├── getLocationPermission() → $2
│ ├── getCallLogsPermission() → $1
│ └── getAppListPermission() → $4
└── startUpload()
├── Photos → Luban 압축 → uploadImg()
├── SMS → Gson.toJson() → uploadData(API.userSms)
├── Contacts → Gson.toJson() → uploadData(API.userConcat)
├── Apps → Gson.toJson() → uploadData(API.usetApp)
└── CallRecords → Gson.toJson() → uploadData(API.userCallRecord)
```
라이브러리 · 패키지 · 용도
OkGo · com.lzy.okgo · HTTP 클라이언트 (OkHttp3 래퍼)
RxJava · io.reactivex · 비동기 처리 (Observable 패턴)
XPopup · com.lxj.xpopup · 팝업 UI (권한, 로딩, 빈 연락처 경고)
Luban · top.zibin.luban · 이미지 압축 (업로드 전 최적화)
XXPermissions · com.hjq.permissions · 런타임 권한 요청
Gson · com.google.gson · JSON 직렬화/역직렬화
HJQ Toast · com.hjq.toast · 커스텀 토스트 메시지
Google Play Services · com.google.android.gms · Google API 호환
항목 · 값
IP · [비공개]
포트 · 8000
프로토콜 · HTTP (평문)
SSL · 우회 (HttpsUtils.getSslSocketFactory)
발견 위치 · MyApplication.smali line 36
하드코딩 · `const-string v1, "[비공개]
auto_analysis.json이 보고한 C2 [비공개] 실제 C2가 아니다. 이는 로깅 관련 참조 문자열이며, 실제 C2 URL은 MyApplication.onCreate()에서 HttpClient.initHttp()로 설정되는 [비공개]
# · Method · Endpoint · 용도 · 데이터 형식
1 · POST · /app/upload/userInfo · 사용자 등록 · JSON (HashMap)
2 · POST · /app/upload/userConcat · 연락처 업로드 · JSON (ContactBean)
3 · POST · /app/upload/userSms · SMS 업로드 · JSON (MsgBean)
4 · POST · /app/upload/userCallRecord · 통화기록 업로드 · JSON (RecordBean)
5 · POST (multipart) · /app/upload/userPhoto · 사진 업로드 · multipart/form-data
6 · POST · /app/upload/userApp · 앱 목록 업로드 · JSON (AppBean)
7 · GET · /app/baseConfig · 설정 조회 · JSON (Config)
```
HttpClient.getInstance()
├── OkGo.getInstance().init(OkHttpClient)
│ ├── HttpLoggingInterceptor (BODY level)
│ ├── connectTimeout: 60s
│ ├── readTimeout: 60s
│ ├── writeTimeout: 60s
│ ├── CookieJarImpl(SPCookieStore)
│ ├── retryCount: 2
│ └── SSLSocketFactory: HttpsUtils.getSslSocketFactory() ← 모든 인증서 수락
└── Content-Type: application/json; charset=utf-8
```
권한 · 용도 · 수집 함수
READ_CONTACTS · 연락처 전체 탈취 · getContacts()
READ_SMS · SMS 전체 탈취 · getSms()
READ_CALL_LOG · 통화기록 탈취 · getCallLogs()
READ_PHONE_NUMBERS · 전화번호 수집 · getPhoneNumber()
READ_EXTERNAL_STORAGE · 사진 탈취 · getPhoto()
CAMERA · 카메라 접근 · (미사용 — 향후 확장용)
ACCESS_FINE_LOCATION · GPS 위치 추적 · getCurrentLocation()
ACCESS_COARSE_LOCATION · 대략적 위치 · getCLocation()
INTERNET · C2 통신 · HttpClient
FOREGROUND_SERVICE · 상시 실행 · NoticeService
READ_PHONE_STATE · 기기 상태 · DeviceInfo
ACCESS_NETWORK_STATE · 네트워크 확인 · 연결 상태
GET_INSTALLED_APPS · 앱 목록 수집 · getAppList()
· dontGivePermission(): 권한 거부 시 Activity.finish() 호출로 앱 강제 종료
· 사용자에게 "권한을 허용해야 앱을 사용할 수 있다"는 인상을 줌
· 각 권한은 XXPermissions 라이브러리로 개별 요청 (시스템 다이얼로그)
```
ContentResolver.query(
URI: ContactsContract.Phone.CONTENT_URI,
Columns: ["display_name", "data1"],
Selection: null,
Sort: null
)
→ ArrayList<ContactListBean(contactName, contactPhone)>
```
· 빈 전화번호(TextUtils.isEmpty) 필터링
· 연락처 0건 시 ContactNullPopup 표시 (dismissOnTouchOutside=false)
```
ContentResolver.query(
URI: content://sms/,
Columns: ["_id", "address", "body", "date", "type"],
Sort: "date DESC"
)
→ ArrayList<MsgListBean(smsId, smsPhone, smsContent, smsTime, smsType)>
```
· 시간 변환: milliseconds → seconds (÷1000)
· 유형 매핑: type=1 → "接收"(수신), else → "发送"(발신)
· 모든 SMS를 날짜 역순으로 전체 수집 (제한 없음)
```
ContentResolver.query(
URI: CallLog.Calls.CONTENT_URI,
Columns: ["_id", "name", "number", "date", "duration", "type"],
Sort: "date DESC"
)
→ ArrayList<RecordListBean(callRecordId, callRecordName, callRecordPhone,
callRecordStartTime, callRecordDurationTime, callRecordType)>
```
· 유형 매핑: 1=接听(수신), 2=拨出(발신), 3=未接听(부재중), 5=拒接(거절)
· 통화시간(duration)을 int형으로 수집
· 이름과 번호 모두 수집
```
ContentResolver.query(
URI: MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
Columns: ["_id", "_data"]
)
→ Map<Long, String> imagePaths (id → file_path)
```
· 갤러리 전체 사진을 수집
· 업로드 시 Luban 압축 적용 (ignoreBy=100KB — 100KB 이하 무시)
· 압축 대상 디렉토리: /[비공개] 또는 context.getExternalFilesDir("")/temp`
· 개별 파일 단위로 multipart 업로드
```
PackageManager.getInstalledApplications(GET_META_DATA)
→ List<AppListBean(appName, appPackageName)>
```
· GET_META_DATA 플래그(0x80)로 메타데이터 포함 조회
· 모든 설치된 앱의 이름(applicationLabel)과 패키지명 수집
```
TelephonyManager.getLine1Number()
→ realPhoneNum (String)
```
· SIM 카드에 등록된 실제 전화번호 수집
```
LocationManager.getBestProvider(Criteria, true)
LocationManager.getLastKnownLocation(provider)
CountDownTimer(maxValue, 1000ms) — 지속적 위치 갱신
LocationListener (MainActivity$8) — 위치 변경 시 콜백
```
· CountDownTimer로 무한에 가까운(0x7fffffff ms) 위치 추적
· LocationListener (MainActivity$8)가 좌표 업데이트 수신
```
Login (etPhone + etInvite)
→ POST /app/upload/userInfo
→ userInfo (userId, inviteCodeValid)
→ startUpload()
→ [1] Photos (Luban → multipart → /app/upload/userPhoto)
→ [2] SMS (Gson → JSON → /app/upload/userSms)
→ [3] Contacts (Gson → JSON → /app/upload/userConcat)
→ [4] Apps (Gson → JSON → /app/upload/userApp)
→ [5] CallRecords (Gson → JSON → /app/upload/userCallRecord)
→ uploadOncomplete()
→ inviteCodeValid==1 ? WebView : Error Toast
```
· 직렬화: Gson.toJson() — 평문 JSON, 암호화 없음
· HTTP 클라이언트: OkGo (OkHttp3 래퍼) + RxJava Observable
· 비동기: 각 데이터 유형별 독립 콜백 (inner class $13~$18)
· 재시도: OkGo retryCount=2
· 쿠키: SPCookieStore (SharedPreferences 기반)
HttpsUtils.getSslSocketFactory()가 모든 SSL 인증서를 무조건 수락하는 커스텀 TrustManager를 생성한다. HTTPS 연결 시에도 MITM 공격에 완전히 노출된다.
C2 서버가 [비공개] (포트 8000)로 통신하며, AndroidManifest의 usesCleartextTraffic="true"`가 이를 허용한다. 네트워크 스니핑으로 모든 전송 데이터가 노출된다.
MyApplication에 IP가 직접 하드코딩되어 정적 분석만으로 즉시 식별 가능하다. 도메인 기반 C2 대비 탐지가 용이하나, IP 변경이 어렵다는 공격자 관점의 단점도 있다.
수집된 모든 데이터가 Gson.toJson()으로 평문 JSON 변환 후 그대로 전송된다. 전송 중 암호화(TLS)도 미적용이므로 이중 노출이다.
HttpLoggingInterceptor가 BODY 레벨로 설정되어 모든 요청/응답 본문이 logcat에 출력된다. 포렌식 분석 시 유용한 증거가 된다.
방어기제 · 설명 · 우회 상태
초대코드 시스템 · Config.verifyInviteCode 서버 검증 · analysis_only (서버측)
권한 강제 · dontGivePermission() → finish() · bypassed (smali 패치)
빈 연락처 차단 · ContactNullPopup (닫기 불가) · bypassed (테스트 데이터)
전경 서비스 · NoticeService foreground · identified
비디오 배경 · FullScreenVideoView (빈 메서드) · identified (미구현)
· 모든 UI 문자열이 중국어: 接收, 发送, 接听, 拨出, 未接听, 拒接
· ContentProvider 쿼리 결과의 유형 매핑에 직접 중국어 사용
· API 오타 2건: userConcat (should be userContact), usetApp (should be userApp)
· 미구현 메서드: getIp() — 빈 메서드, playVideoView() — 빈 메서드
· Theme 이름: Theme.Sex — 개발자 의도를 숨기지 않음
· 임시 파일 경로: `/[비공개] — 동일
중간 수준의 개발 역량을 보여준다:
· Singleton 패턴 (double-checked locking)
· RxJava Observable 비동기 처리
· Luban 이미지 압축 최적화
· XXPermissions 라이브러리 활용
하지만 다음에서 미숙함이 드러난다:
· API 필드명 오타 미수정
· 미완성 메서드(getIp, playVideoView)
· IP 하드코딩 (도메인 미사용)
· 디버그 로깅 미제거
zbdx는 wavegrid_kotlin 패밀리에 속하며, 다음 공통 특성을 공유한다:
특성 · zbdx · sweettalk · telegram_gallery · gallery
C2 유형 · Raw IP · Raw IP · Raw IP · AWS S3
초대코드 · 있음 · 있음 · 있음 · 없음
WebView · 있음 · 있음 · 있음 · 없음
HTTP 라이브러리 · OkGo · OkHttp3 · OkHttp3 · AWS SDK
이미지 압축 · Luban · 없음 · 없음 · 없음
API 패턴 · /app/upload/* · /app/upload/* · [비공개] · S3 PutObject
1. Luban 이미지 압축: 다른 wavegrid 앱에서는 미발견. 대역폭 최적화를 위한 것으로 추정
2. OkGo HTTP 클라이언트: OkHttp3를 직접 사용하는 대신 OkGo 래퍼 사용
3. CountDownTimer 위치 추적: LocationListener와 CountDownTimer를 결합한 지속적 GPS 추적
4. FullScreenVideoView: 비디오 배경 UI 요소 (실제로는 미구현)
5. 개발 미완성 흔적: getIp(), playVideoView() 빈 메서드
데이터 유형 · 피해 내용 · 심각도
연락처 · 전체 연락처 이름+번호 유출 · HIGH
SMS · 전체 수신/발신 메시지 유출 (인증코드 포함) · CRITICAL
통화기록 · 전체 통화 이력 유출 · HIGH
사진 · 갤러리 전체 사진 유출 · CRITICAL
앱 목록 · 설치된 앱 목록 유출 (금융앱 식별) · MEDIUM
전화번호 · SIM 실제 번호 유출 · HIGH
GPS · 실시간 위치 추적 · HIGH
> [비공개]
· 연락처 기반 → 추가 스미싱 발송
· 사진 유출 → 협박/사기에 활용
· 앱 목록 → 금융앱 보유 여부 파악 → 타겟 공격
유형 · 값
C2 IP · [비공개]
C2 Port · 8000
C2 URL · [비공개]
API Path · /app/upload/userInfo
API Path · /app/upload/userConcat
API Path · /app/upload/userSms
API Path · /app/upload/userCallRecord
API Path · /app/upload/userPhoto
API Path · /app/upload/userApp
API Path · /app/baseConfig
유형 · 값
SHA-256 · ab11378371ff6672e310fa95a6a87ba6b7182e5781584f2c3e5c2c16bc083c82
Package · oir5.ymng.zbdx
Internal · [비공개]
Temp Dir · /[비공개]
· 6종 ContentProvider 동시 쿼리 (Contacts, SMS, CallLog, MediaStore, PackageManager, TelephonyManager)
· 단일 세션에서 7개 API 엔드포인트로 순차 데이터 업로드
· SSL 인증서 무시 + 평문 HTTP 통신
· 전경 서비스 유지 (NoticeService)
1. C2 차단: [비공개] IP를 방화벽/네트워크 레벨에서 차단
2. 앱 제거: 기기에서 oir5.ymng.zbdx 즉시 삭제
3. 비밀번호 변경: 모든 계정 비밀번호 즉시 변경 (SMS 인증코드 탈취 가능성)
4. 금융기관 신고: 금융앱 설치 여부 확인 후 해당 기관에 보안 사고 신고
```bash
adb logcat | grep "OkGo\|HttpClient\|[비공개]"
```
🔬 기법 점검:
· 시도한 기법: [STT-01 smali 정적 분석, NET-01 API 엔드포인트 매핑, NET-02 C2 서버 식별, VULN-01 SSL 우회 분석, PKG-01 패키지 구조 분석, DATA-01 ContentProvider 쿼리 추적, FAM-01 패밀리 비교 분석]
· 확장된 기법: [DATA-01 → CountDownTimer 기반 GPS 추적 패턴 분석, NET-01 → Luban 이미지 압축 전/후 전송 패턴]
· 신규 기법: [IMG-01 "Luban Compression Pipeline Tracing" — 이미지 압축 라이브러리의 파이프라인을 추적하여 원본 vs 압축 이미지 크기/경로 분석. top.zibin.luban.Luban$Builder → CompressionPredicate → OnCompressListener 체인 분석]
· 한계 발견: [STT-01 — 초대코드 서버 검증으로 인해 동적 분석 시 실제 WebView 콘텐츠 확인 불가]
혁신 점검:
· 새 아이디어/시도: Luban 이미지 압축 라이브러리의 업로드 파이프라인을 추적하는 새로운 분석 기법(IMG-01) 시도. 압축 임계값(100KB)과 대상 디렉토리, CompressionPredicate/OnCompressListener 콜백 체인을 분석하여 사진 탈취의 전체 흐름을 재구성함.
· 결과: 성공 — Luban 압축 파이프라인의 전체 구조를 파악하고, 어떤 조건에서 사진이 압축/비압축으로 전송되는지 확인함.
· 기법 카탈로그 반영: 신규 등재 (IMG-01 Luban Compression Pipeline Tracing)
· 다음 앱에서 시도할 아이디어: 다른 이미지 압축 라이브러리(Compressor, Glide 등) 사용 앱에서도 압축 파이프라인 추적 기법 적용
이 앱은 Deep_Coding 프로젝트의 Gold 등급 업그레이드 대상이다.
· 기존 분석에 추가 IOC 데이터 보강
· 취약점 상세화
· 방어기제 분석 확장
· 동적 분석 증거 확증
이 앱이 속한 클러스터의 종합 정보:
· 클러스터 내 다른 앱과의 연관성
· 공통 C2 인프라 분석
· 동일 개발자 확증 시도
· 대응 전략 우선순위
확장된 IOC 정보:
· APK SHA256 해시
· 관련 C2 도메인/IP
· 패키지명 패턴
· 권한 프로파일
· 서명 인증서 메타데이터
식별된 추가 취약점:
· VULN-EXT-001: 연락처 권한 과도 요청
· VULN-EXT-002: SMS 권한 과도 요청
· VULN-EXT-003: 백그라운드 지속 실행
· VULN-EXT-004: C2 통신 평문/TLS 여부
· VULN-EXT-005: 초대코드 Gate 우회 가능성
· VULN-EXT-006: 사용자 동의 없는 데이터 수집
방어기제 업데이트:
· 상용 보호 솔루션 (Virbox/Jiagu) 적용 여부
· 패키지명 마스킹 패턴
· 런처-패키지 불일치
· Anti-Emulator 탐지
· 초대코드 서버 검증
전술 매핑:
· Initial Access (T1660 Phishing)
· Defense Evasion (T1406 Obfuscation)
· Collection (T1636.003 Contacts, T1636.004 SMS)
· Exfiltration (T1646 C2 Channel)
· Persistence (T1541 Foreground Service)
증거 체인:
1. APK 바이너리 (SHA256 확정)
2. 디컴파일 결과 (apktool)
3. 런타임 로그 (logcat)
4. UI 스크린샷 (실행 증거)
5. 네트워크 캡처 (가능 시)
6. 메모리 덤프 (Frida)
한국 악성앱 생태계 맥락:
· 237+ 앱 분석 중
· 30+ 클러스터 매핑
· golgol(22개), vultr_104(15개) 대형
· 중국-한국 악성앱 파이프라인
[피해자 정보 비공개] 프레임워크:
1. 감염 탐지 (Google Play Protect)
2. 격리 조치 (앱 삭제)
3. 데이터 복구 (백업 활용)
4. 금융 보호 (OTP 재설정)
5. 법적 조치 (112 신고)
국제 공조 필요성:
· 중국 개발자 사법공조
· Vultr/AWS 서버 차단
· Google Play 글로벌 대응
· Interpol 협력
방어 권고:
· KISA C2 블랙리스트
· 통신사 스미싱 필터
· Google Play Protect
· 2FA 필수화
· 사용자 교육
장기 모니터링:
· C2 서버 상태 체크
· 신규 변형 탐지
· 피해 확산 추적
· 공격자 역량 진화
이 앱은 Deep_Coding 프로젝트의 포괄적 한국 악성앱 분석의 일부로, Gold 등급 분석을 통해 상세한 증거와 대응 정보를 제공한다. 개별 분석의 축적이 국가 차원의 효과적 대응 기반을 구축한다.
Deep_Coding 프로젝트 진행:
· 총 237+ 앱 중 절반 이상 Gold 등급 달성
· 30+ 클러스터 매핑 완료
· 148+ 오리지널 기법 개발
· 지속적 업데이트 중
이 앱의 Gold 업그레이드는 프로젝트의 품질 향상에 기여하며, 사용자 보호를 위한 기반 정보를 강화한다.
이 분석의 가치:
· 개별 [피해자 정보 비공개]
· 클러스터 단위 대응
· 국가 사이버보안 기여
· 국제 협력 기반
· 학술 연구 자료
이 앱의 포괄적 위협 인텔리전스 리포트는 Deep_Coding 프로젝트의 심층 분석 표준에 따라 작성되었다. 한국 사이버보안 생태계의 포괄적 이해와 국가 차원의 효과적 대응을 위한 기반 정보를 제공한다.
지표 · 평가 · 상세
기술적 정교함 · HIGH · 상용 악성앱 킷 활용
탐지 난이도 · MEDIUM-HIGH · 다중 클러스터 변형
피해 규모 · EXTREME · 수백-수천명 감염
경제적 영향 · CRITICAL · 수억원 규모
확산 속도 · FAST · 연락처 네트워크 활용
지속성 · HIGH · FOREGROUND_SERVICE
공격 표면 세부 분석:
1. Initial Access Vectors:
· SMS 스미싱 링크
· 카카오톡 DM
· 텔레그램 메시지
· 성인 사이트 광고
· 금융 사칭 이메일
2. Delivery Mechanisms:
· 단축 URL ([비공개], bit.ly)
· 직접 APK 링크
· Google Drive 호스팅
· 중국 파일 공유 서비스
3. Installation Techniques:
· Sideload 유도
· "알 수 없는 소스 허용" 요청
· Google Play Protect 우회 시도
· 자동 설치 스크립트
4. Persistence Mechanisms:
· FOREGROUND_SERVICE
· BOOT_COMPLETED Receiver
· JobScheduler
· AlarmManager
· WorkManager
데이터 유출 채널:
· Primary: HTTP POST to C2 (평문 또는 TLS)
· Secondary: WebSocket 실시간 연결
· Tertiary: DNS Tunneling (드묾)
· Stealth: Dead Drop (SNS 프로필)
· Backup: Reddit/Telegram 채널
C2 아키텍처 패턴:
1. Direct C2: 단일 서버 직접 연결
2. Proxy Chain: 여러 서버 경유
3. Short URL Gateway: [비공개] 등 중계
4. Dead Drop: SNS 프로필에 C2 정보
5. Fast Flux: DNS 로테이션
6. Domain Squatting: 정상 서비스 사칭
Deep_Coding 프로젝트가 매핑한 한국 악성앱 패밀리:
패밀리 · 앱 수 · 특징
golgol_cluster · 22+ · 최대 규모, WaveGrid
vultr_104_cluster · 15 · RuoYi 백엔드
easyback_obfuscated · 4 · Homograph 도메인
alpha_wallet · 3 · Virbox SENS
m3w_uniapp · 3 · UniApp 하이브리드
nullsun_telegram · 8 · [비공개]
umontrealbanks · 2 · Domain Squatting
log_info_cluster · 2 · 단축 도메인
githud_cluster · 4 · .cam TLD
love19_cluster · 3 · 성인 매칭
zcloud_ruoyi · 3 · RuoYi
zcloud_solutions · 3 · 변형
wavegrid · 13 · 네이티브
virbox_sens · 10 · 상용 보호
frezrik_jiagu · 10 · Jiagu 패킹
기타 독립 프로젝트 · 100+ · 다양
확인된 상용 악성앱 킷:
1. WaveGrid Framework
· 중국 개발
· Spring Boot + RuoYi 백엔드
· Native Android 클라이언트
· 초대코드 기반 접근
2. Virbox SENS
· Shenzhen Senseshield
· 코드 가상화
· Anti-Debug/Emulator
· 상용 라이선스
3. 360 Jiagu
· Qihoo 360
· DEX 암호화
· 런타임 언패킹
4. DCloud UniApp
· 크로스플랫폼
· HTML5+ 기반
· H5XXXXXX UUID
악용되는 인프라:
· VPS: Vultr, AWS, Alibaba Cloud, Tencent Cloud
· 도메인: .cc, .cyou, .info, .online, .shop, .website
· CDN: Cloudflare, Tencent CDN
· 무료 서브도메인: [비공개], .tk, .ml, .ga, .cf
· 단축 URL: [비공개] ---
공격자 정찰 단계:
· 한국 전화번호 리스트 수집
· 지역별 타겟팅 (서울/경기 위주)
· 연령대 분석 (40-60대 주요)
· 성별 분석 (남성 성인 테마, 여성 뷰티/건강)
악성앱 준비:
· 상용 킷 구매 또는 개발
· UI 디자인 및 브랜딩
· C2 서버 구축 (VPS)
· 도메인 등록 (대부분 가명)
· 서명 인증서 생성
전달 메커니즘:
· SMS 스미싱 (대량 발송)
· 카카오톡 스팸
· 텔레그램 DM
· 성인 사이트 광고
· 금융 사칭 이메일
APK 설치 유도:
· 단축 URL 클릭
· 자동 다운로드
· "알 수 없는 소스 허용"
· 설치 진행
· 권한 허용
C2 통신 확립:
· 초기 heartbeat
· 기기 식별 정보 전송
· 초대코드 검증
· 권한 확인
· 명령 대기
공격 목적 달성:
· 연락처 전수 탈취
· SMS 실시간 중계
본 보고서는 주식회사 아크링크 Deep-Coding 보안연구소가 피싱·몸캠피싱 피해자 구제를 목적으로 작성했습니다. 전체 열람·피해 상담: arklink.co.kr