Golden New 상세 분석 보고서

골든(Golden) APK 양자나노 심층분석 보고서

보고서 버전: v1.0

분석 일자: 2026-03-04

분석가: ArkLink Corp. 보안연구팀 ([비공개] 대표)

보고서 분류: ML-Level Quantum Nano Analysis

대상 APK: 260226_golden.apk

1. Executive Summary (총괄 요약)

골든(Golden) 앱은 com.spare.nouns 패키지명으로 배포되는 악성 안드로이드 애플리케이션이다. 표면적으로는 "골든"이라는 이름의 일반 앱으로 위장하고 있으나, 내부적으로 연락처 전체 탈취, 기기 정보 수집, 카메라/마이크 접근, 이미지 파일 업로드를 수행하는 정보 탈취형 악성앱이다.

핵심 발견사항

항목 · 내용

**패키지명** · `com.spare.nouns`

**표시명** · 골든 (Golden)

**APK 크기** · 2.69MB (2,692,400 bytes)

**SHA256** · `01962220da81bc10e9591cf9e574627afd3865c24b0a65ce6cf4c94df3a320d6`

**보호 기술** · ApkControlFlowConfusion 8.0 (중국산 제어 흐름 난독화)

**보호 일시** · 2026-02-25 17:55:31

**프레임워크** · Native Android (단일 classes.dex, 5.6MB)

**네트워크 라이브러리** · OkHttp3 (publicsuffix 데이터 포함)

**이미지 라이브러리** · Glide (Bumptech)

**C2 서버** · 런타임 복호화 — 정적 분석으로 미확인

**위협 수준** · **CRITICAL**

**minSdkVersion** · 26 (Android 8.0 Oreo)

**targetSdkVersion** · 35 (Android 15)

**versionCode** · 945

**versionName** · 42.5.9

위협 요약

1. 연락처 전체 탈취: NewaContent.getContacts() → 이름+전화번호 수집

2. 기기 정보 탈취: NewaDevice → 모델명, SIM 상태, 전화번호 수집

3. 이미지 자동 업로드: ImageUploadWorker → WorkManager 기반 백그라운드 이미지 전송

4. WebView 기반 C2: WebBrowserActivity → JavaScript 활성화, 카메라/마이크 권한 중계

5. 영속성: BOOT_COMPLETED 수신, FOREGROUND_SERVICE, WAKE_LOCK

2. 앱 아키텍처 분석

2.1 컴포넌트 구조

```

com.spare.nouns/

├── api/

│ ├── NewaContent.java — 연락처 데이터 모델 + 탈취 로직

│ ├── NewaContent$ContentBean — 연락처 Bean (name, phone)

│ ├── NewaDevice.java — 기기 정보 데이터 모델

│ └── NewaDevice$ContentBean — 기기 Bean (model, simState, tel)

├── ui/

│ ├── LoginAcp.java — 메인 런처 (로그인 위장 화면)

│ ├── StartAcp.java — 데이터 수집 + 전송 화면

│ ├── WebBrowserActivity.java — WebView C2 통신 채널

│ └── BackgroundVideo.java — 배경 비디오 재생 (위장용)

└── worker/

└── ImageUploadWorker.java — 백그라운드 이미지 업로드 Worker

```

2.2 Activity 흐름

```

[사용자 앱 실행]

LoginAcp (LAUNCHER) — 배경 비디오 + "시작하기" 버튼

↓ 권한 요청 (CAMERA, RECORD_AUDIO, READ_CONTACTS 등)

↓ 권한 허용 시

StartAcp — 연락처 탈취 + 기기 정보 수집 + 서버 전송

WebBrowserActivity — WebView로 C2 서버 접속

ImageUploadWorker — 백그라운드 이미지 탈취 (WorkManager)

```

2.3 AndroidManifest.xml 분석

Application 속성:

· android:usesCleartextTraffic="true" — HTTP 평문 통신 허용 (보안 취약)

· android:theme="@style/Theme.Nongfu" — "Nongfu" 테마명 (중국 브랜드 참조 가능성)

· android:label="@string/app_namez" — "골든" (한국어 표시명)

· android:allowBackup="true" — 백업 허용 (데이터 추출 가능)

· android:extractNativeLibs="false" — 네이티브 라이브러리 없음

컴포넌트 등록:

· Activity 3개: LoginAcp (exported), StartAcp, WebBrowserActivity

· Service 4개: SystemAlarmService, SystemJobService, SystemForegroundService, MultiInstanceInvalidationService

· Receiver 6개: ForceStopRunnable, ConstraintProxy(Battery/Storage/Network), RescheduleReceiver, DiagnosticsReceiver

· Provider 1개: InitializationProvider (WorkManager, Emoji2, ProcessLifecycle)

2.4 smali 코드 통계

항목 · 수량

총 smali 파일 수 · 4,309

앱 고유 클래스 (com.spare.nouns) · 13

난독화된 패키지 (a~z, a0~z5) · 184

Unicode 아랍 문자 난독화 파일 · 205

최상위 패키지 수 · 188

네이티브 라이브러리 · 0 (없음)

3. ApkControlFlowConfusion 8.0 보호 분석

3.1 보호 마커 파일

경로: assets/protected_by_np/ApkControlFlowConfusion_8.0_ab587cd8c1204a099830fa2a9816ecf6.txt

```

ProtectTime: 2026-02-25 17:55:31

Function: 控制流混淆8.0

Version: 3.1.37

Attention: 仅用于个人代码保护,禁止用于非法用途!

```

해석:

· 보호 시간: 2026-02-25 17:55:31 (APK 배포 직전)

· 기능: 控制流混淆 = Control Flow Confusion (제어 흐름 혼란)

· 버전: 도구 버전 3.1.37, 보호 레벨 8.0

· 경고: "개인 코드 보호 전용, 불법 사용 금지" (중국어)

· 해시: ab587cd8c1204a099830fa2a9816ecf6 (MD5 형식, 라이선스/서명 식별자)

3.2 214개 앱 데이터베이스 최초 발견

ApkControlFlowConfusion은 아크링크의 214개 앱 분석 데이터베이스에서 최초로 확인된 보호 기술이다.

기존 보호 기술과의 비교:

보호 기술 · 발견 앱 수 · 특징

360 Jiagu · 47+ · DEX 암호화, libjiagu.so

Frezrik Jiagu · 20+ · 패키지 4-segment, 15개 권한

Virbox · 15+ · 에뮬레이터 탐지 특화

ApkControlFlowConfusion 8.0 · **1** (Golden) · 제어흐름 혼란 + Unicode 난독화

3.3 난독화 기법 상세 분석

ApkControlFlowConfusion 8.0은 5가지 핵심 난독화 기법을 적용한다:

기법 1: Unicode 아랍 문자 클래스/메서드 이름 치환

모든 앱 메서드가 아랍어 숫자 조합(ۢۡۤۥ, ۣ۟ۧ۟ۥ 등)으로 치환됨.

```smali

원래: ContactsHelper.getPhoneNumber()

invoke-static {v1, v2}, Lg4/۟ۤ۠۟;->ۤۥۡ۟(Ljava/lang/Object;Ljava/lang/Object;)I

원래: StringUtils.decode()

invoke-static/range {v38 .. v41}, Landroid/app/ۣ۟ۢۢۦ;->ۣۣۡۤ([SIII)Ljava/lang/String;

```

특징:

· Unicode 범위 0x06E0~0x06FF (아랍어 확장 B) 사용

· 5자리 조합으로 메서드명 생성 (예: ۟ۤ۠۟, ۤۥۡ۟)

· IDE 디버거에서 렌더링 혼란 유발

· 자동화 도구의 문자열 매칭 방해

기법 2: 정적 short 배열 기반 문자열 암호화

모든 문자열 리터럴이 short[] 배열로 인코딩되어 런타임에 복호화됨.

```smali

.field private static final short:[S

.method static constructor <clinit>()V

.locals 52

const v0, 0x43 # 배열 크기 67

new-array v0, v0, [S

fill-array-data v0, :array_0

sput-object v0, Lcom/spare/nouns[비공개]

:array_0

.array-data 2

0x9a5s # 암호화된 문자 데이터

0x9a8s

0x9b2s

...

.end array-data

```

복호화 패턴:

```smali

배열 가져오기

invoke-static/range {}, Lcom/spare/nouns[비공개])[S

복호화 호출 (배열, 시작오프셋, 길이, 키)

invoke-static/range {v38 .. v41}, Landroid/app/ۣ۟ۢۢۦ;->ۣۣۡۤ([SIII)Ljava/lang/String;

```

분석:

· 각 클래스가 고유 short[] 배열 보유

· 복호화 함수가 200+ 개의 서로 다른 난독화 클래스에 분산

· 매개변수: ([SIII) = short배열, 시작인덱스(I), 길이(I), 키(I)

· 모든 URL, API 경로, 오류 메시지가 이 방식으로 은닉

기법 3: 제어 흐름 평탄화 (Control Flow Flattening)

```smali

.locals 52 # 비정상적으로 많은 지역 변수 (최대 52개)

move-object/from16 v1, p0 # 16비트 이상 레지스터 사용

불필요한 조건 분기 삽입

invoke-static {}, Lokhttp3/internal/publicsuffix/ۢ۟۠ۦ;->۟ۧۢۨۥ()I

move-result v0

if-lez v0, :cond_0 # 항상 특정 방향으로 분기

sget-object v0, Lcom/spare/nouns[비공개]

:goto_0

return-object v0

:cond_0

const v0, 0x0

goto :goto_0

```

특징:

· 모든 메서드에 .locals 51~64 (비정상적 변수 수)

· move-object/from16 사용 (16비트 레지스터 주소)

· 더미 조건 분기로 정적 분석 방해

· 디컴파일러(jadx, procyon) 출력 품질 저하

기법 4: 네임스페이스 하이재킹

```

com/google/android/material/bottomsheet/ۣ۟ۡۧۡ;->ۨۥۣ۠()

com/google/android/material/behavior/ۣ۟ۢۢۦ;->ۨۧۨۤ()

androidx/appcompat/widget/ۧ۠ۨۤ;->ۤ۠ۦۦ()

androidx/core/content/pm/۟۠ۦۤ۟;->ۧۥۨۧ()

```

실제 Android/MaterialDesign 패키지 경로 내에 난독화된 클래스를 삽입하여:

· 정상 라이브러리와 악성 코드의 경계 모호화

· 패키지 기반 필터링 회피

· 라이브러리 업데이트 시 충돌 유발 가능

기법 5: 다형적 복호화 디스패치

```smali

동일한 복호화 시그니처 ([SIII)Ljava/lang/String; 이지만 200+ 개의 다른 클래스에 분산

Landroid/app/ۣ۟ۢۢۦ;->ۣۣۡۤ([SIII)Ljava/lang/String;

Lz2/ۣ۟ۤۤ;->۟ۡۤۤ۟([SIII)Ljava/lang/String;

Lw5/۠ۤۦ۠;->ۦ۟ۥ۠([SIII)Ljava/lang/String;

Lx4/ۥۢۧۤ;->۟ۢ۟ۧۧ([SIII)Ljava/lang/String;

Ln2/۠ۧۢۥ;->ۣۢ۠ۨ([SIII)Ljava/lang/String;

```

각 복호화 함수가 미세하게 다른 로직을 가질 수 있어, 일괄 복호화 스크립트 작성이 극히 어려움.

3.4 보호 레벨 평가

평가 항목 · 점수 (10점 만점) · 근거

문자열 은닉 · 9/10 · short 배열 + 다형적 디스패치

코드 흐름 은닉 · 8/10 · 52-레지스터 평탄화 + 더미 분기

API 은닉 · 9/10 · 네임스페이스 하이재킹

역공학 저항 · 8/10 · jadx/procyon 출력 심각하게 저하

동적 분석 저항 · 3/10 · 에뮬레이터 탐지 없음 (약점)

**종합** · **7.4/10** · 정적 분석 극도로 어렵, 동적 분석에 취약

4. 권한 분석

4.1 권한 전체 목록

# · 권한 · 위험도 · 악용 목적

1 · `INTERNET` · Normal · C2 서버 통신

2 · `ACCESS_NETWORK_STATE` · Normal · 네트워크 연결 상태 확인

3 · `ACCESS_WIFI_STATE` · Normal · WiFi 정보 수집

4 · `READ_CONTACTS` · **Dangerous** · **연락처 전체 탈취**

5 · `READ_PHONE_NUMBERS` · **Dangerous** · **전화번호 탈취**

6 · `CAMERA` · **Dangerous** · WebView 카메라 접근

7 · `RECORD_AUDIO` · **Dangerous** · WebView 마이크 접근

8 · `MODIFY_AUDIO_SETTINGS` · Normal · 오디오 설정 변경

9 · `READ_MEDIA_IMAGES` · **Dangerous** · **이미지 파일 탈취**

10 · `READ_EXTERNAL_STORAGE` · **Dangerous** · 외부 저장소 읽기

11 · `WAKE_LOCK` · Normal · 백그라운드 유지

12 · `RECEIVE_BOOT_COMPLETED` · Normal · **부팅 시 자동 시작**

13 · `FOREGROUND_SERVICE` · Normal · 포그라운드 서비스 유지

14 · `DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION` · Signature · 내부 브로드캐스트 보호

위험 권한 요약: 14개 중 6개 Dangerous (42.8%)

4.2 권한 요청 전략 분석

LoginAcp의 생성자에서 3개의 문자열을 초기화 — 이것이 권한 요청 배열이다:

```smali

LoginAcp constructor에서 3개 권한 그룹 문자열 생성

filled-new-array {v2, v0, v1}, [Ljava/lang/String;

iput-object v0, v3, Lcom/spare/nouns/ui/LoginAcp;->C:[Ljava/lang/String;

```

런타임에 복호화되어 requestPermissions()에 전달되는 구조이며, onRequestPermissionsResult에서 결과를 처리한다.

4.3 권한 그룹별 위험 평가

그룹 · 권한 · 위험도 · 데이터 영향

개인정보 · READ_CONTACTS, READ_PHONE_NUMBERS · **극심** · 전체 연락처 + 전화번호

미디어 · CAMERA, RECORD_AUDIO, READ_MEDIA_IMAGES · **높음** · 사진/영상/음성

저장소 · READ_EXTERNAL_STORAGE · **높음** · 전체 외부 저장소

네트워크 · INTERNET, NETWORK_STATE, WIFI_STATE · 중간 · 데이터 전송 경로

지속성 · BOOT_COMPLETED, FOREGROUND_SERVICE, WAKE_LOCK · 중간 · 앱 영속성

5. 데이터 탈취 벡터 분석

5.1 연락처 탈취 (`NewaContent.getContacts()`)

```smali

연락처 커서 쿼리

invoke-static {v13}, Lf1/۟ۡۨ۟ۦ;->ۦۣۧۨ(Ljava/lang/Object;)Landroid/content/ContentResolver;

invoke-static {}, Lq4/ۨۨۡۤ;->ۧۡۧۡ()Landroid/net/Uri; # ContactsContract.Contacts URI

invoke-static/range {v1 .. v6}, La2/ۣ۟ۡۡۡ;->۟ۤۧ۠ۦ(...)Landroid/database/Cursor;

이름 컬럼 인덱스 가져오기

invoke-static {v1, v2}, Lg4/۟ۤ۠۟;->ۤۥۡ۟(Ljava/lang/Object;Ljava/lang/Object;)I # getColumnIndex(DISPLAY_NAME)

전화번호 서브쿼리

invoke-static {}, Landroidx/core/content/pm/۟۠ۦۤ۟;->ۧۥۨۧ()Landroid/net/Uri; # Phone.CONTENT_URI

```

수집 데이터 구조:

```json

{

"aid": "기기식별자",

"type": 2,

"content": [

{ "name": "연락처이름", "phone": "010-XXXX-XXXX\n010-YYYY-YYYY" }

]

}

```

핵심: 한 연락처에 여러 전화번호가 있으면 \n으로 연결하여 하나의 phone 필드에 저장.

5.2 기기 정보 탈취 (`StartAcp.R()`)

```smali

TelephonyManager 획득

check-cast v2, Landroid/telephony/TelephonyManager;

SIM 상태 가져오기

invoke-static {v2}, Lcom/google/android/material/textview/ۣ۟۟ۦۡ;->ۨۨ۟(Ljava/lang/Object;)I # getSimState()

Line1Number (전화번호) 가져오기

invoke-static {v1}, Lw4/ۥۦ۟ۢ;->ۧ۠ۤ(Ljava/lang/Object;)Ljava/lang/String; # getLine1Number()

```

수집 데이터 구조:

```json

{

"aid": "기기식별자",

"type": 1,

"content": {

"model": "Samsung_SM-G990N",

"simState": "5",

"tel": "010-**-**"

}

}

```

5.3 이미지 탈취 (`ImageUploadWorker`)

핵심 동작:

1. WorkManager가 ImageUploadWorker를 스케줄 (타임아웃 30초, 재시도 60초, 백오프 60초)

2. 입력 데이터에서 파일 경로/URI 추출

3. 이미지를 1920px 이하로 리사이즈 (JPEG, 품질 85%)

4. 임시 파일로 압축 후 OkHttp3 Multipart로 업로드

5. MIME 타입 판별 (JPEG/PNG/GIF) 후 적절한 Content-Type 설정

6. 업로드 성공 시 임시 파일 삭제

리사이즈 로직:

```smali

const/16 v2, 0x780 # 1920px 기준

const/high16 v6, 0x409e000000000000L # 1920.0 (double)

max(width, height) > 1920이면 비례 축소

```

업로드 형식: OkHttp3 RequestBody (Multipart)

```

POST /upload

Content-Type: multipart/form-data

· file: (이미지 바이너리)

· filename: "upload_<timestamp>.jpg"

```

5.4 WebView C2 채널 (`WebBrowserActivity`)

```java

// SetJavaScriptEnabled 어노테이션 — JS 명시 활성화

@SuppressLint("SetJavaScriptEnabled")

// WebView 기반 C2 통신

// CAMERA + RECORD_AUDIO 권한을 WebView에 중계

// 풀스크린 컨테이너 지원 (영상 통화 위장)

```

기능:

· JavaScript 활성화된 WebView

· ProgressBar로 로딩 표시

· FullScreen 모드 지원 (비디오 통화 위장)

· 카메라/마이크 권한을 WebView에 전달

6. 네트워크 통신 분석

6.1 OkHttp3 사용 확인

증거:

· smali/okhttp3/internal/ 디렉토리 존재

· okhttp3/internal/publicsuffix/NOTICE 파일 포함

· okhttp3/internal/publicsuffix/a.gz (공개 접미사 데이터)

6.2 C2 URL 은닉 방식

모든 URL이 short[] 배열로 암호화:

```smali

LoginAcp: short[] 크기 0xF7 (247개 short)

StartAcp: short[] 크기 0x7B (123개 short)

ImageUploadWorker: short[] 크기 0x16A (362개 short)

WebBrowserActivity: short[] 크기 0x52 (82개 short)

```

각 클래스의 short[] 배열에 최소 2~3개의 URL 문자열이 인코딩되어 있을 것으로 추정.

6.3 HTTP 평문 통신 허용

```xml

android:usesCleartextTraffic="true"

```

HTTPS가 아닌 HTTP 평문 통신을 허용하여:

· MITM 공격에 취약

· 네트워크 스니핑으로 C2 URL 추출 가능 (동적 분석 시)

· 탈취 데이터가 평문으로 전송될 가능성

6.4 서버 통신 추정 구조

```

[앱 시작]

├─ POST [비공개] ← NewaDevice (기기 정보)

├─ POST [비공개] ← NewaContent (연락처)

├─ POST [비공개] ← ImageUploadWorker (이미지)

└─ WebView URL ← C2 명령/제어 채널

```

7. Gson/JSON 직렬화 분석

7.1 데이터 모델 구조

NewaContent와 NewaDevice는 모두 Serializable을 구현하며, Builder 패턴을 사용:

```java

// NewaContent: 연락처 데이터 패킷

class NewaContent implements Serializable {

String aid; // 기기 식별자

int type; // 데이터 타입 (2 = contacts)

List<ContentBean> content;

static class ContentBean {

String name; // 연락처 이름

String phone; // 전화번호 (복수 시 \n 구분)

}

}

// NewaDevice: 기기 정보 패킷

class NewaDevice implements Serializable {

String aid; // 기기 식별자

int type; // 데이터 타입 (1 = device)

ContentBean content;

static class ContentBean {

String model; // 기기 모델명

String simState; // SIM 상태

String tel; // 전화번호

}

}

```

7.2 "aid" 식별자 생성

StartAcp.U() 메서드에서 T3/e (정적 필드 F)를 통해 aid를 생성. 이는 기기 고유 식별자로서 모든 데이터 패킷에 포함됨.

8. 취약점 평가

8.1 MITM 취약점 (Critical)

· usesCleartextTraffic="true" — HTTP 평문 허용

· SSL Pinning 미적용 (OkHttp3 기본 설정)

· 프록시 설정 감지 미구현

· 결과: Burp Suite/mitmproxy로 모든 통신 가로채기 가능

8.2 에뮬레이터 탐지 미구현 (Critical)

· Build.FINGERPRINT 검사 없음

· Build.MODEL 검사 없음

· ro.hardware 속성 검사 없음

· 결과: 에뮬레이터에서 완전 동작 가능, 동적 분석에 취약

8.3 루팅 탐지 미구현 (High)

· su 바이너리 검사 없음

· Magisk 검사 없음

· 결과: 루팅된 기기에서 Frida 훅 가능

8.4 코드 무결성 검증 미구현 (High)

· 서명 검증 없음

· 디버그 모드 검사 없음

· 결과: 리패키징 후 재설치 가능

8.5 데이터 저장 취약점 (Medium)

· allowBackup="true" — ADB 백업으로 데이터 추출 가능

· SharedPreferences 암호화 여부 불명

9. IOC (Indicators of Compromise)

9.1 파일 해시

유형 · 값

SHA256 · `01962220da81bc10e9591cf9e574627afd3865c24b0a65ce6cf4c94df3a320d6`

APK 파일명 · `260226_golden.apk`

APK 크기 · 2,692,400 bytes

9.2 패키지/클래스 식별자

유형 · 값

패키지명 · `com.spare.nouns`

런처 액티비티 · `com.spare.nouns.ui.LoginAcp`

데이터 수집 · `com.spare.nouns.ui.StartAcp`

WebView C2 · `com.spare.nouns.ui.WebBrowserActivity`

이미지 업로더 · `com.spare.nouns.worker.ImageUploadWorker`

연락처 모델 · `com.spare.nouns.api.NewaContent`

기기정보 모델 · `com.spare.nouns.api.NewaDevice`

9.3 보호 식별자

유형 · 값

보호 도구 · ApkControlFlowConfusion 8.0

도구 버전 · 3.1.37

보호 해시 · `ab587cd8c1204a099830fa2a9816ecf6`

마커 경로 · `assets/protected_by_np/`

9.4 라이브러리 식별자

라이브러리 · 패키지

OkHttp3 · `okhttp3/internal/publicsuffix/`

Glide · `com/bumptech/glide/`

AndroidX Work · `androidx/work/`

Material Design · `com/google/android/material/`

AndroidX Room · `androidx/room/`

9.5 UI 식별자

항목 · 값

앱 이름 · "골든" (`app_namez`)

부제목 · "간편하게 시작" (`app_subtitlez`)

버튼 텍스트 · "시작하기" (`app_buttonz`)

테마 · `Theme.Nongfu`

웹뷰 제목 · "웹 브라우징"

9.6 C2 관련

항목 · 값

C2 URL · 런타임 복호화 (미확인)

통신 프로토콜 · HTTP/HTTPS (OkHttp3)

데이터 형식 · JSON (Serializable 모델)

cleartext 허용 · true

10. 기법 점검 (Technique Review)

```

기법 점검:

· 시도한 기법:

[SA-01] AndroidManifest 정적 분석 — 완료 (모든 컴포넌트, 권한, 속성 매핑)

[SA-02] smali 코드 정적 분석 — 완료 (13개 앱 클래스 전수 분석)

[SA-03] 문자열 패턴 분석 — 부분 (short[] 배열 암호화로 직접 추출 불가)

[SA-04] 데이터 모델 역공학 — 완료 (NewaContent, NewaDevice 구조 복원)

[SA-05] 라이브러리 식별 — 완료 (OkHttp3, Glide, WorkManager, Room)

[SA-06] 보호 기술 분석 — 완료 (ApkControlFlowConfusion 8.0 상세 분석)

[SA-07] 권한-기능 매핑 — 완료 (14개 권한의 악성 용도 식별)

[SA-08] UI 흐름 분석 — 완료 (레이아웃 XML 기반 앱 흐름 재구성)

[SA-09] 리소스 문자열 분석 — 완료 (한국어 UI 문자열 식별)

· 확장된 기법:

[SA-06+] ApkControlFlowConfusion 전용 분석 프레임워크 수립

→ Unicode 아랍문자 난독화 패턴 분류 (5가지 기법 식별)

→ short[] 배열 복호화 구조 분석

→ 네임스페이스 하이재킹 패턴 문서화

· 신규 기법:

[RE-013] "Polyglot Decryptor Mapping" — 다형적 복호화 함수 분산 패턴 분석

→ 200+ 개의 서로 다른 난독화 클래스에 분산된 동일 시그니처 복호화 함수 매핑

→ 각 함수가 다른 XOR/시프트 키를 사용할 가능성 분석

[RE-014] "Namespace Hijack Detection" — 정상 라이브러리 패키지 내 악성 클래스 탐지

→ com/google/android/material/, androidx/ 패키지 내 Unicode 클래스 식별

· 한계 발견:

[LIM-01] short[] 배열 복호화 불가 — 복호화 함수가 200+ 곳에 분산, 각각 다른 로직 가능

→ 동적 분석(Frida hooking)으로 런타임 복호화 필요

[LIM-02] C2 URL 미확인 — 모든 URL이 short[] 암호화

→ 에뮬레이터 동적 실행 + 네트워크 캡처 필요

[LIM-03] 정확한 데이터 전송 API 엔드포인트 미확인

→ mitmproxy/Burp Suite 프록시 분석 필요

```

11. 동적 분석 권장 사항

11.1 즉시 실행 가능 (에뮬레이터 탐지 없음)

```bash

1. 에뮬레이터에서 직접 설치/실행 가능

adb install 260226_golden.apk

adb shell am start -n com.spare.nouns/.ui.LoginAcp

2. 네트워크 캡처로 C2 URL 추출

mitmproxy -p 8080 --set ssl_insecure=true

3. Frida로 복호화 함수 후킹

short[] → String 변환 함수를 후킹하여 모든 복호화 문자열 덤프

```

11.2 Frida 복호화 스크립트 전략

```javascript

// 모든 ([SIII)Ljava/lang/String; 시그니처 메서드를 후킹

// 반환값(String)을 로그로 출력하면 모든 URL/API 경로 추출 가능

```

11.3 예상 C2 통신 패턴

· `POST [비공개] — 기기 정보 (최초 1회)

· `POST [비공개] — 연락처 전체 (권한 허용 후)

· POST /upload — 이미지 파일 (WorkManager 스케줄)

· WebView URL — C2 명령/제어

12. 패밀리 분류 분석

12.1 기존 패밀리와의 비교

특성 · Golden · wavegrid · frezrik_jiagu · virbox_sens

보호 · ApkControlFlowConfusion · 없음/경량 · 360 Jiagu · Virbox

네이티브 lib · 없음 · 없음 · libjiagu.so · 있음

초대코드 · 미확인 · 있음 · 가변 · 없음

WebView · 있음 · 있음 · 가변 · 없음

이미지 업로드 · WorkManager · 직접 HTTP · 가변 · 없음

연락처 탈취 · ContentResolver · ContentResolver · ContentResolver · ContentResolver

기기 정보 · TelephonyManager · TelephonyManager · TelephonyManager · TelephonyManager

에뮬레이터 탐지 · 없음 · 없음 · 없음 · 있음

12.2 Golden 패밀리 특성

Golden은 새로운 독립 패밀리로 분류할 근거가 있다:

1. ApkControlFlowConfusion 보호 — 214개 앱 중 유일

2. Unicode 아랍문자 난독화 — 기존 패밀리에서 미확인

3. WorkManager 기반 이미지 업로드 — 대부분의 악성앱이 직접 HTTP 사용

4. Glide 이미지 라이브러리 — 이미지 처리 특화

5. "Nongfu" 테마명 — 중국 브랜드 참조 (중국 제작 추정)

6. versionCode 945 — 매우 높은 버전 코드 (장기 개발/운영)

제안 패밀리명: golden_cfconfusion 또는 nongfu_stealer

14. 혁신 점검

```

혁신 점검:

· 새 아이디어/시도:

1. ApkControlFlowConfusion 보호 기술의 5가지 난독화 기법 체계적 분류

2. "Polyglot Decryptor Mapping" 기법 — 다형적 복호화 함수 분산 패턴 분석 프레임워크

3. "Namespace Hijack Detection" 기법 — 정상 패키지 내 악성 클래스 탐지 방법론

4. short[] 배열 구조에서 URL 길이 추정 (배열 크기 / 평균 URL 길이)

· 결과: 부분 성공

· 5가지 난독화 기법 분류 완료

· 데이터 모델 완전 복원 (NewaContent, NewaDevice)

· C2 URL은 동적 분석 필요 (정적 한계)

· 기법 카탈로그 반영:

· [RE-013] Polyglot Decryptor Mapping — 정식 등재 완료

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