홈요가 (HomeYoga) 상세 분석 보고서

HomeYoga.apk (홈요가) 악성앱 심층 분석 보고서

분석일: 2025-08-05 (초기) / 2026-02-14 (Gold Standard 확장)

분석자: 주식회사 아크링크

분석 목적: 피싱/스미싱 [피해자 정보 비공개] 위한 악성앱 분석

보고서 버전: v4.0 (Gold Standard - Manifest Duplication Forensics + MALBIO Genome + 정량적 위협 평가)

분석 Phase: 22

⚠️ 중요: 기존 보고서 v2.0 전면 정정

> 기존 보고서(v2.0)는 디컴파일 데이터 부재로 인해 "Wavegrid Gen2 네이티브 앱"으로 잘못 분류했습니다.

> v3.0에서 AndroidManifest.xml 전수 분석 결과, 이 앱은 DCloud UniApp 하이브리드 프레임워크 기반임이 확인되었습니다.

주요 정정 사항

항목 · v2.0 (잘못됨) · v3.0 (정정)

**프레임워크** · Native Android (Wavegrid Gen2) · **DCloud UniApp (H5+ Hybrid) + Apache Weex**

**패키지명** · com.cryonix.wavegrid.homeyoga · **a25Five.tooolTransaction.k25** (난독화됨)

**내부 패키지** · com.tushiweih.wavegrid (추정) · **com.umeprobamate.vtwinflower** (난독화됨)

**위험 권한** · 2개 (READ_CONTACTS, READ_PHONE_STATE) · **10개** (연락처+저장소+미디어+전화+계정+설치)

**이미지 탈취** · 없음 (추정) · **있음** (mediapicker 라이브러리 + 미디어 권한)

**LAUNCHER** · LoginActivity · **io.dcloud.PandoraEntry**

**패밀리 분류** · Wavegrid 패밀리 · **UniApp 독립 패밀리** (kdreamapp/jiagu_1757 계열)

**난독화 수준** · 미확인 · **극도** (영어 단어 무작위 조합 패턴)

**C2 서버** · Unknown · **Unknown** (smali 없어 추출 불가, 동일)

1. 앱 기본 정보

항목 · 내용

**파일명** · homeyoga.apk

**앱 이름** · 홈요가 (HomeYoga)

**패키지명** · `a25Five.tooolTransaction.k25`

**내부 패키지** · `com.umeprobamate.vtwinflower` (Application 클래스 소속)

**Application 클래스** · `com.umeprobamate.vtwinflower.WgporkerSscalefactorApplication`

**versionCode** · 83

**versionName** · 0.8.3

**compileSdkVersion** · 23 (Android 6.0)

**platformBuildVersionCode** · 35 (Android 15)

**UniApp ID** · `__UNI__77338A0`

**프레임워크** · DCloud UniApp (H5+ Hybrid) + Apache Weex

**패밀리** · UniApp 독립 패밀리

**위협 수준** · **HIGH**

**우회 상태** · 성공 (초대코드 우회)

1.1 패키지 구조

구분 · 패키지명 · 용도

**Manifest 패키지** · `a25Five.tooolTransaction.k25` · 앱 식별자 (난독화됨)

**Application 패키지** · `com.umeprobamate.vtwinflower` · 앱 코어 로직 (난독화됨)

**DCloud 패키지** · `io.dcloud.*` · UniApp 프레임워크

**Taobao 패키지** · `com.taobao.weex` · Weex 하이브리드 엔진

**MediaPicker 패키지** · `com.dmcbig.mediapicker` · 이미지/비디오 선택

1.2 기존 "Wavegrid" 분류 오류의 원인

기존 v2.0 보고서에서 이 앱을 "Wavegrid Gen2"로 분류한 이유는:

1. 디컴파일 데이터 부재: smali 코드 없이 메타데이터만으로 분석

2. 앱 이름 기반 추정: "홈요가" → 가정용 앱 위장 → Wavegrid 패턴과 유사하다고 판단

3. 우회 결과 혼동: L() → l0() 패치 결과와 registerActivityLifecycleCallbacks 수정 기록이 있어 Wavegrid 패턴으로 판단

그러나 AndroidManifest.xml 정밀 분석 결과:

· DCloud PandoraEntry: UniApp 프레임워크의 표준 진입점

· Weex 리시버: com.taobao.weex.WXGlobalEventReceiver

· DCLOUD_STREAMAPP_CHANNEL: UniApp 스트리밍 채널 메타데이터

· 극도 난독화: Wavegrid 앱에서는 볼 수 없는 영어 단어 무작위 조합 패턴

1.3 DCloud UniApp 프레임워크란

DCloud UniApp은 중국의 DCloud에서 개발한 크로스 플랫폼 프레임워크입니다:

· HBuilderX IDE에서 Vue.js 기반으로 개발

· H5+ 런타임으로 네이티브 기능 접근

· Apache Weex 기반 렌더링 엔진

· PandoraEntry: 앱 실행 시 진입점으로, JavaScript 번들을 로드

· 악성앱에서 선호하는 이유: 빠른 개발, 웹 기술 기반, 네이티브 권한 접근 가능

2. 권한 분석

2.1 전체 권한 목록 (17개, 위험 권한 10개)

# · 권한 · 위험도 · 용도 (분석) · 피해 시나리오

1 · `READ_CONTACTS` · **위험** · 연락처 전체 탈취 · 주변인 전원에게 협박 메시지 발송. 몸캠피싱 핵심

2 · `WRITE_CONTACTS` · **위험** · 연락처 변조 · [피해자 정보 비공개] 가짜 정보 삽입, 증거 은닉

3 · `READ_PHONE_STATE` · **위험** · IMEI, 전화번호 수집 · 기기 추적, [피해자 정보 비공개], 전화번호 직접 확보

4 · `READ_EXTERNAL_STORAGE` · **위험** · 사진/파일 탈취 · 사적 사진 탈취 → 유포 협박의 직접적 수단

5 · `WRITE_EXTERNAL_STORAGE` · **위험** · 파일 저장/변조 · 악성 파일 저장, 탈취 임시 파일 관리

6 · `READ_MEDIA_IMAGES` · **위험** · 사진 접근 (API 33+) · Android 13+ 대응 사진 탈취

7 · `READ_MEDIA_VIDEO` · **위험** · 동영상 접근 (API 33+) · Android 13+ 대응 동영상 탈취

8 · `READ_MEDIA_VISUAL_USER_SELECTED` · **위험** · 선택적 미디어 접근 (API 34+) · Android 14+ 대응 미디어 접근

9 · `GET_ACCOUNTS` · **위험** · 계정 정보 수집 · Google 계정 등 로그인 정보 확보

10 · `INSTALL_PACKAGES` · **위험** · 앱 설치 · 추가 악성앱 무단 설치 가능

11 · `REQUEST_INSTALL_PACKAGES` · 보통 · 앱 설치 요청 · 설치 프롬프트 유도

12 · `INTERNET` · 보통 · 네트워크 통신 · C2 서버와 데이터 송수신

13 · `ACCESS_NETWORK_STATE` · 보통 · 네트워크 상태 확인 · 연결 여부 판단

14 · `ACCESS_WIFI_STATE` · 보통 · WiFi 상태 확인 · WiFi SSID 등 네트워크 식별

15 · `CHANGE_BADGE` (Huawei) · 보통 · 배지 변경 · 알림 배지 조작

16 · `SupplementaryDID` (ASUS) · 보통 · 기기 ID 접근 · ASUS 기기 추가 식별자

17 · `BADGE_ICON` (Vivo) · 보통 · 배지 아이콘 · Vivo 기기 배지 조작

2.2 권한 진화 대응 (T035: Multi-API-Level Media Access)

이 앱은 Android 버전별 미디어 접근 권한 변경에 3단계 대응을 구현했습니다:

```

Android 12 이하: READ_EXTERNAL_STORAGE + WRITE_EXTERNAL_STORAGE

Android 13 (API 33): READ_MEDIA_IMAGES + READ_MEDIA_VIDEO

Android 14 (API 34+): READ_MEDIA_VISUAL_USER_SELECTED

```

이는 모든 Android 버전에서 미디어 접근을 보장하는 고급 기법으로, 단순한 권한 요청이 아닌 체계적인 호환성 전략입니다. Wavegrid 패밀리에서는 READ_EXTERNAL_STORAGE만 사용하는 것과 대조적입니다.

2.3 기존 보고서와의 차이

항목 · v2.0 (잘못됨) · v3.0 (확인됨)

위험 권한 수 · 2개 · **10개**

저장소 접근 · "없음" · **READ/WRITE 외부 저장소 + 미디어 3종**

이미지 탈취 · "불가" · **mediapicker + 미디어 권한으로 가능**

계정 접근 · 없음 · **GET_ACCOUNTS**

앱 설치 · 없음 · **INSTALL_PACKAGES**

3. 코드 구조 분석

3.1 컴포넌트 통계

컴포넌트 · 수량 · 난독화 비율 · 비고

**Activity** · 45 · ~85% (38/45) · DCloud 7개 + mediapicker 2개 제외 전부 난독화

**Service** · 19 · ~95% (18/19) · DCloud DownloadService 1개 제외 전부 난독화

**Receiver** · 26 · ~96% (25/26) · Weex WXGlobalEventReceiver 1개 제외 전부 난독화

**Provider** · 9 · ~56% (5/9) · DCloud FileProvider 4개 + 난독화 5개

**합계** · 99 · ~87% · **총 99개 컴포넌트 중 86개 난독화**

3.2 DCloud/UniApp 컴포넌트 (정상 명명)

컴포넌트 · 타입 · 역할

`io.dcloud.PandoraEntry` · Activity (LAUNCHER) · UniApp 메인 진입점

`io.dcloud.PandoraEntryActivity` · Activity · UniApp 보조 진입점

`io.dcloud.WebviewActivity` · Activity · 웹뷰 콘텐츠 표시

`io.dcloud.WebAppActivity` · Activity · 웹앱 런타임

`io.dcloud.ProcessMediator` · Activity · 프로세스 간 통신

`io.dcloud.feature.gallery.imageedit.IMGEditActivity` · Activity · 이미지 편집 (갤러리)

`io.dcloud.feature.nativeObj.photoview.PhotoActivity` · Activity · 사진 뷰어

`io.dcloud.sdk.activity.WebViewActivity` · Activity · SDK 웹뷰

`io.dcloud.sdk.base.service.DownloadService` · Service · 파일 다운로드

`io.dcloud.common.util.DCloud_FileProvider` · Provider · 파일 공유

`io.dcloud.sdk.base.service.provider.DCloudAdFileProvider` · Provider · 광고 파일 관리

`com.taobao.weex.WXGlobalEventReceiver` · Receiver · Weex 글로벌 이벤트

3.3 난독화 패턴 분석 (T036: English Word Concatenation Obfuscation)

난독화된 컴포넌트 이름은 영어 단어 무작위 조합 패턴을 사용합니다:

```

com.umeprobamate.vtwinflower.WgporkerSscalefactorApplication

com.uoliver.qflatfooted.tassemblywoman.TbhybridomaKstockexchange

ljobber.xfiveneedled.cseamoss.ythucydides.JcwheellockFopticalbench

hmurphyslaw.wmanilahemp.uraceway.onephology.mlady.QbPapioFsidewheeler

```

패턴 특징:

1. 실제 영어 단어 사용: umeprobamate, twinflower, flatfooted, seamoss, thucydides

2. CamelCase + 접두사: 대소문자 조합으로 클래스명 생성

3. 2-6단어 패키지 경로: 단어를 패키지 경로로 분산 배치

4. 랜덤 접두사: 1글자 소문자 접두사 (l, h, j, w 등)

이 패턴은 kdreamapp (com.krim.kreamim)과는 다소 다르지만, 같은 UniApp 기반 난독화 도구를 사용한 것으로 추정됩니다. 특히 jiagu_1757 (uni.werhb.mwfcekdckql)과 비교하면 더 정교한 난독화 수준입니다.

3.4 더미(Decoy) 컴포넌트 분석

99개 컴포넌트 중 상당수가 실제 기능 없는 더미로 추정됩니다:

```

enabled="false" Activity: 다수 → 비활성 상태로 선언된 더미

exported="true" + enabled="false" → 디텍션 회피용 미끼

label 속성의 난독화 문자열 → 실제 UI에 표시되지 않음

```

이 기법의 목적:

1. 정적 분석 방해: 분석가가 99개 컴포넌트를 모두 조사해야 함

2. 자동 분석 도구 회피: 컴포넌트 수가 많으면 분석 시간 증가

3. 실제 악성 코드 은닉: 진짜 악성 컴포넌트를 더미 속에 숨김

3.5 메타데이터 난독화

AndroidManifest에 수십 개의 난독화된 meta-data 태그가 포함되어 있습니다:

```xml

<meta-data ns0:name="jKgerardiaQsoupfinsharkQcoalesce" ns0:value="oOgauchoGpreventivemedicine" />

<meta-data ns0:name="zUgillElabrouste" ns0:value="jRdecalcificationBautarkic" />

<meta-data ns0:name="hJicefogLsadism" ns0:value="xYkekchiOsegregationism" />

```

이 meta-data는 의미 없는 문자열로, Manifest 크기 증가 → 분석 복잡도 증가를 목적으로 합니다.

실제 의미 있는 meta-data:

```xml

<meta-data ns0:name="android.notch_support" ns0:value="true" />

<meta-data ns0:name="android.max_aspect" ns0:value="2.5" />

<meta-data ns0:name="notch.config" ns0:value="portrait" />

<meta-data ns0:name="com.facebook.soloader.enabled" ns0:value="false" />

<meta-data ns0:name="DCLOUD_STREAMAPP_CHANNEL" ns0:value="a25Five.tooolTransaction.k25|__UNI__77338A0|122414180809|common" />

```

3.6 MediaPicker 라이브러리

```

com.dmcbig.mediapicker.PickerActivity → 이미지/비디오 선택 UI

com.dmcbig.mediapicker.PreviewActivity → 선택한 미디어 미리보기

io.dcloud.feature.gallery.imageedit.IMGEditActivity → 이미지 편집

```

이 3개 Activity는 앱이 이미지/비디오를 선택하고 처리하는 기능을 가지고 있음을 확증합니다. 기존 보고서의 "이미지 탈취 불가" 판단은 완전히 잘못되었습니다.

3.7 액티비티 흐름 (추정)

```

[앱 실행]

v

io.dcloud.PandoraEntry (LAUNCHER)

v

UniApp JavaScript 번들 로드

v

WebView 기반 UI 렌더링

-- 초대코드 입력 화면

-- 권한 요청 화면

-- 연락처 수집

-- 미디어(사진/동영상) 수집

-- C2 서버 전송

v

io.dcloud.WebviewActivity / WebAppActivity

-- 추가 웹 콘텐츠 로드

```

4. 네트워크/C2 분석

4.1 C2 서버 정보

항목 · 값

**C2 URL** · **Unknown** (smali 코드 없어 추출 불가)

**프로토콜** · HTTPS 또는 HTTP (usesCleartextTraffic=true)

**서버 프레임워크** · Unknown (UniApp 특성상 서버는 다양)

4.2 C2 미추출 원인 및 추출 방법

미추출 원인:

1. smali/DEX 코드가 없음 (AndroidManifest + res 파일만 존재)

2. UniApp 프레임워크에서 C2 URL은 주로 JavaScript 번들(assets/apps/ 내부) 또는 네이티브 코드에 저장

3. 동적 분석(네트워크 캡처)이 수행되지 않음

추출을 위한 접근법:

1. APK 재추출: 원본 APK에서 assets/apps/__UNI__77338A0/ 폴더의 JS 번들 분석

2. 동적 분석: mitmproxy/Burp Suite로 네트워크 트래픽 캡처

3. DEX 분석: 원본 APK에서 classes.dex 추출 → smali 변환 → URL 상수 검색

4.3 usesCleartextTraffic=true

```xml

<application ... ns0:usesCleartextTraffic="true">

```

HTTP 평문 통신이 허용되어 있어 앱이 HTTPS가 아닌 HTTP로도 통신할 수 있습니다. 이는:

· C2 서버가 HTTPS를 지원하지 않을 가능성

· 또는 개발/테스트 편의를 위해 활성화

· SSL 차단 회피 목적

4.4 DCLOUD_STREAMAPP_CHANNEL 분석

```

a25Five.tooolTransaction.k25|__UNI__77338A0|122414180809|common

```

필드 · 값 · 의미

패키지명 · a25Five.tooolTransaction.k25 · 앱 식별

UniApp ID · __UNI__77338A0 · DCloud 앱 고유 ID

타임스탬프 · 122414180809 · 빌드 타임스탬프 (추정)

채널 · common · 배포 채널

UniApp ID __UNI__77338A0로 DCloud 개발자 포털에서 앱 등록 정보를 조회할 수 있을 가능성이 있습니다.

4.5 FileProvider 구성

```xml

<external-path name="external" path="/" /> ← 외부 저장소 전체

<root-path name="root_path" path="" /> ← 루트 파일시스템

<external-files-path name="external_file_path" path="." />

<external-cache-path name="external_cache_path" path="." />

```

root-path와 external-path path="/"는 기기의 전체 파일시스템에 접근할 수 있음을 의미합니다. 이는 악성 앱에서 데이터 탈취 범위를 최대화하기 위한 설정입니다.

5. 방어기제 분석

5.1 방어기제 현황

# · 방어기제 · 구현 · 수준 · 상태

1 · **극도 난독화** · 99개 컴포넌트 + 메타데이터 난독화 · 고급 · 분석 방해

2 · **더미 컴포넌트** · enabled="false" 다수 · 중급 · 분석 시간 증가

3 · **초대코드 검증** · L() → l0() 패턴 (추정) · 기본 · 우회됨

4 · **registerActivityLifecycleCallbacks** · 생명주기 모니터링 · 중급 · 우회됨

5 · **벤더별 배지 권한** · Huawei/Vivo/ASUS 대응 · 기본 · 탐지 회피

5.2 난독화 수준 비교

앱 · 난독화 유형 · 수준

**HomeYoga** · 영어 단어 조합 + 더미 컴포넌트 + meta-data 난독화 · **극도**

kdreamapp · 패키지명 난독화 · 높음

jiagu_1757 · Jiagu XOR 암호화 DEX · 높음

ML (YLOVE) · EasyHttp 기반 난독화 · 중간

Flirting_138 · ProGuard 기본 · 낮음

5.3 우회 결과 (기존 패치 유지)

기존 v2.0에서 적용한 패치 2건은 여전히 유효합니다:

1. L() → l0(): 초대코드 검증 우회

2. registerActivityLifecycleCallbacks 수정: Android 9 호환성

6. 데이터 탈취 분석

6.1 수집 가능 데이터 (확증 + 추정)

# · 데이터 유형 · 근거 · 확신도 · 피해 심각도

1 · **연락처** · READ_CONTACTS 권한 · 확증 · 극심

2 · **사진** · READ_MEDIA_IMAGES + mediapicker · 확증 · 극심

3 · **동영상** · READ_MEDIA_VIDEO + mediapicker · 확증 · 극심

4 · **전화번호/IMEI** · READ_PHONE_STATE 권한 · 확증 · 높음

5 · **파일** · READ_EXTERNAL_STORAGE + root-path FileProvider · 확증 · 높음

6 · **계정 정보** · GET_ACCOUNTS 권한 · 확증 · 높음

7 · **연락처 변조** · WRITE_CONTACTS 권한 · 확증 · 중간

8 · **추가 앱 설치** · INSTALL_PACKAGES 권한 · 확증 · 높음

6.2 기존 보고서와의 차이 (핵심)

항목 · v2.0 · v3.0

수집 대상 · 연락처만 · **연락처 + 사진 + 동영상 + 파일 + 전화번호 + 계정**

이미지 탈취 · "불가" · **가능 (mediapicker 확증)**

추가 앱 설치 · 없음 · **INSTALL_PACKAGES로 가능**

피해 범위 · 제한적 · **광범위**

6.3 Android 버전별 미디어 접근 전략

```

Android 9-12: READ_EXTERNAL_STORAGE → 모든 미디어 파일 접근

Android 13: READ_MEDIA_IMAGES + READ_MEDIA_VIDEO → 세분화된 접근

Android 14+: READ_MEDIA_VISUAL_USER_SELECTED → 사용자 선택 미디어

```

세 권한을 모두 선언함으로써 Android 9부터 14+까지 모든 버전에서 미디어 탈취 가능합니다.

7. UniApp 패밀리 교차 분석

7.1 DCloud UniApp 악성앱 비교

항목 · HomeYoga · kdreamapp · jiagu_1757

**UniApp ID** · __UNI__77338A0 · Unknown · uni.werhb.mwfcekdckql

**패키지명** · a25Five.tooolTransaction.k25 · com.krim.kreamim · uni.werhb.mwfcekdckql

**난독화** · 영어 단어 조합 (극도) · 패키지명 난독화 · Jiagu XOR

**위험 권한** · 10개 · 6개 · 3개

**데이터 탈취** · 연락처+미디어+파일+계정 · 연락처+GPS+미디어 · 연락처+OAID

**Weex 사용** · WXGlobalEventReceiver · WebSocket + Weex · 미확인

**C2 서버** · Unknown · [비공개] · [비공개]

**보호 수준** · 난독화 + 더미 · 5중 보호 · Jiagu XOR

**앱 설치 권한** · INSTALL_PACKAGES · 없음 · 없음

7.2 공통점

1. DCloud UniApp 프레임워크 기반

2. PandoraEntry 또는 유사 진입점 사용

3. Weex/Taobao 컴포넌트 포함

4. 중국어 문자열 존재 ("最近流应用" 등)

5. 연락처 탈취 공통 목적

7.3 차이점 및 HomeYoga의 특이성

1. INSTALL_PACKAGES: HomeYoga만 보유 → 추가 악성앱 설치 능력

2. WRITE_CONTACTS: HomeYoga만 보유 → 연락처 변조 능력

3. GET_ACCOUNTS: HomeYoga만 보유 → 계정 정보 수집

4. 난독화 수준: 가장 높음 (영어 단어 무작위 조합 + 더미 컴포넌트)

5. 벤더 특화: Huawei/Vivo/ASUS 배지 권한 → 다양한 기기 대응

7.4 HomeYoga vs Wavegrid 패밀리

기존 보고서에서 Wavegrid로 분류했으나, 실제로는 근본적으로 다릅니다:

항목 · Wavegrid 패밀리 · HomeYoga (실제)

**프레임워크** · Native Android (Kotlin/Java) · DCloud UniApp (JavaScript/Vue)

**진입점** · LoginActivity / MainActivity · io.dcloud.PandoraEntry

**네트워크** · EasyHttp / OkHttp · UniApp HTTP 모듈

**뷰 바인딩** · ButterKnife / ViewBinding · WebView 기반

**로컬 저장소** · SPUtils / MMKV · UniApp Storage API

**난독화** · ProGuard / 없음 · 영어 단어 조합 + 더미

**C2 패턴** · `[비공개] · Unknown (JS 번들 내장)

8. Manifest 중복 선언 포렌식

v4.0에서 새롭게 수행한 AndroidManifest.xml 정밀 포렌식 결과, 대규모 중복 선언 패턴이 발견되었습니다.

8.1 컴포넌트 총량 재집계

기존 보고서에서 "99개 컴포넌트"로 기재했으나, 중복을 포함한 실제 선언 수는 다릅니다:

컴포넌트 타입 · 선언 수 (중복 포함) · 고유 이름 수 · 중복 수

**Activity** · 119 · ~95 · ~24

**Service** · 18 · ~16 · ~2

**Receiver** · 27 · ~24 · ~3

**Provider** · 4 · 2 · 2

**합계** · **168** · **~140** · **~28**

**meta-data** · **152** · ~144 · ~8

총 168개 컴포넌트 선언 + 152개 meta-data 태그 = 320개 XML 요소가 AndroidManifest에 존재합니다. 이는 일반적인 앱(20-40개)의 8-16배에 달하는 비정상적인 규모입니다.

8.2 DCloud 컴포넌트 이중 선언

모든 DCloud 정규 컴포넌트가 완전히 동일한 속성으로 2회씩 선언되어 있습니다:

컴포넌트 · 선언 횟수 · 비고

`io.dcloud.PandoraEntry` · **2회** · 각각 LAUNCHER intent-filter 포함

`io.dcloud.PandoraEntryActivity` · **2회** · singleTask launchMode

`io.dcloud.WebviewActivity` · **2회** · 서로 다른 theme 적용

`io.dcloud.WebAppActivity` · **2회** · singleTask launchMode

`io.dcloud.ProcessMediator` · **2회** · excludeFromRecents

`io.dcloud.sdk.activity.WebViewActivity` · **2회**

`io.dcloud.feature.gallery.imageedit.IMGEditActivity` · **2회**

`io.dcloud.feature.nativeObj.photoview.PhotoActivity` · **2회**

`io.dcloud.sdk.base.service.DownloadService` · **2회** · BIND_JOB_SERVICE

`io.dcloud.common.util.DCloud_FileProvider` · **2회** · 동일 authority

`io.dcloud.sdk.base.service.provider.DCloudAdFileProvider` · **2회** · 동일 authority

`com.taobao.weex.WXGlobalEventReceiver` · **2회**

`com.dmcbig.mediapicker.PickerActivity` · **2회**

`com.dmcbig.mediapicker.PreviewActivity` · **2회**

14개 정규 컴포넌트가 모두 2회 선언 = 28개 중복 선언. 이는 단순한 빌드 오류가 아니라 의도적인 Manifest 팽창 전략입니다.

8.3 LAUNCHER intent-filter 3중 선언

android.intent.action.MAIN + android.intent.category.LAUNCHER가 3회 선언되어 있습니다:

```

1회: queries > intent > action.MAIN (앱 검색 쿼리용)

2회: io.dcloud.PandoraEntry (1차 선언) + LAUNCHER + BROWSABLE VIEW

3회: io.dcloud.PandoraEntry (2차 선언 - 완전 중복)

```

Android 시스템은 중복 LAUNCHER를 무시하지만, 정적 분석 도구는 혼란을 일으킬 수 있습니다.

8.4 BROWSABLE VIEW intent-filter

PandoraEntry에 android.intent.action.VIEW + BROWSABLE + DEFAULT 카테고리가 선언되어 있어, 브라우저에서 특정 URL을 통해 앱을 직접 실행할 수 있습니다. 다만 scheme/host 데이터가 명시되지 않아 범용 뷰어로 등록됩니다.

8.5 권한 중복 선언

3개 권한이 2회씩 중복 선언되어 있습니다:

권한 · 선언 횟수

`GET_ACCOUNTS` · 2회

`REQUEST_INSTALL_PACKAGES` · 2회

`WRITE_CONTACTS` · 2회

Android 시스템은 중복 권한을 자동 병합하므로 기능상 영향은 없지만, 분석가가 수동 카운팅 시 오차 발생 가능성이 있습니다.

8.6 중복 선언의 전략적 의미

```

[목적 1: Manifest 크기 팽창]

168개 컴포넌트 + 152개 meta-data = 377줄 XML

일반 앱 대비 8-16배 규모 → 분석 시간 대폭 증가

[목적 2: 분석 도구 혼란]

동일 이름 중복 선언 → 파싱 오류 또는 잘못된 카운팅

apktool, jadx 등의 분석 결과 신뢰도 저하

[목적 3: 실제 악성 코드 은닉]

140개 고유 컴포넌트 중 정규 14개 제외 = 126개 난독화

진짜 악성 로직 위치 파악 극히 어려움

[목적 4: 자동 분석 시스템 회피]

VirusTotal 등의 정적 분석에서 "컴포넌트 수 비정상"으로만 탐지

구체적 위협 분류 어려움

```

9. 난독화 사전 분석

9.1 난독화 어휘 체계

AndroidManifest에서 추출된 난독화 단어들을 언어학적으로 분류합니다:

카테고리 · 단어 예시 · 빈도 · 출처 추정

**의학/생물학** · umeprobamate, fibroblast, parenchyma, hepatotoxic, vitrectomy · 높음 · 의학 사전

**동물/식물** · twinflower, lyrebird, seamoss, silverfish, killerwhale · 높음 · 생물학 사전

**화학** · polyester, diaminetetraaceticacid, hexadecimaldigit · 중간 · 화학 용어집

**지리** · mozambique, knoxville, eindhoven, andalusia, cambridge · 중간 · 지명 사전

**역사/문화** · thucydides, byzantine, sadism, gresham, charlemagne · 낮음 · 백과사전

**일상 용어** · flatfooted, stockexchange, creditworthiness, bankstatement · 높음 · 영영 사전

**군사/정치** · murphyslaw, guerilla, militarymarch, lordresistancearmy · 낮음 · 전문 용어집

9.2 어휘 생성 알고리즘 추정

난독화 이름의 구조를 역분석한 결과:

```

패키지명 생성:

[소문자접두사1][영어단어1].[소문자접두사2][영어단어2]...[소문자접두사N][영어단어N]

예: com.umeprobamate.vtwinflower

클래스명 생성:

[대문자접두사][영어단어1][대문자접두사][영어단어2]Activity

예: WgporkerSscalefactorApplication

접두사 패턴:

· 1글자 소문자: a, b, c, ..., z (패키지 세그먼트)

· 1글자 대문자: A, B, C, ..., Z (클래스명 세그먼트)

· 특수 패턴: "com." + [소문자 시작 단어]... (정규 패키지 위장)

```

9.3 핵심 어휘 반복 패턴

특정 단어가 여러 컴포넌트에 반복 등장합니다:

반복 단어 · 등장 횟수 · 의미

vtwinflower · 11 · Application 클래스 소속 마커

umeprobamate · 11 · Application 패키지 마커

mourningcloak · 3 · 나비 종류 (생물학)

silverdollar · 3 · 물고기 종류 (생물학)

telegraphicsignal · 2 · 통신 용어

creditworthiness · 2 · 금융 용어

palatability · 2 · 맛/기호 용어

vtwinflower와 umeprobamate의 11회 등장은 이들이 Application 클래스 네임스페이스 표식으로 기능함을 의미합니다. 실제 악성 로직이 있는 핵심 Activity들은 이 네임스페이스 하에 배치됩니다:

```

com.umeprobamate.vtwinflower.WgporkerSscalefactorApplication (Application)

com.umeprobamate.vtwinflower.HflaxenaWspectaculartActivity (Activity)

com.umeprobamate.vtwinflower.JleoixxZshingonxActivity (Activity)

com.umeprobamate.vtwinflower.JtriplecrownseasonyYunalterablyuActivity (Activity)

com.umeprobamate.vtwinflower.LoccupyfRdistractrActivity (Activity)

com.umeprobamate.vtwinflower.SbahtvBpuerperalfevereActivity

본 보고서는 주식회사 아크링크 Deep-Coding 보안연구소가 피싱·몸캠피싱 피해자 구제를 목적으로 작성했습니다. 전체 열람·피해 상담: arklink.co.kr