FaaTalk 상세 분석 보고서

FaaTalk (com.etalk.nxt.v2) Quantum-Nano Analysis Report v2.0

보고서 버전: v2.0

분석 일자: 2026-03-04

분석가: ArkLink Corp. 악성앱 분석팀 (Deep_Coding Project)

분류: frezrik_uniapp 패밀리

위협 등급: CRITICAL

APK 파일: 260304_FaaTalk.apk (30MB)

1. Executive Summary (개요)

FaaTalk은 com.etalk.nxt.v2 패키지명으로 배포되는 고도화된 스파이웨어 앱이다. 외형상 메신저 앱으로 위장하였으나, 실제로는 피해자의 연락처, 위치정보, SMS, 사진, 동영상, 설치된 앱 목록, IMEI/기기정보를 체계적으로 수집하여 C2 서버로 전송하는 다단계 데이터 탈취 플랫폼이다.

핵심 발견사항

항목 · 내용

**프레임워크** · DCloud UniApp (HBuilderX 5.01) + Vue 3

**보호 기술** · Frezrik/360 Jiagu (libjiagu.so + 39285EFA.dex)

**C2 Primary** · `[비공개]

**C2 Redirect** · `[비공개]

**C2 Fallback** · `[비공개]

**데이터 탈취** · 연락처, 위치, SMS, 사진, 동영상, 앱 목록, IMEI, 전화번호

**다국어 지원** · 13개 언어 (zh-CN/HK/TW, en, ja, ko, vi, pt-br, es-es, ro-ro, ar-sa)

**권한 수** · 24개 이상 (CAMERA, READ_CONTACTS, ACCESS_FINE_LOCATION 등)

**금융앱 타겟팅** · 한국 주요 은행/증권사/카드사 앱 식별 및 표지 기능

위협 평가

이 앱은 다음과 같은 특징으로 극도로 위험하다:

1. 7단계 순차 데이터 업로드 -- 연락처 -> IMEI -> 앱목록 -> 위치 -> SMS -> 사진 -> 동영상

2. 실시간 SMS 모니터링 -- 로그인 후 지속적으로 새 SMS를 감시하고 업로드

3. 금융앱 식별 시스템 -- 한국 은행(국민, 신한, 우리, 하나, NH 등), 증권사, 카드사 앱을 식별하여 bank: 1 플래그 설정

4. 기기별 우회 전략 -- Vivo, OPPO, OnePlus, Huawei, Xiaomi 등 제조사별 연락처 접근 우회 루틴 보유

5. 초대코드 기반 접근 통제 -- 타겟 피해자만 접근 가능하도록 설계

2. App Architecture (앱 아키텍처)

2.1 기술 스택

```

+-------------------------------------------+

Frezrik/360 Jiagu Packer

+-------------------------------------+

com.stub.StubApp (Loader)

+-------------------------------+

39285EFA.dex (Encrypted DEX)

lib39285EFA.so (Native)

+-------------------------------+

+-------------------------------+

DCloud UniApp Runtime

+-------------------------+

__UNI__GF192B25

+- app-service.js

+- manifest.json

+- pages/index/

+- pages/webview/

+- pages/loading/

+-------------------------+

+-------------------------------+

+-------------------------------------+

+-------------------------------------------+

```

2.2 핵심 컴포넌트

컴포넌트 · 파일 · 역할

**Jiagu Loader** · `com.stub.StubApp` · 앱 엔트리포인트, DEX 복호화 및 로딩

**Encrypted DEX** · `assets/39285EFA.dex` · 실제 Java/Kotlin 코드 (암호화)

**Native Library** · `lib/arm64-v8a/lib39285EFA.so` · DEX 복호화 네이티브 엔진

**Jiagu Assets** · `libjiagu.so`, `libjiagu_a64.so`, `libjiagu_x64.so`, `libjiagu_x86.so` · 아키텍처별 보호 라이브러리

**UniApp Runtime** · `io.dcloud.PandoraEntry` · DCloud 런타임 엔트리

**Business Logic** · `app-service.js` (220,422 bytes) · 모든 악성 로직 포함

**Gallery Plugin** · `vutet-getGalleryImages` (v2.0.4) · 사진 접근 네이티브 플러그인

2.3 앱 실행 흐름

```

1. StubApp.onCreate() -> libjiagu 로딩 -> 39285EFA.dex 복호화

2. PandoraEntry 초기화 -> UniApp 런타임 시작

3. pages/index/index (로그인 화면)

+-- 전화번호 입력

+-- 초대코드 입력 (숫자만 허용: /^\d+$/)

+-- 로그인 버튼

4. API 호출: [비공개] -> C2 구성 수신

5. 권한 요청 체인 시작 (연락처 -> 위치 -> SMS -> 저장소 -> 카메라)

6. 데이터 사전 수집 (prefetch) -> 7단계 업로드

7. pages/loading/loading -> 카운트다운 + WebView 리다이렉트

8. pages/webview/webview -> [비공개] 표시

```

2.4 UniApp 설정 분석

설정 항목 · 값 · 의미

UniApp ID · `__UNI__GF192B25` · 고유 앱 식별자

Compiler Version · `5.01` · HBuilderX 5.01 사용

Vue Version · `3` · Vue 3 런타임

ADID · `4bfb2343b77da50d7a64764e03afd126` · 광고/추적 ID

Channel · `common` · 배포 채널

DCloud IV · `[비공개]77` · DCloud 엔진 버전

Network Timeout · 60,000ms · 모든 네트워크 요청 60초

Upload Timeout · 180,000ms · 파일 업로드 3분

Kernel · `WKWebview` · 웹뷰 렌더링 엔진

minSdkVersion · 28 (Android 9) · 최소 지원 버전

targetSdkVersion · 34 (Android 14) · 타겟 SDK

compileSdkVersion · 35 (Android 15) · 컴파일 SDK

2.5 DCloud Feature Map

dcloud_properties.xml에서 확인된 활성 기능:

Feature · 구현 클래스 · 악용 목적

**Contacts** · `ContactsFeatureImpl` · 연락처 탈취

**Camera** · `CameraFeatureImpl` · 사진 촬영

**Gallery** · `GalleryFeatureImpl` · 갤러리 접근

**Geolocation** · `GeolocationFeatureImpl` · 위치 추적

**Uploader** · `UploadFeature` · 데이터 전송

**File** · `FileFeatureImpl` · 파일 시스템 접근

**Device** · `DeviceFeatureImpl` · 기기 정보 수집

**Invocation** · `Invocation` · Native 브릿지 호출

**Downloader** · `DownloaderFeatureImpl` · 추가 파일 다운로드

**Audio** · `AudioFeatureImpl` · 오디오 접근

**Zip** · `ZipFeature` · 압축/해제

2.6 Supplier Configuration

```json

{

"vivo": { "appid": "100215079" },

"xiaomi": {},

"huawei": {},

"oppo": {}

}

```

Vivo 앱스토어 APP ID (100215079)가 등록되어 있어, Vivo 스토어를 통한 배포 이력 또는 Vivo 기기 최적화를 위한 설정으로 추정된다.

2.7 Native Library 목록 (arm64-v8a)

라이브러리 · 용도

`lib39285EFA.so` · Jiagu DEX 복호화

`libbreakpad-core.so` · Crash 리포팅

`libdcblur.so` · DCloud 블러 효과

`libgifimage.so` · GIF 처리

`libimagepipeline.so` · 이미지 파이프라인

`liblamemp3.so` · MP3 인코딩

`libnative-filters.so` · 네이티브 이미지 필터

`libnative-imagetranscoder.so` · 이미지 변환

`libpl_droidsonroids_gif.so` · GIF 라이브러리

`libstatic-webp.so` · WebP 처리

`libuts-runtime.so` · UTS 런타임

`libweexcore.so` · Weex 코어

`libweexjsb.so` · Weex JS 브릿지

`libweexjss.so` · Weex JS 서비스

`libweexjst.so` · Weex JS 도구

3. Permission Analysis (권한 분석)

3.1 전체 권한 목록

AndroidManifest.xml에서 추출된 권한 (중복 선언 포함 28건):

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

1 · `WRITE_EXTERNAL_STORAGE` · Dangerous · 파일 쓰기

2 · `READ_PHONE_STATE` · Dangerous · IMEI, 전화번호 수집

3 · `READ_EXTERNAL_STORAGE` · Dangerous · 사진/동영상 탈취

4 · `READ_MEDIA_IMAGES` · Dangerous · Android 13+ 이미지 접근

5 · `READ_MEDIA_VIDEO` · Dangerous · Android 13+ 동영상 접근

6 · `READ_MEDIA_VISUAL_USER_SELECTED` · Dangerous · Android 14+ 선택적 미디어

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

8 · `ACCESS_NETWORK_STATE` · Normal · 네트워크 상태 확인

9 · `CAMERA` · Dangerous · 카메라 접근

10 · `ACCESS_WIFI_STATE` · Normal · WiFi 상태/SSID 수집

11 · `INSTALL_PACKAGES` · Signature · 추가 악성앱 설치

12 · `REQUEST_INSTALL_PACKAGES` · Dangerous · 앱 설치 요청 · x2 중복

13 · `CHANGE_NETWORK_STATE` · Normal · 네트워크 상태 변경

14 · `CHANGE_WIFI_STATE` · Normal · WiFi 상태 변경

15 · `VIBRATE` · Normal · 진동 (알림 위장)

16 · `WAKE_LOCK` · Normal · 기기 깨어있기 유지

17 · `FLASHLIGHT` · Normal · 플래시 제어

18 · `MANAGE_EXTERNAL_STORAGE` · Dangerous · 전체 파일 시스템 접근 · Android 11+

19 · `ACCESS_FINE_LOCATION` · Dangerous · GPS 정밀 위치 · x2 중복

20 · `READ_CONTACTS` · Dangerous · 연락처 탈취 · x2 중복

21 · `GET_ACCOUNTS` · Dangerous · 기기 등록 계정 목록 · x2 중복

22 · `READ_PHONE_NUMBERS` · Dangerous · 전화번호 직접 읽기

23 · `READ_PROFILE` · Dangerous · 사용자 프로필

24 · `WRITE_CONTACTS` · Dangerous · 연락처 수정

25 · `ACCESS_COARSE_LOCATION` · Dangerous · 대략적 위치

26 · `CHANGE_BADGE` (Huawei) · Normal · Huawei 뱃지 조작 · 벤더 전용

27 · `BADGE_ICON` (Vivo) · Normal · Vivo 뱃지 조작 · 벤더 전용

28 · `SupplementaryDID.ACCESS` (ASUS) · Normal · ASUS 기기 ID 접근 · 벤더 전용

3.2 권한 위험 분류

```

CRITICAL (데이터 탈취 직결): 13개

READ_CONTACTS, WRITE_CONTACTS, ACCESS_FINE_LOCATION,

ACCESS_COARSE_LOCATION, READ_PHONE_STATE, READ_PHONE_NUMBERS,

CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE,

READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, MANAGE_EXTERNAL_STORAGE,

GET_ACCOUNTS

HIGH (악성 행위 보조): 3개

REQUEST_INSTALL_PACKAGES, INSTALL_PACKAGES, WAKE_LOCK

MEDIUM (환경 정보 수집): 4개

ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE, CHANGE_NETWORK_STATE,

CHANGE_WIFI_STATE

LOW (기능 위장): 4개+

VIBRATE, FLASHLIGHT, CHANGE_BADGE, BADGE_ICON

```

3.3 권한 요청 UI 흐름 (코드 기반 복원)

앱 내 코드 분석 결과, 다음 순서로 권한을 요청한다:

```

1. 연락처 권한 (READ_CONTACTS)

"앱 사용을 위해 연락처 권한이 필요합니다"

+-- 거부 시: 재요청 + contactsPermissionDeniedCount 증가

+-- 2회 거부 시: 시스템 설정 이동 유도

+-- deniedAlways: "설정->앱 관리->본 앱->권한에서 연락처 권한 켜주세요"

2. 위치 권한 (ACCESS_FINE_LOCATION)

3. SMS 권한 (requestSMSPermission)

4. 저장소 권한 (READ_EXTERNAL_STORAGE / MANAGE_EXTERNAL_STORAGE)

+-- requestManageExternalStoragePermission

+-- isExternalStorageManager() 확인

5. 카메라 권한 (CAMERA)

6. 전화 상태 권한 (READ_PHONE_STATE)

```

3.4 기기별 권한 우회 전략

코드에서 발견된 제조사별 특수 처리:

제조사 · 우회 전략 · 관련 코드

**Vivo** · 보안 앱 권한 검사 우회, 지연 재시도 · "vivo 특수 방법", "vivo 기기 권한 검사 실패"

**OPPO** · AddressBook API, OnePlus 디렉토리 확인 · "OPPO 특수 방법으로 획득", "OPPO 주소록 가져오기 실패"

**OnePlus** · 매니저 권한 수동 활성화 안내 · "OnePlus 기기는 권한 관리 확인 권장"

**Huawei** · HwCam 디렉토리 별도 스캔 · "HwCamera" 경로 스캔

**Xiaomi** · 기본 ContentResolver + 지연 재시도 · 표준 방법 + 재시도 로직

**Samsung** · 표준 MediaStore API · 기본 경로

4. C2 Infrastructure (C2 인프라 분석)

4.1 서버 구조

```

+--------------------------------------+

C2 Command & Control

+-- Primary -------------------+

[비공개]

(API Base URL)

+------------------------------+

+-- Redirect ------------------+

[비공개]

/maintenance.html

(WebView 리다이렉트)

+------------------------------+

+-- Fallback ------------------+

[비공개]

(백업 서버)

+------------------------------+

+--------------------------------------+

```

4.2 Primary C2: [비공개]

항목 · 값

프로토콜 · HTTP (평문 -- `usesCleartextTraffic="true"`)

용도 · 데이터 수집 API 서버

구성 획득 · `[비공개]

데이터 업로드 · `/Uploads/*` 엔드포인트 그룹

보안 취약점: HTTP 평문 통신으로 모든 탈취 데이터가 네트워크에서 MITM으로 평문 노출 가능.

4.3 API 엔드포인트 전수 매핑

구성 API

Method · Endpoint · 목적

GET/POST · `[비공개] · 앱 구성 수신 (C2 URL, 업로드 경로 등)

Android 데이터 업로드 API

Method · Endpoint · 목적 · 주요 파라미터

POST · `/Uploads/api` · 연락처 업로드 · `{contacts: [{name, phone}], phone}`

POST · `/Uploads/apiimei` · IMEI/기기정보 업로드 · `{imei, imei2, model, vendor, real_phone, phone}`

POST · `/Uploads/apiapps` · 설치 앱 목록 업로드 · `{apps: [{app_name, package_name, versionName, install_time, bank}]}`

POST · `/Uploads/apimap` · 위치정보 업로드 · `{latitude, longitude}`

POST · `/Uploads/upload` · 사진 업로드 · `multipart/form-data`

POST · `/Uploads/uploadFile` · 동영상/파일 업로드 · `multipart/form-data`

iOS 전용 API

Method · Endpoint · 목적

POST · `/Uploads/iosUpload` · iOS 미디어 업로드

4.4 API 구성 동적 수신

앱은 하드코딩 URL과 서버에서 동적 수신하는 이중 구조를 사용한다:

```javascript

// 코드에서 복원된 API 구성 구조

{

android_api: {

base_url: "[비공개],

api_path: "[비공개],

upload: {

media: "Uploads/upload", // 사진 업로드

contacts: "Uploads/api", // 연락처 업로드

location: "Uploads/apimap", // 위치 업로드

sms: "", // SMS (별도 처리)

apps: "Uploads/apiapps" // 앱 목록 업로드

},

config: "api/config/getAppConfig"

},

ios_api: {

base_url: "[비공개],

api_path: "[비공개],

upload: {

gallery: "Uploads/iosUpload",

uploadFile: "Uploads/uploadFile",

contacts: "Uploads/api",

location: "Uploads/apimap"

}

}

}

```

4.5 Redirect 서버: [비공개]

[비공개]은 "비밀채팅"의 약어로 추정된다. 데이터 업로드 완료 후 WebView에서 `[비공개] 페이지를 표시하여 "점검 중" 화면으로 피해자를 유인한다.

코드 내 로직:

```

pages/loading/loading.vue:35

"使用默认跳转URL: [비공개]

```

4.6 Fallback 서버: [비공개]

`[비공개] C2 서버 다운 시 또는 특정 조건에서 사용되는 백업 URL이다.

5. Data Exfiltration Vectors (데이터 탈취 벡터)

5.1 7단계 순차 업로드 프로세스

앱은 권한 획득 후 다음 7단계를 순차적으로 실행한다 (중국어 로그 메시지 기반 복원):

```

=== 步骤1:上传通讯录 === (연락처 업로드)

-> Uploads/api {contacts: [{name, phone}], phone: user_phone}

=== 步骤2:上传设备信息 === (기기정보 업로드)

-> Uploads/apiimei {imei, imei2, model, vendor, real_phone}

=== 步骤3:上传应用信息 === (앱 목록 업로드)

-> Uploads/apiapps {apps: [{app_name, package_name, versionName, install_time, bank}]}

=== 步骤4:上传位置信息 === (위치정보 업로드)

-> Uploads/apimap {latitude, longitude}

=== 步骤5:上传短信内容 === (SMS 내용 업로드)

-> SMS 데이터 전송

=== 步骤6:上传照片 === (사진 업로드)

-> Uploads/upload multipart/form-data (배치 업로드)

=== 步骤7:上传视频 === (동영상 업로드)

-> Uploads/uploadFile multipart/form-data

```

각 단계 완료 후 "步骤N 완료" 로그를 남기며, 마지막에 "所有数据上传完成" (모든 데이터 업로드 완료) 메시지를 출력한다.

5.2 연락처 수집 (步骤1)

수집 방법 (다중 폴백):

```

1. ContentResolver -> ContactsContract (표준 방법)

2. getAddressBook() -> DCloud Contacts API

3. Vivo 특수 메서드 (보안 앱 우회)

4. OPPO AddressBook API (OPPO/OnePlus 전용)

5. getContactsWithDelayedRetry() (지연 재시도, 최대 N회)

```

수집 데이터 필드:

· name: 이름

· phone: 전화번호 (다중)

· emails: 이메일 주소

· phoneNumbers: 추가 번호 배열

· displayName: 표시 이름 (Vivo 기기)

5.3 기기 정보 수집 (步骤2)

수집 데이터:

```javascript

{

imei: plus.device.imei,

imei2: plus.device.imei2, // Dual SIM

model: plus.device.model,

vendor: plus.device.vendor,

uuid: plus.device.uuid,

real_phone: getLine1Number(), // SIM 등록 전화번호

phone: user_input_phone // 사용자 입력 전화번호

}

```

imei2가 없으면 uuid로 대체: if (!imei2) imei2 = uuid

5.4 설치 앱 수집 (步骤3) -- 금융앱 식별 시스템

앱 목록 수집 시 금융앱 식별 시스템을 통해 각 앱을 분류한다:

금융앱 식별 키워드 (한국어/영어):

```

bank, 은행, pay, 결제, wallet, 지갑, 금융, finance, credit, 신용카드,

loan, 대출, 자산, cash, 현금, banking, payment, financial, money

```

한국 금융기관 식별 키워드:

```

kb(국민), shinhan(신한), woori(우리), hana(하나), nh(농협),

ib(기업), kbank(케이뱅크), saemaul(새마을), post(우체국),

suhyup(수협), sc(SC제일), city(씨티), busan(부산), daegu(대구),

jeonbuk(전북), gwangju(광주)

```

카드사/증권사 식별:

```

samsung(삼성), hyundai(현대), lotte(롯데), bc(비씨),

stock(증권), invest(투자), mirae(미래에셋), kiwoom(키움), ha(하나증권)

```

중국 대형 앱 추적 목록:

```

com.tencent.mm (WeChat), com.taobao.taobao (Taobao),

[비공개].mall (JD), com.sankuai.meituan (Meituan),

com.tencent.tim, com.xunmeng.pinduoduo (PDD),

com.netease.cloudmusic, com.youku.phone

```

시스템/유명 앱 필터링 (업로드 제외):

```

com.qualcomm.*, com.alibaba.*, com.zhihu.*, com.cctv.*,

com.facebook.*, com.linkedin.*, com.xunmeng.*, tv.danmaku.bili,

com.tencent.qqmusic

```

각 앱에 bank: 1 (금융앱) 또는 bank: 0 (일반앱) 플래그를 추가하여 업로드:

```javascript

{ app_name, package_name, versionName, install_time, bank: isBankApp ? 1 : 0 }

```

5.5 위치 추적 (步骤4)

GPS 좌표 (latitude, longitude)를 수집하여 Uploads/apimap으로 전송.

5.6 SMS 수집 + 실시간 모니터링 (步骤5)

SMS 수집은 두 가지 모드로 작동:

1) 일회성 수집: ContentResolver를 통해 기존 SMS 전량 읽기

```

ContentResolver -> SMS inbox query

-> body, _id, date 필드 추출

```

2) 실시간 모니터링: 로그인 후 지속적 감시

```javascript

startSmsMonitoring()

+-- smsMonitorInterval (주기적 체크 타이머)

+-- lastSmsId 저장 (이전 ID 이후 새 SMS만 감지)

+-- checkAndUploadNewSms()

+-- "_id > ?" 쿼리 (새 SMS 감지)

+-- "새 SMS 발견, 업로드 준비"

+-- stopSmsMonitoring() (앱 종료 시)

```

이는 OTP, 인증번호 등 2FA 코드를 실시간으로 탈취하기 위한 목적이다.

5.7 사진 수집 (步骤6)

```

사진 수집 방법 (다중 폴백):

1. MediaStore API (EXTERNAL_CONTENT_URI + INTERNAL_CONTENT_URI)

-> "MediaStore API를 사용하여 N개 이미지 파일 발견"

2. 파일 시스템 스캔 (MediaStore 실패 시 대체)

-> "파일 시스템 스캔을 사용하여 N개 이미지 파일 발견"

3. getPhotosWithRetry() -- 실패 시 재시도

지원 확장자: .jpg, .png, .bmp, .tiff, .tif, .heic, .arw, .dng

업로드: Uploads/upload (multipart/form-data, POST)

파일 크기 0 검사: "파일 크기가 0이므로 업로드 건너뜀"

```

5.8 동영상 수집 (步骤7)

```

동영상 수집:

1. MediaStore Video API (EXTERNAL_CONTENT_URI)

2. 파일 시스템 스캔 (Movies 디렉토리 등)

3. getVideosWithRetry() -- 실패 시 재시도

4. diagnoseVideoAccess() -- 접근 실패 시 진단

지원 확장자: .qt, .flv 등

파일 복사: [비공개].FileOutputStream 사용

업로드: Uploads/uploadFile (multipart/form-data, POST, timeout 180초)

```

5.9 Prefetch 패턴

앱은 prefetchedData 객체에 모든 데이터를 사전 수집한 후 일괄 업로드한다:

```javascript

prefetchedData = {

contacts: null, // 연락처 배열

location: null, // GPS 좌표

sms: null, // SMS 내용

photos: [], // 사진 경로 배열

videos: [], // 동영상 경로 배열

apps: [], // 설치 앱 배열

deviceInfo: null // IMEI, 모델, 제조사 등

}

permissionStatus = {

contacts: false,

location: false,

sms: false,

storage: false,

phone_state: false

}

```

6. Defense Mechanisms (방어기제 분석)

6.1 Frezrik/360 Jiagu Packing

항목 · 상세

**Packer** · Frezrik (360 Jiagu 변형)

**암호화 DEX** · `assets/39285EFA.dex`

**Native 복호화기** · `lib/arm64-v8a/lib39285EFA.so`

**Stub 클래스** · `com.stub.StubApp` (Application 서브클래스)

**지원 아키텍처** · ARM32, ARM64, x86, x86_64 (4종)

**DEX 최적화** · `assets/dexopt/baseline.prof`, `baseline.profm`

**Jiagu 마커** · `assets/.jgapp`

6.2 StubApp 분석 요약

StubApp.smali 정적 필드:

· strEntryApplication -- 실제 Application 클래스명

· loadFromLib, needX86Bridge, returnIntern -- 로딩 플래그

· perm (Map<String, Set<String>>) -- 런타임 권한 상태 추적

· 10개 이상 String 정적 필드 (난독화 문자열 저장)

6.3 JavaScript 난독화

app-service.js에서 확인된 난독화 기법:

1. 문자열 배열 인덱싱: S(350), _(456) 등 함수를 통한 간접 참조

2. 변수명 단축: e, o, t, n, i, s, r 등 단일 문자

3. 함수명 난독화: ro(), ao(), co(), go(), eo(), oo() 등

4. 제어 흐름 변환: 삼항 연산자 중첩, 콤마 연산자

5. Eval-Free: eval() 미사용, 모든 로직이 함수 호출 체인

6.4 Anti-Analysis 기법

· .jgapp 파일 -- Jiagu 앱 마커

· x86 브릿지 옵션 (needX86Bridge) -- 에뮬레이터 호환성 제어 가능

· DEX 프로파일 포함 (dexopt) -- ART 최적화 우회

7. Network Communication Analysis (네트워크 통신 분석)

7.1 통신 프로토콜

항목 · 값

**Primary Protocol** · HTTP (평문)

**Cleartext Traffic** · `android:usesCleartextTraffic="true"`

**Request Timeout** · 60,000ms (모든 요청 타입)

**Upload Timeout** · 180,000ms (파일 업로드)

**Upload Method** · POST + multipart/form-data (파일), POST + JSON (메타데이터)

**SSL Pinning** · 미적용

7.2 인증 체계

사용자 식별은 phone 파라미터로만 이루어진다:

· 연락처 업로드: {contacts: [...], phone: "010-**-**"}

· IMEI 업로드: {imei: "...", phone: "010-**-**"}

· 앱 목록: {apps: [...], phone: "010-**-**"}

내부적으로 sjh 키로도 전화번호를 전달하는 코드가 존재 (중국어 "手机号"의 약어).

7.3 완전한 통신 흐름

```

[Phase 1: 구성 획득]

POST [비공개]

+-- Request: {phone, inviteCode}

+-- Response: {base_url, api_path, upload: {...}, redirect_url}

[Phase 2: 사전 수집]

데이터 수집 (기기 로컬) -> prefetchedData 객체에 저장

[Phase 3: 순차 업로드]

POST /Uploads/api -- 연락처

POST /Uploads/apiimei -- IMEI/기기정보

POST /Uploads/apiapps -- 앱 목록 (bank 플래그 포함)

POST /Uploads/apimap -- GPS 위치

(SMS 업로드)

POST /Uploads/upload -- 사진 (배치)

POST /Uploads/uploadFile -- 동영상

[Phase 4: 리다이렉트]

WebView -> [비공개]

[Phase 5: 지속 감시]

smsMonitorInterval -> checkAndUploadNewSms() (주기적)

```

7.4 SSL/TLS 분석

치명적 취약점: C2 서버([비공개])가 HTTP 프로토콜을 사용한다.

· 모든 전송 데이터(연락처, IMEI, 위치, SMS, 사진, 동영상)가 평문으로 전송

· MITM(Man-in-the-Middle) 공격으로 탈취 데이터 중간 가로채기 가능

· usesCleartextTraffic="true" 명시적 설정으로 Android 보안 정책 우회

8. Vulnerability Assessment (취약점 평가)

8.1 SSL/TLS 미적용 (CRITICAL)

분류 · 내용

CWE-319 · Cleartext Transmission of Sensitive Information

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