분석 일시: 2026-02-20
분석자: 주식회사 아크링크 (Deep-Coding 보안연구소)
APK: 250105 _ 비밀톡, 7777, Secrat.apk
패키지명: com.ruuqing.rpwhk
SHA256: cd41e792cd11a4770c2e88c2ccbf1c1b930d40f0b5ef476db367596a5fdc4c7a
항목 · 값
앱 이름 · 비밀톡
패키지명 · 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**
```
+---------------------------------------------+
비밀톡 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 (네이티브 복호화기)
+---------------------------------------------+
```
URL · 역할 · 출처
`[비공개] · **메인 C2** - WebView 로드 대상 · `app-service.js`
· 실제 도메인: [비공개]
· 사칭 대상: [비공개]
· 차이점: github -> githud (d와 b의 시각적 유사성 이용)
· TLD: .cam (카메룬이 아닌 카메라 관련 gTLD)
· 경로: /rpwhk/ (패키지명 com.ruuqing.rpwhk의 suffix와 일치)
· `[비공개] - DCloud 통계
· `[비공개] - DCloud 리소스 검증
· `[비공개] - DCloud 단축 URL
```javascript
// app-service.js (line 1)
e.createElementVNode("web-view", {src: "[비공개])
```
권한 · 악용 목적
`SEND_SMS` · 유료 SMS 발송, 피싱 문자 발송
`RECEIVE_SMS` · 인증코드 도청, SMS 감시
`READ_SMS` · 전체 문자 내역 탈취
`RECEIVE_MMS` · MMS 감시
`RECEIVE_WAP_PUSH` · WAP Push 감시
`INSTALL_PACKAGES` · 추가 악성앱 무단 설치
권한 · 악용 목적
`READ_CONTACTS` · 연락처 전체 탈취
`WRITE_CONTACTS` · 연락처 조작/변조
`ACCESS_FINE_LOCATION` · 정밀 GPS 위치 추적
`ACCESS_COARSE_LOCATION` · 대략적 위치 추적
`ACCESS_BACKGROUND_LOCATION` · 백그라운드 지속 위치 추적
`CAMERA` · 무단 촬영
`READ_PHONE_STATE` · IMEI/전화번호 수집
권한 · 악용 목적
`READ_EXTERNAL_STORAGE` · 파일 탈취
`WRITE_EXTERNAL_STORAGE` · 파일 변조
`READ_MEDIA_IMAGES` · 사진 탈취
`READ_MEDIA_VIDEO` · 영상 탈취
`REQUEST_INSTALL_PACKAGES` · 앱 설치 요청
`GET_ACCOUNTS` · 계정 정보 수집
`READ_MEDIA_VISUAL_USER_SELECTED` · 선택적 미디어 접근
수집 항목 · 구현 클래스 · 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`
대상 · 네이티브 구현 · 설정 파일
연락처 · `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`
방식 · 구현 · 설명
파일 업로드 · `UploadFeature` / `UploadNetWork` · DCloud 네이티브 업로더
HTTP 요청 · `XMLHttpRequestFeature` · JavaScript 브릿지
OkHttp · `dc.squareup.okhttp3.*` · 커스텀 OkHttp 클라이언트
· 구현: EmulatorCheckUtil.emulatorCheck()
· 탐지 대상: BlueStacks (com.bluestacks.home), MicroVirt/MuMu (com.microvirt.guide)
· 방법: 패키지 존재 확인, gsm.version.baseband 값 검사, ro.product.board 검사
· 코드: io/dcloud/common/util/emulator/EmulatorCheckUtil.smali
· 구현: SecuritySupport.isRoot() -> DeviceInfo.hasRootPrivilege()
· 코드: io/dcloud/common/adapter/util/SecuritySupport.smali:35
· 구현: DCloudTrustManager.getHostnameVerifier()
· 방법: ALLOW_ALL_HOSTNAME_VERIFIER 사용 -> 모든 SSL 인증서 수락
· 결과: MITM(중간자 공격) 취약
· 코드: io/dcloud/common/adapter/util/DCloudTrustManager.smali:60
· 파일: assets/39285EFA.dex (71,500 bytes)
· 복호화기: lib/arm64-v8a/lib39285EFA.so
· Magic: cf 77 4c c7 9b 21 01 cd (비표준 - 커스텀 암호화)
· 목적: 추가 악성 기능을 런타임에만 로드하여 정적 분석 회피
```json
{
"prompt": "none", // 동의 팝업 비활성화
"title": "服务协议和隐私政策", // 중국어 제목
"buttonAccept": "同意并接受", // "동의 및 수락"
"buttonRefuse": "暂不同意" // "일시 비동의" (앱 종료됨)
}
```
· 언어: 중국어 (한국 사용자 대상 앱인데 중국어 정책)
· 정책 링크: href="" -- 빈 링크 (실제 문서 없음)
· 동의 팝업: "none" -- 비활성화
· 거부 시: disagreeMode.support: false -- 거부 불가, 앱 종료
· 단일 페이지 앱: pages/index/index -> WebView 1개
· 실제 코드량: app-service.js 1줄 (모든 로직은 원격 서버)
· app-config.js: 빈 파일 (function(){})();
· 의미: 앱 자체는 빈 껍데기, C2 서버가 모든 것을 제어
· authority="*" -- 모든 도메인에서 네이티브 브릿지 호출 가능
· usesCleartextTraffic="true" -- HTTP 평문 통신 허용
· uniStatistics.enable: false -- DCloud 통계 비활성화 (추적 회피)
· [비공개] (C2 서버)
· `[비공개] (WebView 로드 URL)
· com.ruuqing.rpwhk
· SHA256: cd41e792cd11a4770c2e88c2ccbf1c1b930d40f0b5ef476db367596a5fdc4c7a
· assets/39285EFA.dex (암호화 페이로드)
· lib/arm64-v8a/lib39285EFA.so (네이티브 복호화기)
· __UNI__2DCBB04
· 128115300007 (360 채널)
항목 · 값
에뮬레이터 · 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 번역 지원)에서 정상 설치 및 실행됨.
· adb install → Success (ARM→x86 번역으로 arm64-v8a 네이티브 라이브러리 실행)
· lib39285EFA.so 정상 로드 확인 (암호화 DEX 복호화기)
· 자물쇠 아이콘 + "비밀톡" 텍스트 + 로딩 스피너
· screenshot_04_splash.png, screenshot_05_loading.png 참조
· 스플래시 모드: __splash_mode__=auto
· 스플래시 종료 로그: Html5Plus-SplashClosed
· C2 서버 [비공개] → DNS 해제됨 (ping: unknown host)
· WebView가 빈 흰 화면만 표시
· screenshot_06_webview.png, screenshot_07_final.png 참조
· curl 응답 없음 → 서버 완전 다운
```
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 정책으로 에뮬레이터 프로퍼티 접근 불가
· 결과: 에뮬레이터 탐지 우회 없이 정상 실행됨 (탐지 실패 시 크래시하지 않음)
```
E shutao: pass _permissionEle=[camera, contacts, geolocation, uninview]
```
· 앱이 요청하려던 권한: 카메라, 연락처, 위치, UniView
· C2 서버 다운으로 실제 권한 요청 팝업은 표시되지 않음
라이브러리 · 상태 · 용도
`lib39285EFA.so` · ✅ 로드 성공 · 암호화 DEX 복호화
`libweexcore.so` · ✅ 로드 성공 · Weex 렌더링 엔진
`libweexjss.so` · ✅ 로드 성공 · Weex JS 엔진
`libweexjsb.so` · ❌ IPC 타임아웃 · Weex JS 브릿지 (ARM 번역 문제)
`libbreakpad-core.so` · ✅ 로드 성공 · 크래시 리포트
`libc++_shared.so` · ✅ 로드 성공 · C++ 표준 라이브러리
```
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 기반)
파일 · 시점 · 내용
`screenshot_04_splash.png` · 실행 후 2초 · 스플래시 (자물쇠+비밀톡+로딩)
`screenshot_05_loading.png` · 실행 후 5초 · 스플래시 지속
`screenshot_06_webview.png` · 실행 후 10초 · 스플래시 지속
`screenshot_07_final.png` · 실행 후 30초 · 흰 화면 (C2 서버 미응답)
· 앱 자체는 정상 동작 - 에뮬레이터 탐지 우회 불필요
· C2 서버([비공개]) 완전 다운 → 앱의 모든 기능이 원격 서버 의존
· 서버 다운 = 앱 무력화 → WebView 래퍼형 악성앱의 전형적 특성
· 서버가 살아있었다면: 권한 요청(카메라/연락처/위치) → 가짜 채팅 UI → 데이터 탈취 흐름
항목 · 값
암호화 파일 · `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) ✅, 파일 크기 일치 ✅
```
암호화 바이트: 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 키 확정
항목 · 값
클래스 수 · **100개**
메서드 수 · **201개**
문자열 수 · **764개**
SHA256 · `13502356b7d3f910107aeff131e9c4a2b892744a125a2d1a2a206b219dc36042`
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 서비스
스크립트: decrypt_39285EFA.py
· XOR 키 브루트포스 (1/2/4바이트)
· 매직 바이트 기반 키 자동 도출
· Jiagu 특화 복호화 시도 (헤더 XOR, 롤링 XOR)
· DEX 헤더 파싱 및 문자열 추출
구분 · 수량
URL · **37개**
도메인 · **68개**
IP · **1개**
URL · 소스 파일
`[비공개] · `app-service.js` (WebView 메인 로드)
URL · 용도
`[비공개] · 중국 OAID 통계 서버 (기기 식별 전송)
`[비공개] · QQ 지도 API (위치 추적)
`[비공개] · QQ 지도 경로 계획
· `[비공개] - DCloud 앱 배포
· `[비공개] - 리치 텍스트 에디터
· `[비공개] - Vue.js 에러 참조
· [비공개] / [비공개] - 로컬 통신
```
실제 도메인: [비공개]
사칭 대상: [비공개]
기법: 문자 치환 (b→d) + TLD 변경 (.com→.cam)
시각적 유사도: 매우 높음 (githud ≈ github)
.cam TLD: 카메라 관련 gTLD (카메룬 .cm과 다름)
```
스크립트: extract_c2_urls.py
· 4단계 스캔 (decompiled, decrypted, assets, native)
· URL/도메인/IP 자동 추출 및 위험도 분류
항목 · 수량
smali 파일 · **12,998개**
클래스 · **12,898개**
메서드 · **86,806개**
위험 API 호출 · **548개**
API · 설명 · 호출 수
`HttpURLConnection` · HTTP 통신 · **187개**
`ContentResolver` · 콘텐트 프로바이더 접근 · **171개**
`loadLibrary` · 네이티브 라이브러리 로드 · **37개**
`isRoot` · 루트 탐지 관련 · **34개**
`getOutputStream` · 데이터 전송 · **24개**
`openConnection` · URL 연결 · **19개**
`emulatorCheck` · 에뮬레이터 탐지 · **15개**
`checkServerTrusted` · SSL 검증 · **12개**
`loadDex` · DEX 동적 로드 · **8개**
기타 · 권한/기기 정보 등 · **41개**
```
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 권한 요청 준비
```
```
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 서버로 탈취 데이터 전송
```
스크립트: smali_call_tracer.py
· 12,998개 smali 파일 자동 파싱
· 위험 API 호출 자동 탐지 (22개 API 패턴)
· 역방향 호출 체인 추적 (최대 5단계)
대상 · 후킹 방법 · 목적
`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
```bash
frida -U -f com.ruuqing.rpwhk -l frida_dump_dex.js --no-pause
```
C2 서버([비공개])가 다운된 상태에서 앱의 실제 동작을 관찰하기 위한 로컬 시뮬레이션 서버
· HTTP/HTTPS 듀얼 서버
· 모든 요청 로깅 (메서드, 경로, 헤더, 바디)
· 데이터 탈취 패턴 자동 감지
· 최소 HTML 응답 (앱 WebView가 기대하는 형식)
· 자체 서명 SSL 인증서 생성
```bash
adb shell "echo '[비공개] ' >> /etc/hosts"
python fake_c2_server.py
```
스크립트: fake_c2_server.py
라이브러리 · 크기 · 용도
`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 트레이스
아키텍처 · 총 크기 · 용도
arm64-v8a · **18.5 MB** · 64비트 ARM
armeabi-v7a · **12.1 MB** · 32비트 ARM
x86 · **17.6 MB** · 인텔 x86
전술 · 기법 · 설명
**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 발송 권한 ([피해자 정보 비공개] 문자 발송 가능)
파일 · SHA256
APK 전체 · `cd41e792cd11a4770c2e88c2ccbf1c1b930d40f0b5ef476db367596a5fdc4c7a`
39285EFA.dex (암호화) · `0b9c032080788add7f5989d0ce145e66a4686ff3a43b0e48dec60bf18bf75701`
39285EFA.dex (복호화) · `13502356b7d3f910107aeff131e9c4a2b892744a125a2d1a2a206b219dc36042`
lib39285EFA.so (arm64) · `440167ed88e986b18cb1999f2561f0e3e5d9ef9d160a3bc69dff05950c70146f`
lib39285EFA.so (arm32) · `eb16be49d507fc6b4a31e7bfbf2190906de4d55ffb6cebe1b9eb695fec3f1f2c`
lib39285EFA.so (x86) · `c414464d4eb8a38c4a9958e90a8c64758d65a83c7258fc96f2e44b686feff919`
유형 · 값 · 설명
C2 도메인 · `[비공개]` · 메인 C2 서버
C2 경로 · `/rpwhk/` · 앱 WebView 로드 경로
OAID 서버 · `[비공개]` · 중국 기기 식별 통계
지도 API · `[비공개]` · QQ 지도 (위치 추적)
유형 · 값
패키지명 · `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`
스크립트 · 용도 · 언어
`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
비밀톡(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