보고서 버전: v2.0
분석 일자: 2026-03-04
분석가: ArkLink Corp. 악성앱 분석팀 (Deep_Coding Project)
분류: frezrik_uniapp 패밀리
위협 등급: CRITICAL
APK 파일: 260304_FaaTalk.apk (30MB)
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. 초대코드 기반 접근 통제 -- 타겟 피해자만 접근 가능하도록 설계
```
+-------------------------------------------+
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/
+-------------------------+
+-------------------------------+
+-------------------------------------+
+-------------------------------------------+
```
컴포넌트 · 파일 · 역할
**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) · 사진 접근 네이티브 플러그인
```
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 -> [비공개] 표시
```
설정 항목 · 값 · 의미
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
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` · 압축/해제
```json
{
"vivo": { "appid": "100215079" },
"xiaomi": {},
"huawei": {},
"oppo": {}
}
```
Vivo 앱스토어 APP ID (100215079)가 등록되어 있어, Vivo 스토어를 통한 배포 이력 또는 Vivo 기기 최적화를 위한 설정으로 추정된다.
라이브러리 · 용도
`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 도구
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 접근 · 벤더 전용
```
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
```
앱 내 코드 분석 결과, 다음 순서로 권한을 요청한다:
```
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)
```
코드에서 발견된 제조사별 특수 처리:
제조사 · 우회 전략 · 관련 코드
**Vivo** · 보안 앱 권한 검사 우회, 지연 재시도 · "vivo 특수 방법", "vivo 기기 권한 검사 실패"
**OPPO** · AddressBook API, OnePlus 디렉토리 확인 · "OPPO 특수 방법으로 획득", "OPPO 주소록 가져오기 실패"
**OnePlus** · 매니저 권한 수동 활성화 안내 · "OnePlus 기기는 권한 관리 확인 권장"
**Huawei** · HwCam 디렉토리 별도 스캔 · "HwCamera" 경로 스캔
**Xiaomi** · 기본 ContentResolver + 지연 재시도 · 표준 방법 + 재시도 로직
**Samsung** · 표준 MediaStore API · 기본 경로
```
+--------------------------------------+
C2 Command & Control
+-- Primary -------------------+
[비공개]
(API Base URL)
+------------------------------+
+-- Redirect ------------------+
[비공개]
/maintenance.html
(WebView 리다이렉트)
+------------------------------+
+-- Fallback ------------------+
[비공개]
(백업 서버)
+------------------------------+
+--------------------------------------+
```
항목 · 값
프로토콜 · HTTP (평문 -- `usesCleartextTraffic="true"`)
용도 · 데이터 수집 API 서버
구성 획득 · `[비공개]
데이터 업로드 · `/Uploads/*` 엔드포인트 그룹
보안 취약점: HTTP 평문 통신으로 모든 탈취 데이터가 네트워크에서 MITM으로 평문 노출 가능.
Method · Endpoint · 목적
GET/POST · `[비공개] · 앱 구성 수신 (C2 URL, 업로드 경로 등)
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`
Method · Endpoint · 목적
POST · `/Uploads/iosUpload` · iOS 미디어 업로드
앱은 하드코딩 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"
}
}
}
```
[비공개]은 "비밀채팅"의 약어로 추정된다. 데이터 업로드 완료 후 WebView에서 `[비공개] 페이지를 표시하여 "점검 중" 화면으로 피해자를 유인한다.
코드 내 로직:
```
pages/loading/loading.vue:35
"使用默认跳转URL: [비공개]
```
`[비공개] C2 서버 다운 시 또는 특정 조건에서 사용되는 백업 URL이다.
앱은 권한 획득 후 다음 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 완료" 로그를 남기며, 마지막에 "所有数据上传完成" (모든 데이터 업로드 완료) 메시지를 출력한다.
수집 방법 (다중 폴백):
```
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 기기)
수집 데이터:
```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
앱 목록 수집 시 금융앱 식별 시스템을 통해 각 앱을 분류한다:
금융앱 식별 키워드 (한국어/영어):
```
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 }
```
GPS 좌표 (latitude, longitude)를 수집하여 Uploads/apimap으로 전송.
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 코드를 실시간으로 탈취하기 위한 목적이다.
```
사진 수집 방법 (다중 폴백):
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이므로 업로드 건너뜀"
```
```
동영상 수집:
1. MediaStore Video API (EXTERNAL_CONTENT_URI)
2. 파일 시스템 스캔 (Movies 디렉토리 등)
3. getVideosWithRetry() -- 실패 시 재시도
4. diagnoseVideoAccess() -- 접근 실패 시 진단
지원 확장자: .qt, .flv 등
파일 복사: [비공개].FileOutputStream 사용
업로드: Uploads/uploadFile (multipart/form-data, POST, timeout 180초)
```
앱은 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
}
```
항목 · 상세
**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`
StubApp.smali 정적 필드:
· strEntryApplication -- 실제 Application 클래스명
· loadFromLib, needX86Bridge, returnIntern -- 로딩 플래그
· perm (Map<String, Set<String>>) -- 런타임 권한 상태 추적
· 10개 이상 String 정적 필드 (난독화 문자열 저장)
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() 미사용, 모든 로직이 함수 호출 체인
· .jgapp 파일 -- Jiagu 앱 마커
· x86 브릿지 옵션 (needX86Bridge) -- 에뮬레이터 호환성 제어 가능
· DEX 프로파일 포함 (dexopt) -- ART 최적화 우회
항목 · 값
**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** · 미적용
사용자 식별은 phone 파라미터로만 이루어진다:
· 연락처 업로드: {contacts: [...], phone: "010-**-**"}
· IMEI 업로드: {imei: "...", phone: "010-**-**"}
· 앱 목록: {apps: [...], phone: "010-**-**"}
내부적으로 sjh 키로도 전화번호를 전달하는 코드가 존재 (중국어 "手机号"의 약어).
```
[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() (주기적)
```
치명적 취약점: C2 서버([비공개])가 HTTP 프로토콜을 사용한다.
· 모든 전송 데이터(연락처, IMEI, 위치, SMS, 사진, 동영상)가 평문으로 전송
· MITM(Man-in-the-Middle) 공격으로 탈취 데이터 중간 가로채기 가능
· usesCleartextTraffic="true" 명시적 설정으로 Android 보안 정책 우회
분류 · 내용
CWE-319 · Cleartext Transmission of Sensitive Information
본 보고서는 주식회사 아크링크 Deep-Coding 보안연구소가 피싱·몸캠피싱 피해자 구제를 목적으로 작성했습니다. 전체 열람·피해 상담: arklink.co.kr