비밀톡 상세 분석 보고서

비밀톡 (app_2146) 악성앱 심층 분석 보고서

분석 일시: 2026-02-20

분석자: 주식회사 아크링크 (Deep-Coding 보안연구소)

APK: 250105 _ 비밀톡, 7777, Secrat.apk

패키지명: com.ruuqing.rpwhk

SHA256: cd41e792cd11a4770c2e88c2ccbf1c1b930d40f0b5ef476db367596a5fdc4c7a

1. 앱 기본 정보

항목 · 값

앱 이름 · 비밀톡

패키지명 · com.ruuqing.rpwhk

버전 · 1.2.5 (versionCode 135)

파일 크기 · 27.1 MB

프레임워크 · UniApp (DCloud)

Vue 버전 · 3

컴파일러 · UniApp 4.24

UniApp ID · __UNI__2DCBB04

배포 채널 · 360 (중국 앱스토어)

minSdk · 21 (Android 5.0)

targetSdk · 35 (Android 15)

위협 수준 · **EXTREME**

2. 악성 아키텍처

```

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

비밀톡 APK 구조

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

[1] PandoraEntry (스플래시)

[2] PandoraEntryActivity (WebView 컨테이너)

[3] WebView 로드

src="[비공개]

(GitHub 사칭 타이포스쿼팅 도메인)

[4] 원격 서버 -> 가짜 채팅 UI 제공

[5] JS Bridge -> 네이티브 API 호출

- 연락처 읽기 (ContactsFeatureImpl)

- 카메라 접근 (CameraFeatureImpl)

- GPS 위치 (GeolocationFeatureImpl)

- 파일 업로드 (UploadFeature)

- 오디오 녹음 (AudioFeatureImpl)

[6] 탈취 데이터 -> C2 서버 전송

[별도] 39285EFA.dex (암호화 페이로드)

lib39285EFA.so (네이티브 복호화기)

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

```

3. C2 서버 분석

주요 C2 서버

URL · 역할 · 출처

`[비공개] · **메인 C2** - WebView 로드 대상 · `app-service.js`

타이포스쿼팅 분석

· 실제 도메인: [비공개]

· 사칭 대상: [비공개]

· 차이점: github -> githud (d와 b의 시각적 유사성 이용)

· TLD: .cam (카메룬이 아닌 카메라 관련 gTLD)

· 경로: /rpwhk/ (패키지명 com.ruuqing.rpwhk의 suffix와 일치)

DCloud 프레임워크 내장 URL (비악성)

· `[비공개] - DCloud 통계

· `[비공개] - DCloud 리소스 검증

· `[비공개] - DCloud 단축 URL

코드 증거

```javascript

// app-service.js (line 1)

e.createElementVNode("web-view", {src: "[비공개])

```

4. 권한 분석 (25개)

극고위험 (Red) - 6개

권한 · 악용 목적

`SEND_SMS` · 유료 SMS 발송, 피싱 문자 발송

`RECEIVE_SMS` · 인증코드 도청, SMS 감시

`READ_SMS` · 전체 문자 내역 탈취

`RECEIVE_MMS` · MMS 감시

`RECEIVE_WAP_PUSH` · WAP Push 감시

`INSTALL_PACKAGES` · 추가 악성앱 무단 설치

고위험 (Orange) - 7개

권한 · 악용 목적

`READ_CONTACTS` · 연락처 전체 탈취

`WRITE_CONTACTS` · 연락처 조작/변조

`ACCESS_FINE_LOCATION` · 정밀 GPS 위치 추적

`ACCESS_COARSE_LOCATION` · 대략적 위치 추적

`ACCESS_BACKGROUND_LOCATION` · 백그라운드 지속 위치 추적

`CAMERA` · 무단 촬영

`READ_PHONE_STATE` · IMEI/전화번호 수집

중위험 (Yellow) - 7개

권한 · 악용 목적

`READ_EXTERNAL_STORAGE` · 파일 탈취

`WRITE_EXTERNAL_STORAGE` · 파일 변조

`READ_MEDIA_IMAGES` · 사진 탈취

`READ_MEDIA_VIDEO` · 영상 탈취

`REQUEST_INSTALL_PACKAGES` · 앱 설치 요청

`GET_ACCOUNTS` · 계정 정보 수집

`READ_MEDIA_VISUAL_USER_SELECTED` · 선택적 미디어 접근

5. 데이터 탈취 메커니즘

5.1 기기 정보 수집

수집 항목 · 구현 클래스 · smali 코드 위치

IMEI · `TelephonyManager.getDeviceId()` · `io/dcloud/h/a/d/b/d.smali:1004`

IMSI · `TelephonyUtil.getIMSI()` · `io/dcloud/common/util/TelephonyUtil.smali:738`

SIM 시리얼 · `getSimSerialNumber()` · `io/dcloud/h/a/d/b/d.smali:549`

기지국 위치 · `getCellLocation()` · `io/dcloud/h/a/d/b/f.smali:252`

통신사 · `getNetworkOperator()` · `io/dcloud/h/a/d/b/i.smali:522`

SIM 교체 감지 · `EVENTS_IMSI_CHANGE` · `io/dcloud/common/constant/AbsoluteConst.smali:84`

5.2 개인정보 수집 (JS Bridge)

대상 · 네이티브 구현 · 설정 파일

연락처 · `ContactAccessorImpl` (30+ ContactsContract 호출) · `dcloud_properties.xml`

카메라 · `CameraFeatureImpl` · `dcloud_properties.xml`

GPS 위치 · `GeolocationFeatureImpl` · `dcloud_properties.xml`

갤러리 · `GalleryFeatureImpl` · `dcloud_properties.xml`

오디오 · `AudioFeatureImpl` · `dcloud_properties.xml`

파일 · `FileFeatureImpl` · `dcloud_properties.xml`

5.3 데이터 전송

방식 · 구현 · 설명

파일 업로드 · `UploadFeature` / `UploadNetWork` · DCloud 네이티브 업로더

HTTP 요청 · `XMLHttpRequestFeature` · JavaScript 브릿지

OkHttp · `dc.squareup.okhttp3.*` · 커스텀 OkHttp 클라이언트

6. 방어기제

6.1 에뮬레이터 탐지

· 구현: EmulatorCheckUtil.emulatorCheck()

· 탐지 대상: BlueStacks (com.bluestacks.home), MicroVirt/MuMu (com.microvirt.guide)

· 방법: 패키지 존재 확인, gsm.version.baseband 값 검사, ro.product.board 검사

· 코드: io/dcloud/common/util/emulator/EmulatorCheckUtil.smali

6.2 루트 탐지

· 구현: SecuritySupport.isRoot() -> DeviceInfo.hasRootPrivilege()

· 코드: io/dcloud/common/adapter/util/SecuritySupport.smali:35

6.3 SSL 인증서 검증 바이패스

· 구현: DCloudTrustManager.getHostnameVerifier()

· 방법: ALLOW_ALL_HOSTNAME_VERIFIER 사용 -> 모든 SSL 인증서 수락

· 결과: MITM(중간자 공격) 취약

· 코드: io/dcloud/common/adapter/util/DCloudTrustManager.smali:60

6.4 암호화 페이로드

· 파일: assets/39285EFA.dex (71,500 bytes)

· 복호화기: lib/arm64-v8a/lib39285EFA.so

· Magic: cf 77 4c c7 9b 21 01 cd (비표준 - 커스텀 암호화)

· 목적: 추가 악성 기능을 런타임에만 로드하여 정적 분석 회피

7. 가짜 개인정보 처리방침

androidPrivacy.json 분석

```json

{

"prompt": "none", // 동의 팝업 비활성화

"title": "服务协议和隐私政策", // 중국어 제목

"buttonAccept": "同意并接受", // "동의 및 수락"

"buttonRefuse": "暂不同意" // "일시 비동의" (앱 종료됨)

}

```

· 언어: 중국어 (한국 사용자 대상 앱인데 중국어 정책)

· 정책 링크: href="" -- 빈 링크 (실제 문서 없음)

· 동의 팝업: "none" -- 비활성화

· 거부 시: disagreeMode.support: false -- 거부 불가, 앱 종료

8. UniApp 프레임워크 분석

앱 구조

· 단일 페이지 앱: pages/index/index -> WebView 1개

· 실제 코드량: app-service.js 1줄 (모든 로직은 원격 서버)

· app-config.js: 빈 파일 (function(){})();

· 의미: 앱 자체는 빈 껍데기, C2 서버가 모든 것을 제어

DCloud 설정

· authority="*" -- 모든 도메인에서 네이티브 브릿지 호출 가능

· usesCleartextTraffic="true" -- HTTP 평문 통신 허용

· uniStatistics.enable: false -- DCloud 통계 비활성화 (추적 회피)

9. IOC (침해 지표)

도메인

· [비공개] (C2 서버)

URL

· `[비공개] (WebView 로드 URL)

패키지

· com.ruuqing.rpwhk

해시

· SHA256: cd41e792cd11a4770c2e88c2ccbf1c1b930d40f0b5ef476db367596a5fdc4c7a

파일

· assets/39285EFA.dex (암호화 페이로드)

· lib/arm64-v8a/lib39285EFA.so (네이티브 복호화기)

UniApp ID

· __UNI__2DCBB04

광고 ID

· 128115300007 (360 채널)

10. 동적 분석 (에뮬레이터)

10.1 분석 환경

항목 · 값

에뮬레이터 · Android 15 (SDK 35, x86_64 + ARM 번역)

AVD · DeepCoding_API35 (Pixel 6, Google Play Store)

ADB · v35.0.2

분석 일시 · 2026-02-20

> 참고: 이 앱은 앱플레이어 X (LDPlayer Android 9 미호환)으로 분류되어 있었으나,

> Android 15 에뮬레이터(ARM 번역 지원)에서 정상 설치 및 실행됨.

10.2 실행 결과

설치

· adb install → Success (ARM→x86 번역으로 arm64-v8a 네이티브 라이브러리 실행)

· lib39285EFA.so 정상 로드 확인 (암호화 DEX 복호화기)

스플래시 화면 (0~10초)

· 자물쇠 아이콘 + "비밀톡" 텍스트 + 로딩 스피너

· screenshot_04_splash.png, screenshot_05_loading.png 참조

· 스플래시 모드: __splash_mode__=auto

· 스플래시 종료 로그: Html5Plus-SplashClosed

WebView 로드 실패 (10초~)

· C2 서버 [비공개] → DNS 해제됨 (ping: unknown host)

· WebView가 빈 흰 화면만 표시

· screenshot_06_webview.png, screenshot_07_final.png 참조

· curl 응답 없음 → 서버 완전 다운

10.3 에뮬레이터 탐지

```

W libc: Access denied finding property "qemu.hw.mainkeys"

W m.ruuqing.rpwhk: type=1400 audit: avc: denied { read } for name="u:object_r:qemu_hw_prop:s0"

scontext=u:r:untrusted_app:s0 tcontext=u:object_r:qemu_hw_prop:s0 tclass=file permissive=0

```

· qemu.hw.mainkeys 프로퍼티 읽기 시도 → SELinux가 차단

· Android 15의 강화된 SELinux 정책으로 에뮬레이터 프로퍼티 접근 불가

· 결과: 에뮬레이터 탐지 우회 없이 정상 실행됨 (탐지 실패 시 크래시하지 않음)

10.4 권한 요청 준비

```

E shutao: pass _permissionEle=[camera, contacts, geolocation, uninview]

```

· 앱이 요청하려던 권한: 카메라, 연락처, 위치, UniView

· C2 서버 다운으로 실제 권한 요청 팝업은 표시되지 않음

10.5 네이티브 라이브러리 로드

라이브러리 · 상태 · 용도

`lib39285EFA.so` · ✅ 로드 성공 · 암호화 DEX 복호화

`libweexcore.so` · ✅ 로드 성공 · Weex 렌더링 엔진

`libweexjss.so` · ✅ 로드 성공 · Weex JS 엔진

`libweexjsb.so` · ❌ IPC 타임아웃 · Weex JS 브릿지 (ARM 번역 문제)

`libbreakpad-core.so` · ✅ 로드 성공 · 크래시 리포트

`libc++_shared.so` · ✅ 로드 성공 · C++ 표준 라이브러리

10.6 WeexCore 에러

```

E WeexCore: WeexJSConnection catch: spinWaitPeer timeout

E WeexCore: IPCException server spinWaitPeer timeout

E WeexCore: JSFramwork init start sender is null

E weex: [WXBridgeManager] invokeInitFramework ExecuteJavaScript fail

```

· ARM→x86 번역 환경에서 WeexCore IPC 통신 타임아웃

· Weex 프레임워크 초기화 실패 (앱 동작에는 영향 없음 - WebView 기반)

10.7 스크린샷 목록

파일 · 시점 · 내용

`screenshot_04_splash.png` · 실행 후 2초 · 스플래시 (자물쇠+비밀톡+로딩)

`screenshot_05_loading.png` · 실행 후 5초 · 스플래시 지속

`screenshot_06_webview.png` · 실행 후 10초 · 스플래시 지속

`screenshot_07_final.png` · 실행 후 30초 · 흰 화면 (C2 서버 미응답)

10.8 동적 분석 결론

· 앱 자체는 정상 동작 - 에뮬레이터 탐지 우회 불필요

· C2 서버([비공개]) 완전 다운 → 앱의 모든 기능이 원격 서버 의존

· 서버 다운 = 앱 무력화 → WebView 래퍼형 악성앱의 전형적 특성

· 서버가 살아있었다면: 권한 요청(카메라/연락처/위치) → 가짜 채팅 UI → 데이터 탈취 흐름

11. 암호화 페이로드 복호화 (Phase 12)

11.1 39285EFA.dex 복호화 성공

항목 · 값

암호화 파일 · `assets/39285EFA.dex`

파일 크기 · 71,500 bytes

암호화 매직 · `cf 77 4c c7 9b 21 01 cd`

**복호화 키** · **`AB 12 34 CD`** (4바이트 XOR)

복호화 방법 · 전체 파일 XOR (키 반복 적용)

DEX 버전 · `dex\n035`

복호화 검증 · 헤더 크기 112 (0x70) ✅, 파일 크기 일치 ✅

11.2 키 도출 과정

```

암호화 바이트: cf 77 4c c7 9b 21 01 cd

DEX 매직: 64 65 78 0a 30 33 35 00

XOR 결과: AB 12 34 CD AB 12 34 CD ← 4바이트 키 반복 확인!

```

키 AB1234CD는 바이트 0-3과 4-7에서 동일 → 4바이트 XOR 키 확정

11.3 복호화된 DEX 분석

항목 · 값

클래스 수 · **100개**

메서드 수 · **201개**

문자열 수 · **764개**

SHA256 · `13502356b7d3f910107aeff131e9c4a2b892744a125a2d1a2a206b219dc36042`

11.4 복호화된 DEX 주요 내용 - MIIT MDID SDK

MIIT: 중국 공업정보화부(Ministry of Industry and Information Technology)

MDID: Mobile Device Identifier (모바일 기기 식별자)

복호화된 DEX는 중국 정부 공인 기기 식별 SDK로, 다음 제조사별 기기 ID를 수집:

제조사 · 서비스 · 식별자

Samsung · DeviceIdService · OAID

Huawei · OpenDeviceId · OAID

Xiaomi · - · OAID

OPPO · IOpenID/IdentifyService · OAID

Vivo · - · OAID

ASUS · SupplementaryDID · SDID

ZUI (Lenovo) · IDeviceidInterface · Device ID

Coolpad · - · Device ID

주요 발견 문자열:

· Sending 'GET' request to URL : → HTTP GET 요청 전송

· Sending 'POST' request to URL : → HTTP POST 요청 전송

· `[비공개] → OAID 통계 서버 전송

· com.bun.miitmdid.core.MdidSdk → SDK 메인 클래스

· Samsung_DeviceIdService → 삼성 기기 ID 서비스

11.5 분석 도구

스크립트: decrypt_39285EFA.py

· XOR 키 브루트포스 (1/2/4바이트)

· 매직 바이트 기반 키 자동 도출

· Jiagu 특화 복호화 시도 (헤더 XOR, 롤링 XOR)

· DEX 헤더 파싱 및 문자열 추출

13. C2 서버 전체 URL 추출 (Phase 15)

13.1 추출 결과 요약

구분 · 수량

URL · **37개**

도메인 · **68개**

IP · **1개**

13.2 위험도별 URL 분류

CRITICAL (C2/데이터 탈취)

URL · 소스 파일

`[비공개] · `app-service.js` (WebView 메인 로드)

HIGH (API/서버 통신)

URL · 용도

`[비공개] · 중국 OAID 통계 서버 (기기 식별 전송)

`[비공개] · QQ 지도 API (위치 추적)

`[비공개] · QQ 지도 경로 계획

MEDIUM (프레임워크 관련)

· `[비공개] - DCloud 앱 배포

· `[비공개] - 리치 텍스트 에디터

· `[비공개] - Vue.js 에러 참조

· [비공개] / [비공개] - 로컬 통신

13.3 타이포스쿼팅 분석

```

실제 도메인: [비공개]

사칭 대상: [비공개]

기법: 문자 치환 (b→d) + TLD 변경 (.com→.cam)

시각적 유사도: 매우 높음 (githud ≈ github)

.cam TLD: 카메라 관련 gTLD (카메룬 .cm과 다름)

```

13.4 분석 도구

스크립트: extract_c2_urls.py

· 4단계 스캔 (decompiled, decrypted, assets, native)

· URL/도메인/IP 자동 추출 및 위험도 분류

14. smali 호출 체인 분석 (Phase 16)

14.1 전체 코드 규모

항목 · 수량

smali 파일 · **12,998개**

클래스 · **12,898개**

메서드 · **86,806개**

위험 API 호출 · **548개**

14.2 위험 API 호출 통계

API · 설명 · 호출 수

`HttpURLConnection` · HTTP 통신 · **187개**

`ContentResolver` · 콘텐트 프로바이더 접근 · **171개**

`loadLibrary` · 네이티브 라이브러리 로드 · **37개**

`isRoot` · 루트 탐지 관련 · **34개**

`getOutputStream` · 데이터 전송 · **24개**

`openConnection` · URL 연결 · **19개**

`emulatorCheck` · 에뮬레이터 탐지 · **15개**

`checkServerTrusted` · SSL 검증 · **12개**

`loadDex` · DEX 동적 로드 · **8개**

기타 · 권한/기기 정보 등 · **41개**

14.3 핵심 호출 체인

```

PandoraEntry (런처)

→ WebAppActivity

→ io.dcloud.common.util.AppRuntime.loadDex()

→ JLibrary.InitEntry()

→ System.loadLibrary("39285EFA")

→ lib39285EFA.so JNI_OnLoad()

→ _Init_()

→ XorArray() [DEX 복호화]

→ __LoadDexHigh() [DEX 인메모리 로드]

→ RootDetect() [루트 탐지]

→ XposedApp() [Xposed 탐지]

→ WebView.loadUrl("[비공개])

→ JS Bridge 활성화

→ camera, contacts, geolocation, uninview 권한 요청 준비

```

14.4 데이터 탈취 호출 체인

```

C2 서버 JavaScript → JS Bridge

→ io.dcloud.feature.contacts.ContactAccessorImpl

→ ContentResolver.query(ContactsContract.Contacts)

→ 연락처 전체 읽기

→ io.dcloud.feature.camera.CameraFeatureImpl

→ Camera.open() / MediaRecorder

→ 카메라 촬영/녹화

→ io.dcloud.feature.geolocation.GeolocationFeatureImpl

→ LocationManager.requestLocationUpdates()

→ GPS 위치 실시간 추적

→ [비공개].FileFeatureImpl

→ 파일 시스템 접근

→ io.dcloud.feature.audio.AudioFeatureImpl

→ 음성 녹음

→ DCloudTrustManager (SSL 바이패스)

→ 모든 HTTPS 통신 무검증

→ UploadFeature / UploadNetWork

→ C2 서버로 탈취 데이터 전송

```

14.5 분석 도구

스크립트: smali_call_tracer.py

· 12,998개 smali 파일 자동 파싱

· 위험 API 호출 자동 탐지 (22개 API 패턴)

· 역방향 호출 체인 추적 (최대 5단계)

15. Frida 동적 후킹 스크립트 (Phase 13)

15.1 후킹 대상

대상 · 후킹 방법 · 목적

`XorArray` · Native Interceptor · DEX 복호화 데이터 캡처

`__LoadDexLow` · Native Interceptor · DEX 로드 과정 추적

`__LoadDexHigh` · Native Interceptor · DEX 로드 과정 추적

`__Start_Load_jar__` · Native Interceptor · JAR 로드 추적

`RootDetect` · Native Replace · 루트 탐지 바이패스 (return 0)

`XposedApp` · Native Replace · Xposed 탐지 바이패스 (return 0)

`EmulatorCheckUtil` · Java Replace · 에뮬레이터 탐지 바이패스

`SecuritySupport` · Java Replace · 시뮬레이터/루트 바이패스

`DexClassLoader` · Java Hook · 동적 DEX 로드 캡처

`InMemoryDexClassLoader` · Java Hook · 인메모리 DEX 캡처

`URL.$init` · Java Hook · 네트워크 요청 모니터링

`mmap` · Native Interceptor · 메모리 매핑 DEX 캡처

`dlopen` · Native Interceptor · SO 로드 감지

`TelephonyManager` · Java Hook · 기기 정보 수집 모니터링

`ContentResolver.query` · Java Hook · 연락처/SMS 접근 모니터링

스크립트: frida_dump_dex.js

15.2 사용법

```bash

frida -U -f com.ruuqing.rpwhk -l frida_dump_dex.js --no-pause

```

16. 가짜 C2 서버 (Phase 15)

16.1 목적

C2 서버([비공개])가 다운된 상태에서 앱의 실제 동작을 관찰하기 위한 로컬 시뮬레이션 서버

16.2 기능

· HTTP/HTTPS 듀얼 서버

· 모든 요청 로깅 (메서드, 경로, 헤더, 바디)

· 데이터 탈취 패턴 자동 감지

· 최소 HTML 응답 (앱 WebView가 기대하는 형식)

· 자체 서명 SSL 인증서 생성

16.3 사용법

```bash

1. 에뮬레이터 hosts 설정

adb shell "echo '[비공개] ' >> /etc/hosts"

2. 서버 실행

python fake_c2_server.py

3. 앱 실행 → 가짜 서버 응답 관찰

```

스크립트: fake_c2_server.py

17. 네이티브 라이브러리 전체 목록

17.1 APK 내 SO 파일 (arm64-v8a)

라이브러리 · 크기 · 용도

`lib39285EFA.so` · 154,192 · **JDOG 보호/DEX 복호화**

`libweexjss.so` · 13,547,976 · WeexCore JS 실행 엔진

`libweexcore.so` · 1,808,688 · WeexCore 코어

`libc++_shared.so` · 991,912 · C++ 표준 라이브러리

`libstatic-webp.so` · 580,416 · WebP 이미지 디코더

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

`libbreakpad-core.so` · 305,208 · 크래시 리포트

`liblamemp3.so` · 251,816 · MP3 인코더

`libgifimage.so` · 252,560 · GIF 이미지

`libpl_droidsonroids_gif.so` · 41,024 · GIF 플레이어

`libnative-filters.so` · 30,776 · 이미지 필터

`libdcblur.so` · 10,008 · 블러 효과

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

`libweexjsb.so` · 4,672 · WeexCore JS 바인딩

`libweexjst.so` · 4,672 · WeexCore JS 트레이스

17.2 총 네이티브 코드 크기

아키텍처 · 총 크기 · 용도

arm64-v8a · **18.5 MB** · 64비트 ARM

armeabi-v7a · **12.1 MB** · 32비트 ARM

x86 · **17.6 MB** · 인텔 x86

18. MITRE ATT&CK 매핑

전술 · 기법 · 설명

**Initial Access** · T1444 Masquerade as Legitimate Application · "비밀톡" 메신저 앱으로 위장

**Execution** · T1575 Native Code · lib39285EFA.so 네이티브 코드 실행

**Persistence** · T1398 Boot or Logon Initialization · SIM 변경 이벤트 감시

**Defense Evasion** · T1406 Obfuscated Files · 39285EFA.dex XOR 암호화

**Defense Evasion** · T1407 Download New Code at Runtime · JDOG 동적 DEX 로딩

**Defense Evasion** · T1523 Evade Analysis Environment · 에뮬레이터/루트/Xposed 탐지

**Defense Evasion** · T1516 Input Injection · 인라인 후킹으로 시스템 함수 변경

**Credential Access** · T1409 Access Stored Data · 연락처, SMS, 통화기록 접근

**Discovery** · T1418 Application Discovery · 설치된 앱 목록 검사

**Discovery** · T1426 System Information Discovery · IMEI, IMSI, SIM 시리얼 수집

**Collection** · T1432 Access Contact List · JS Bridge → ContactAccessorImpl

**Collection** · T1412 Capture SMS Messages · SMS 읽기/수신 모니터링

**Collection** · T1429 Capture Audio · AudioFeatureImpl

**Collection** · T1512 Capture Camera · CameraFeatureImpl

**Collection** · T1430 Location Tracking · GeolocationFeatureImpl

**Exfiltration** · T1437 Standard Application Layer Protocol · HTTPS → C2 서버

**Command and Control** · T1437.001 Web Protocols · WebView + JS Bridge C2 통신

**Impact** · T1582 SMS Control · SMS 발송 권한 ([피해자 정보 비공개] 문자 발송 가능)

19. IOC (침해 지표) 전체

19.1 파일 해시

파일 · SHA256

APK 전체 · `cd41e792cd11a4770c2e88c2ccbf1c1b930d40f0b5ef476db367596a5fdc4c7a`

39285EFA.dex (암호화) · `0b9c032080788add7f5989d0ce145e66a4686ff3a43b0e48dec60bf18bf75701`

39285EFA.dex (복호화) · `13502356b7d3f910107aeff131e9c4a2b892744a125a2d1a2a206b219dc36042`

lib39285EFA.so (arm64) · `440167ed88e986b18cb1999f2561f0e3e5d9ef9d160a3bc69dff05950c70146f`

lib39285EFA.so (arm32) · `eb16be49d507fc6b4a31e7bfbf2190906de4d55ffb6cebe1b9eb695fec3f1f2c`

lib39285EFA.so (x86) · `c414464d4eb8a38c4a9958e90a8c64758d65a83c7258fc96f2e44b686feff919`

19.2 네트워크 IOC

유형 · 값 · 설명

C2 도메인 · `[비공개]` · 메인 C2 서버

C2 경로 · `/rpwhk/` · 앱 WebView 로드 경로

OAID 서버 · `[비공개]` · 중국 기기 식별 통계

지도 API · `[비공개]` · QQ 지도 (위치 추적)

19.3 패키지/앱 IOC

유형 · 값

패키지명 · `com.ruuqing.rpwhk`

UniApp ID · `__UNI__2DCBB04`

배포 채널 · 360

광고 ID · 128115300007

앱 버전 · 1.2.5 (빌드 135)

JDOG 키 · `AB1234CD`

JDOG 설정 · `@nagain_l10_liang:com/bun/miitmdid/core/JLibrary`

20. 분석 도구 목록

스크립트 · 용도 · 언어

`decrypt_39285EFA.py` · DEX 암호화 복호화 (XOR 브루트포스) · Python

`frida_dump_dex.js` · Frida 런타임 DEX 덤프 + 탐지 바이패스 · JavaScript

`fake_c2_server.py` · 가짜 C2 서버 시뮬레이션 · Python

`analyze_so_binary.py` · lib39285EFA.so 바이너리 역공학 · Python

`extract_c2_urls.py` · C2 URL/도메인/IP 전체 추출 · Python

`smali_call_tracer.py` · smali 호출 체인 자동 추적 · Python

21. 결론

비밀톡(com.ruuqing.rpwhk)은 JDOG 보호 프레임워크로 무장한 DCloud UniApp 기반 WebView 래퍼형 악성앱입니다.

핵심 위협 요약

1. 25개 위험 권한 요청 (SMS 전체 제어, 카메라, 연락처, 위치, 파일)

2. JDOG 보호 프레임워크 - XOR 암호화(키: AB1234CD), 인라인 후킹, 루트/에뮬레이터/Xposed 탐지

3. GitHub 타이포스쿼팅 - [비공개] ([비공개] 사칭)

4. MIIT MDID SDK - 중국 기기 식별 (OAID/IMEI/IMSI 수집)

5. SSL 인증서 검증 완전 무력화 - CustomTrustMgr + ALLOW_ALL_HOSTNAME_VERIFIER

6. JS Bridge 데이터 탈취 - 연락처, SMS, 카메라, 위치, 파일, 음성 모두 접근

7. 인라인 후킹 - 시스템 함수 변경으로 분석 도구 무력화 가능

8. SIM 교체 감지 - [피해자 정보 비공개] 지속

코드 규모 분석

항목 · 수량

smali 파일 · 12,998개

클래스 · 12,898개

메서드 · 86,806개

위험 API 호출 · 548개

네이티브 라이브러리 · 15개 (3개 아키텍처)

분석 스크립트 · 6개

분석 Phase · 20

동적 분

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