Version: v2.0 (2026-04-21 2차 인프라 발견 추가)
Analyst: [비공개], ArkLink Inc.
Date: 2026-03-25 (v1.0) / 2026-04-21 (v2.0 Section 15 추가)
Classification: CONFIDENTIAL — Security Research (Victim Relief)
Organization: ArkLink Co., Ltd. (378-88-03382)
펭하톡(PenghaTalk)은 카카오톡 펭귄 캐릭터("펭수")를 모방한 메신저 위장 악성앱으로, wavegrid 패밀리에 속한다. 초대코드 기반 접근 통제, RuoYi 3.8.5 C2 백엔드, Cloudflare 프록시를 결합하여 연락처 전체 탈취 및 갤러리 이미지 무단 전송을 수행한다. 현재까지 40개 유효 초대코드가 발견되었으며, 이는 최소 40명의 피해자가 존재함을 의미한다. 피해자 3명(이름이름, 하암하암, 코이루)의 증거 219장이 확보되었다.
Threat Level: CRITICAL
Family: wavegrid
Kill Chain: 배포(CloudFront CDN) → 초대코드 인증 → 권한 획득 → 연락처/이미지 탈취 → C2 전송
항목 · 값
**파일명** · 260324_펭하톡.apk
**파일 크기** · 20,469,851 bytes (19.52 MB)
**패키지명 (Manifest)** · com.uxybcxps.xvsyjkds
**실제 패키지명** · com.peucnfin.ubdgtwzpd
**앱 이름** · 펭하톡
**버전** · 1.22.8 (versionCode: 1228)
**minSdkVersion** · 29 (Android 10)
**targetSdkVersion** · 34 (Android 14)
**언어** · Kotlin + Java (혼합)
**빌드 도구** · apktool 2.9.3
**디버깅** · debuggable: false
권한 · 위험도 · 목적
`READ_CONTACTS` · **CRITICAL** · 연락처 전체 탈취
`READ_PHONE_STATE` · HIGH · 기기/통신사 정보 수집
`READ_PHONE_NUMBERS` · HIGH · [피해자 정보 비공개] 수집
`READ_MEDIA_IMAGES` · **CRITICAL** · 갤러리 이미지 전체 탈취
`READ_MEDIA_VIDEO` · HIGH · 동영상 접근 (미사용 가능)
`READ_EXTERNAL_STORAGE` · HIGH · Android 12 이하 호환
`INTERNET` · MEDIUM · C2 통신
`DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION` · LOW · 커스텀 시그니처 권한
wavegrid 패밀리 특성: 최소 권한 세트(7개)로 최대 탈취 효과 달성. virbox_sens(4~12개), frezrik_jiagu(15개)와 대비됨.
컴포넌트 · 수량 · 설명
**Activities (총)** · 337개 · Manifest 선언 기준
**실제 Activity** · ~5개 · LoginActivity, HomeActivity + 유틸리티
**더미 Activity** · ~332개 · 6개 난독화 패키지에 분산
**smali 디렉토리** · 2개 · smali/ + smali_classes2/
**Native Libraries** · libmmkv.so (4 ABI) · arm64-v8a, armeabi-v7a, x86, x86_64
패키지 · 파일 수 · 용도
`bcjqyniafoqbihe` · 678 · 더미 Activity + 내부 클래스
`cpxjtxqpjjpsrkhehahb` · 633 · 더미 Activity + 내부 클래스
`dbfyurjpogqzsqnspd` · 553 · 더미 Activity + 내부 클래스
`utpibhqqkjrhkcbftodxljcyo` · 0* · smali_classes2에 존재 가능
`uowavatbgxmmlwak` · 0* · smali_classes2에 존재 가능
`zvsrjgzrntrzjkdcnmt` · 0* · smali_classes2에 존재 가능
> *smali_classes2에 추가 더미 패키지 7개 존재: tbqbrkcreminpyeexbjg, yakzfqfctayxlcwxuybltt, zynqezzefnbspewxrmawyzp 등
모든 더미 Activity 클래스명은 20~30자 랜덤 소문자 문자열로 구성되어, 정적 분석 도구의 코드 탐색을 방해한다. 이는 wavegrid 패밀리 전형적 특성으로, LOVENSE/DDU/ML 앱에서 동일 패턴이 확인된다.
항목 · 값
**C2 Domain** · [비공개]
**IP Addresses** · [비공개]
**CDN/Proxy** · Cloudflare (phishing warning 활성)
**Framework** · RuoYi v3.8.5 (若依)
**System Title** · 个人网盘管理系统 (Personal Cloud Storage Management)
**API Prefix** · [비공개]
**Captcha** · 활성 (msg locale: Korean "접속오류!")
**CORS** · Vary 헤더 있으나 명시적 Allow-Origin 없음
[비공개] — wavegrid 패밀리 전형적 도메인 생성 규칙:
· 영숫자 랜덤 문자열 (28자)
· .monster TLD (저가 도메인, 빠른 교체)
· Cloudflare 프록시로 실제 서버 IP 은폐
동일 패턴 확인:
· [비공개] (LOVENSE 패밀리)
· [비공개] (LOVENSE 패밀리)
· [비공개] (LOVENSE 패밀리)
```
GET [비공개] → 인증 없이 접근
GET [비공개] → 인증 없이 접근
```
테스트된 키 17개:
· sys.index.skinName, sys.user.initPassword, sys.account.captchaEnabled
· sys.account.registerUser, sys.upload.path, sys.profile
· sys.oss.bucket/endpoint/accessKey/secretKey
· sys.sms.accessKey/secretKey, sys.wx.appid/secret
· sys.pay.key, sys.jwt.secret
결과: 모든 키 code:200 반환, msg:'' (비어있거나 미설정). 운영자가 기본값을 변경하지 않았거나 해당 설정을 사용하지 않는 것으로 판단.
```
[비공개] → 로그인 페이지 접근 가능
```
Druid 데이터 API는 인증 필요(302 redirect). 하지만 로그인 페이지 자체가 노출되어 브루트포스 공격 벡터 존재.
```
[비공개] → 4419 bytes JSON 문서
[비공개] → [비공개] 리소스 목록
```
노출된 API 엔드포인트:
Method · Endpoint · 목적
GET · /dev-api/test/user/list · 테스트 사용자 목록
POST · /dev-api/test/user/save · 테스트 사용자 생성
PUT · /dev-api/test/user/update · 테스트 사용자 수정
GET · /dev-api/test/user/{userId} · 사용자 상세
DELETE · /dev-api/test/user/{userId} · 사용자 삭제
UserEntity 구조: userId(int), username(string), password(string), mobile(string)
> 모든 test API는 현재 401(인증 필요) 상태이나, 문서 자체가 내부 데이터 모델을 노출함.
· NumberFormatException → Long/Integer 경로 파라미터 타입 노출
· Request method 'GET' not supported → POST-only 엔드포인트 식별 가능
인증 불필요 (GET):
· `[비공개]
· `[비공개]
· `[비공개]
· `[비공개]
· `[비공개]
· `[비공개]
인증 필요 (401):
· [비공개], [비공개]
· `[비공개]
· `[비공개]
· `[비공개]
POST 전용:
· [비공개], [비공개]
```
[1] 피해자가 초대코드 입력
→ LoginActivity.goToNext(uuid, inviteCode)
→ POST [비공개] {name: inviteCode, cId: uuid}
[2] code:200 수신 시 HomeActivity 전환
[3] 권한 요청 → READ_CONTACTS, READ_PHONE_STATE, READ_MEDIA_IMAGES 등
[4] 연락처 수집 (StatusUtils.getContact)
→ CollectBeanDTO {name, number} 리스트 생성
→ Gson.toJson() 직렬화
[5] 연락처 전송
→ POST [비공개]
→ Body: {userName, model:"android", bjPhone, operatorName, phoneContent: JSON}
[6] 갤러리 이미지 수집 (StatusUtils.getAlbum)
→ InfoBeanDTO {displayName, path, content, date, type}
→ Luban 라이브러리로 JPEG 압축
[7] 이미지 업로드
→ multipart POST [비공개]
→ field: "file", other_field: "yuvaluejing"
```
CollectBeanDTO (연락처):
```java
public class CollectBeanDTO {
public String name; // 연락처 이름
public String number; // 전화번호
}
```
InfoBeanDTO (이미지/미디어):
```java
public class InfoBeanDTO {
public String displayName; // 파일명
public String path; // 파일 경로
public String content; // 콘텐츠
public String date; // 날짜
public String type; // MIME 타입
}
```
RpoBean (응답):
```kotlin
data class RpoBean(
val msg: String, // "접속오류!" (한국어 에러)
val code: Int // 200 = 성공
)
```
데이터 유형 · 평균 피해자 1명당 · 40명 추정
연락처 · 500~1000건 · 20,000~40,000건
이미지 · 2000~5000장 · 80,000~200,000장
전화번호 · 1건 (본인) · 40건
통신사 정보 · 1건 · 40건
방어기제 · 상태 · 분석
**에뮬레이터 탐지** · 없음 · wavegrid 패밀리 특성 — virbox_sens와 대비
**루팅 탐지** · 없음 · 별도 체크 로직 미발견
**SSL Pinning** · 없음 · `buildUnsafeOkHttpClient`로 모든 인증서 신뢰
**디버그 탐지** · 없음 · debuggable=false이나 안티디버그 로직 부재
**코드 난독화** · **활성** · 332개 더미 Activity, 랜덤 패키지명
**Cleartext Traffic** · **허용** · `cleartextTrafficPermitted="true"`
**MMKV 저장소** · 활성 · 키: INVITECODE, ISUPLOAD, UUIDVALUE, IFFIRST
Critical Finding: buildUnsafeOkHttpClient — 모든 SSL 인증서를 무조건 신뢰하는 TrustManager 구현.
```
HttpUtil$buildUnsafeOkHttpClient$trustAllManager$1
implements: [비공개].ssl.X509TrustManager
→ checkClientTrusted: NO-OP
→ checkServerTrusted: NO-OP
→ getAcceptedIssuers: empty array
```
이는 MITM(Man-in-the-Middle) 공격에 완전 취약하며, 네트워크 보안 설정(cleartextTrafficPermitted="true")과 결합하여 평문 통신도 허용한다.
· 정적 분석 방해 수준: 중간 (더미 Activity가 코드 검색을 방해하나, 실제 로직은 smali_classes2에 집중)
· 동적 분석 방해 수준: 낮음 (에뮬레이터/루팅 탐지 없음)
· 결론: 분석가가 smali_classes2의 util/, view/ 패키지를 식별하면 전체 로직 파악 가능
항목 · 값
**프로토콜** · HTTPS (SSL 검증 비활성)
**HTTP 클라이언트** · OkHttp3
**데이터 형식** · JSON (Gson), Multipart (이미지)
**비동기 패턴** · `postAsync`, `uploadAsync` (콜백 기반)
**이미지 압축** · Luban 라이브러리 (JPEG, 100KB 이하 목표)
Method · Endpoint · 용도 · 인증
POST · `[비공개] · 초대코드 로그인 · 없음
POST · `[비공개] · 연락처 전송 · 세션 기반
POST · `[비공개] · 이미지 업로드 · 세션 기반
GET · `[비공개] · 캡챠 이미지 · 없음
POST · `[비공개] · 관리자 로그인 · 캡챠
로그인 요청:
```json
POST [비공개]
Content-Type: application/json
{
"name": "<invite_code>",
"cId": "<uuid>"
}
```
연락처 전송 요청:
```json
POST [비공개]
Content-Type: application/json
{
> [비공개]
"model": "android",
"bjPhone": "<victim_phone_number>",
"operatorName": "<carrier_name>",
"phoneContent": "[{\"name\":\"홍길동\",\"number\":\"010-**-**\"}, ...]"
}
```
이미지 업로드 요청:
```
POST [비공개]
Content-Type: multipart/form-data
· file: <compressed_image_file>
· other_field: "yuvaluejing"
```
> [비공개]
```
LoginActivity
└→ init(): MMKV에서 IFFIRST 확인
├→ true: 이미 로그인 → startUp() → HomeActivity
└→ false: 초대코드 입력 대기
└→ 사용자 입력 → goToNext(uuid, mCode)
└→ POST [비공개]
├→ code:200 → MMKV 저장 + HomeActivity
└→ code:!200 → 에러 표시
```
MMKV 저장 키:
· INVITECODE: 사용된 초대코드
· UUIDVALUE: 기기 고유 UUID
· IFFIRST: 최초 로그인 여부 (boolean)
· ISUPLOAD: 업로드 완료 여부
사전 분석에서 40개 유효 초대코드가 확인됨 — 각 코드는 고유 피해자를 대표.
마스터 코드: avau (관리용 추정)
지표 · 값
유효 초대코드 · 40개
확인된 피해자 · 3명 (이름이름, 하암하암, 코이루)
피해 증거 · 219장 (스크린샷/대화록)
추정 피해자 · 최소 40명
항목 · 값
**CDN** · Amazon CloudFront
**배포 URL** · [비공개]
**배포 방식** · 직접 APK 다운로드 (사이드로딩)
**타겟** · Android 10+ (minSdk 29)
Amazon CloudFront를 배포 인프라로 활용하는 것은 wavegrid 패밀리의 진화된 배포 전략:
· 글로벌 엣지 네트워크로 빠른 다운로드
· AWS 인프라 → 도메인 차단이 어려움 (부수적 피해 우려)
· 랜덤 경로(a4hctpz1)로 URL 예측 방지
· HTTPS 기본 제공으로 신뢰감 조성
앱 UI는 한국어가 주요 타겟이나, 배포 인프라는 15개 언어를 지원하여 국제적 운영 가능성을 시사. wavegrid 패밀리의 글로벌 확장 의도로 해석됨.
지표 · 펭하톡 · LOVENSE · ML(YLOVE)
**C2 Framework** · RuoYi 3.8.5 · RuoYi 3.8.5 · RuoYi 3.8.5
**System Title** · 个人网盘管理系统 · 个人网盘管理系统 · 个人网盘管理系统
**API Prefix** · [비공개] · [비공개] · [비공개]
**Login Endpoint** · /webapp/login · /webapp/login · /webapp/login
**Contact Exfil** · /webapp/saveAddressBook · /webapp/saveAddressBook · /webapp/saveAddressBook
**Image Upload** · /webapp/image/{code} · /webapp/image/{code} · /webapp/image/{code}
**Auth Token** · yuvaluejing · yuvaluejing · yuvaluejing
**minSdkVersion** · 29 · 29 · 29
**초대코드** · 있음 · 있음 · 있음
**MMKV** · v1.3.4 · v1.3.x · v1.3.x
**더미 Activity** · 332개 · 340개+ · 300개+
**SSL Bypass** · TrustAll · TrustAll · TrustAll
· Kotlin + Java 혼합 빌드
· OkHttp3 + Gson + Luban 동일 라이브러리 조합
· MMKV 키 이름 동일 (INVITECODE, UUIDVALUE, IFFIRST, ISUPLOAD)
· AppValue.kt에 C2 URL 하드코딩하는 동일 패턴
· HttpUtil.kt의 buildUnsafeOkHttpClient 동일 구현
· StatusUtils.java의 getContact(), getAlbum() 동일 구조
· CollectBeanDTO, InfoBeanDTO, RpoBean 동일 데이터 클래스
항목 · 펭하톡 · LOVENSE
**도메인 TLD** · .monster · .online
**Manifest 패키지** · com.uxybcxps.xvsyjkds · com.astreon.lumisphere
**실제 패키지** · com.peucnfin.ubdgtwzpd · com.astreon.lumisphere
**앱 위장** · 펭귄 메신저 · 성인 메신저
**배포** · CloudFront · 직접 URL
> 핵심 결론: 동일 빌드 시스템에서 패키지명/도메인/UI만 교체한 대량 생산형 악성앱.
[피해자 정보 비공개] · 증거 유형 · 상태
**이름이름** · 스크린샷/대화록 · 증거 확보
**하암하암** · 스크린샷/대화록 · 증거 확보
**코이루** · 스크린샷/대화록 · 증거 확보
총 219장의 피해 증거 확보. 각 증거는 apk/260324_펭하톡/victim_evidence/ 디렉토리에 분류 저장.
펭하톡의 피해 체인:
1. 스미싱/피싱 메시지 → 피해자에게 "펭하톡" 메신저 설치 유도
2. 초대코드 배포 → 각 피해자에게 고유 초대코드 전달
3. 권한 획득 → 연락처, 갤러리, 전화번호 권한 요청
4. 데이터 탈취 → C2 서버로 전체 연락처 + 전체 이미지 전송
5. 협박/사기 → 탈취된 데이터를 이용한 2차 범죄
· APK 디컴파일 (apktool 2.9.3)
· AndroidManifest.xml 분석 — 337개 Activity, 7개 권한
· 패키지명 이중 구조 발견 (Manifest vs 실제)
· 332개 더미 Activity 분류
· 6개 난독화 패키지 매핑
· 실제 로직: smali_classes2/view/ (LoginActivity, HomeActivity)
· AppValue.kt → [비공개]
· wavegrid 패밀리 확인 (yuvaluejing 토큰)
· RuoYi 3.8.5 확인
· .html 인증 우회 취약점 테스트
· [비공개] API 문서 확보
· v2 API docs 4419 bytes 수집
· test-controller 5개 엔드포인트 매핑
· UserEntity 데이터 모델 확인
· /druid/login.html 접근 가능
· JSON API는 인증 필요 (302 redirect)
· 앱 설치 및 실행 (DeepCoding_API35)
· LoginActivity UI 캡처
· logcat 수집 (런타임 동작 확인)
· MMKV 빈 상태 확인 (초대코드 미입력)
· 40개 유효 초대코드 발견
· avau 마스터 코드 식별
· 3명 피해자 219장 증거 분류
· wavegrid 패밀리 상관관계 최종 확인
코드 · 기법 · 결과
T001 · APK 디컴파일 (apktool) · 성공 — 전체 smali 추출
T002 · Manifest 분석 · 성공 — 337 Activity, 7 권한
T003 · smali 코드 분석 · 성공 — C2 URL, API 구조 해독
T004 · 문자열 검색 (hardcoded URL) · 성공 — AppValue.kt에서 C2 도메인
T010 · C2 서버 스캔 · 성공 — RuoYi 3.8.5, 4개 취약점
T011 · [비공개] API 수집 · 성공 — 5개 test 엔드포인트
T012 · .html 접미사 인증 우회 · 성공 — 17개 configKey 테스트
T015 · 에뮬레이터 동적 분석 · 성공 — UI 캡처, logcat
T020 · wavegrid 패밀리 패턴 매칭 · 성공 — 100% 일치
T025 · MMKV 분석 · 성공 — 빈 상태 확인
T030 · SSL/TLS 분석 · 성공 — TrustAll 취약점
T040 · 초대코드 열거 · 성공 — 40개 유효 코드
```
기법 점검:
· 시도한 기법: T001, T002, T003, T004, T010, T011, T012, T015, T020, T025, T030, T040
· 확장된 기법: T012 (.html bypass를 17개 configKey로 확장)
· 신규 기법: 없음 (wavegrid 기존 패턴과 동일)
· 한계 발견: T012 — 모든 configKey가 비어있거나 미설정, 실질적 데이터 유출 없음
```
```
혁신 점검:
· 새 아이디어/시도: .monster TLD의 Cloudflare 피싱 경고 상태에서 C2 스캔
· 결과: 성공 — Cloudflare 피싱 경고에도 불구하고 API 정상 응답
· 기법 카탈로그 반영: 해당 없음 (기존 패턴)
· 다음 앱에서 시도할 아이디어: CloudFront CDN 배포 경로 역추적
```
IOC · 유형 · 설명
`[비공개]` · C2 Domain · 메인 C2 서버
`[비공개]` · Distribution · APK 배포 CDN
`[비공개] · Distribution URL · 직접 다운로드 경로
IP · Provider · 용도
[비공개] · Cloudflare · C2 프록시
[비공개] · Cloudflare · C2 프록시
IOC · 유형
`com.uxybcxps.xvsyjkds` · Manifest Package
`com.peucnfin.ubdgtwzpd` · Real Package
APK SHA-256: (계산 필요) · File Hash
Endpoint · 용도
`[비공개] · 초대코드 인증
`[비공개] · 연락처 탈취
`[비공개] · 이미지 탈취
`[비공개] · 관리자 캡챠
`[비공개] · 관리자 로그인
`[비공개] · [비공개] 문서
`[비공개] · Druid 콘솔
문자열 · 위치 · 용도
`yuvaluejing` · HomeActivity.smali · 이미지 업로드 인증 토큰
`INVITECODE` · AppValue.kt · MMKV 초대코드 키
`UUIDVALUE` · AppValue.kt · MMKV UUID 키
`IFFIRST` · AppValue.kt · 최초 실행 플래그
`ISUPLOAD` · AppValue.kt · 업로드 완료 플래그
`접속오류!` · C2 응답 · 한국어 에러 메시지
라이브러리 · 버전 · 용도
OkHttp3 · - · HTTP 통신
Gson · - · JSON 직렬화
MMKV · v1.3.4 · 키-값 저장소
Luban · - · 이미지 압축
Kotlin Coroutines · - · 비동기 처리
AndroidX · - · UI 프레임워크
전체 위협 등급: CRITICAL
· 연락처 전체 탈취 → 2차 피싱/협박에 악용
· 갤러리 이미지 전체 탈취 → 사생활 침해, 협박 소재
· 40명 이상 [피해자 정보 비공개] → 조직적 범죄
· wavegrid 패밀리 → 대량 생산 체계, 지속적 변종 생성
1. 즉시 권한 회수: 설정 → 앱 → 펭하톡 → 권한 전체 해제
2. 앱 삭제: 즉시 삭제 후 기기 초기화 권장
3. 연락처 변경 통보: 연락처에 등록된 모든 사람에게 피싱 주의 경고
4. 금융 모니터링: 탈취된 정보를 이용한 금융 사기 주의
5. 경찰 신고: 사이버수사대에 증거 제출
1. Cloudflare 피싱 신고 (이미 경고 상태)
2. .monster 도메인 레지스트라 신고
3. AWS CloudFront 배포 경로 차단 요청
4. KISA(한국인터넷진흥원)에 도메인/IP 차단 요청
사용자 제공 URL 리스트 조사 중 [비공개] 항목이 "펭하톡"으로 표기됨. 기존 v1.0 보고서의 C2(.monster Cloudflare) 및 배포([비공개])와 완전히 다른 제3 인프라.
```
[비공개] (CNAME)
→ [비공개] (CNAME)
→ [비공개] (Moren CDN origin, 중국)
```
· SSL 인증서: Let's Encrypt R13, CN=*.[비공개] 와일드카드, 2026-03-28 신규 발급 (23일 전)
· HTTP 응답: HTTP/1.1 200 OK, Server: nginx, Content-Length: 79423, Last-Modified: 2026-04-21 10:21:04 GMT (오늘 갱신 — 살아있는 인프라)
· HSTS + QUIC/h3 활성 (modern nginx 설정)
· Bundle: webpackChunkmy_project (Vue/React 계열 SSR)
· Title: "loading"
· Axios v1.12.2 포함
· window.data_char = 암호화 설정 문자열 257자 (42개 고유 codepoint)
· window.data_ver = '1.0'
구분자 패턴 (codepoint 기반):
· ©§© (A9 A7 A9) = 필드 구분자
· ±Ð© (B1 D0 A9) = 키=값 구분자
· Ö§© (D6 A7 A9) = 레코드 구분자
SUB 0x80 heuristic 부분 복호화 시도:
```
"p)qcdell~d)1P)frjrmmg%he)')qe|x{rc%he)')o:=8xnmc{y:hh8%hgd~omyde\x7f%en\x7f)V'...
```
부분 ASCII 근사 복호화만 얻어짐 — 완전 복호화는 webpack 번들 내 복호화 함수 실행 필요 (Frida WebView hook 또는 Chrome DevTools sourcemap).
동일 a4hctpz1 경로 segment가 두 완전히 다른 인프라에 공유됨:
· `[비공개] (APK 배포 CloudFront — v1.0 Section 8에서 이미 확인)
· `[비공개] (Moren CDN 중국 — v2.0 신규 발견)
이는 yuvaluejing급 교차 앵커. 운영자가 단일 캠페인 ID로 다중 인프라 운영:
· AWS CloudFront: 글로벌 APK 배포 (한국 유입 거부 어려움)
· Moren CDN: 중국/아시아 live SPA 서빙 + WeChat 사용자 라우팅
Webpack-Encrypted C2 Frontend (WeCF):
· APK는 SPA URL만 하드코딩 (정적 분석에 C2 노출 X)
· SPA HTML 내 window.data_char 암호화 설정 런타임 복호화
· 복호화 결과 = 실제 C2 엔드포인트
· AppValue.kt 하드코딩 방식 대비 진화된 은닉
URL 경로 시그니처 = [비공개]]{8}} (sagwp [비공개] + GalleryVault Pro Key [비공개] 교차 확인).
IOC · 유형 · 비고
`[비공개]` · 도메인 · 2차 C2 프론트엔드
`*.[비공개]` · SSL 와일드카드 · 2026-03-28 Let's Encrypt
`[비공개]` · 루트 도메인 · CNAME chain 기원
`[비공개]` · CNAME 중간 · Moren CDN 경유
`[비공개]` · CDN 업체 · Moren CDN (摩仁CDN, 중국)
`[비공개]` · IP · CDN origin
· apps.json pengha_talk.c2Server 필드: Cloudflare(.monster) + 2차 Moren CDN(sagwp) 병기
· apps.json pengha_talk.crossReferences: cloudfront_a4hctpz1_distribution 교차 항목 추가
· apps.json pengha_talk.summary: 2026-04-21 2차 인프라 발견 기록
· technique-master.js NW-031 등재 (249→250 techniques)
· data-embedded.js sync
1. Frida 동적 분석: DeepCoding_API35 에뮬레이터에서 [비공개] URL을 WebView에 로드하는 APK 변종 확인
2. window.data_char 복호화 시점 JavaScript hooking 스크립트 작성
3. Moren CDN([비공개]) 추가 운영자 도메인 스윕 (CT logs)
4. KISA에 [비공개] / [비공개] 차단 요청
· GET 요청 1회 (79KB HTML 취득)
본 보고서는 주식회사 아크링크 Deep-Coding 보안연구소가 피싱·몸캠피싱 피해자 구제를 목적으로 작성했습니다. 전체 열람·피해 상담: arklink.co.kr