Red Cat 상세 분석 보고서

RedCat (Red Cat) 악성앱 심층 분석 보고서

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

분석일: 2026-01-25 ~ 2026-02-20

분석자: [비공개] 대표

분석 목적: 피싱/스미싱 [피해자 정보 비공개] 위한 악성앱 심층 분석

보고서 버전: v3.0 (smali 바이트코드 분석 + API 전수 확인)

목차

1. [개요](#1-개요)

2. [Phase 1: 구조 분석](#2-phase-1-구조-분석)

3. [Phase 2: 방어기제 분석 및 우회](#3-phase-2-방어기제-분석-및-우회)

4. [Phase 3: 네트워크 및 C2 서버 분석](#4-phase-3-네트워크-및-c2-서버-분석)

5. [Phase 4: 심층 분석 (데이터 탈취 로직)](#5-phase-4-심층-분석-데이터-탈취-로직)

6. [암호화 체계 분석](#6-암호화-체계-분석)

7. [서드파티 SDK 및 라이브러리 분석](#7-서드파티-sdk-및-라이브러리-분석)

8. [패밀리 분석 (Durian/Wavegrid)](#8-패밀리-분석-durianwavegrid)

9. [IOC (Indicators of Compromise)](#9-ioc-indicators-of-compromise)

10. [위험도 평가 및 피해 시나리오](#10-위험도-평가-및-피해-시나리오)

11. [결론 및 권고사항](#11-결론-및-권고사항)

1. 개요

1.1 분석 목적

본 보고서는 Red Cat 악성앱에 대한 4단계 심층 분석 결과를 정리한 것이다. Red Cat은 Frezrik Jiagu 패커로 보호된 중국 개발 스파이웨어로, 피해자의 연락처, SMS, 이미지, 위치, 스크린샷 등 광범위한 개인정보를 탈취하여 AWS 싱가포르에 위치한 C2 서버로 전송한다.

1.2 분석 범위

항목 · 수치

**DEX 1 클래스** · 7,760개 (프레임워크/라이브러리, 10.18MB)

**DEX 2 클래스** · 5,739개 (악성 앱 코드, 7.28MB)

**앱 고유 클래스** · 216개 (`com.jiazai.mx.durian`)

**네이티브 라이브러리** · 4개 (ARM32/ARM64/x86/x86_64)

**C2 서버** · 3개 (IP 1개 + 도메인 2개)

**탈취 대상 데이터** · 7종 (연락처, SMS, 이미지, 위치, 스크린샷, 기기정보, 앱 목록)

**고유 문자열** · 127,122개

1.3 분석 환경

항목 · 내용

**정적 분석** · APK 디컴파일, DEX 복호화, 문자열 추출

**네이티브 분석** · libjiagu_64.so 역공학 (AES 키 추출)

**도구** · apktool, jadx, Ghidra, Python 커스텀 스크립트

2. Phase 1: 구조 분석

2.1 APK 기본 정보

항목 · 값

**파일명** · 260125_RedCat.apk

**파일 크기** · 16,025,887 bytes (15.3 MB)

**앱 이름** · Red Cat

**외부 패키지명** · `dxvrzpyz.ekgtvtbt.vquvqlv.bomsrwhq` (랜덤 난독화)

**내부 패키지명** · `com.jiazai.mx.durian`

**버전** · 1.1.4 (versionCode: 2)

**Min SDK** · 22 (Android 5.1 Lollipop)

**Target SDK** · 34 (Android 14)

**프레임워크** · Native Android (Kotlin 1.8.10 + Gradle 8.9)

**보호** · Frezrik Jiagu Packer (`com.frezrik.jiagu.StubApp`)

**SHA256** · `d2043a32919fa08ca50f9c8d9bf40076d1e9fee5f0f5681fb20fb4e9912c8afd`

> 패키지명 난독화 분석: 외부 패키지명 dxvrzpyz.ekgtvtbt.vquvqlv.bomsrwhq는 완전 랜덤 생성된 문자열이다. 이는 앱 스토어 검색이나 보안 소프트웨어의 시그니처 기반 탐지를 회피하기 위한 전략이다. 실제 내부 패키지명 com.jiazai.mx.durian에서 "jiazai"(加载, Loading)는 중국어 로딩을 의미하며, "durian"은 과일 이름으로 코드네임에 해당한다.

2.2 서명 분석

```

Owner: CN=xzlm, OU=ue1769274899423, O=wr1769274899423, L=beijing, ST=beijing, C=beijing

Issuer: CN=xzlm (자가서명)

Serial: 39737dc7

Valid: 2026-01-25 ~ 2076-01-13 (50년)

Algorithm: SHA512withRSA, 4096-bit RSA

SHA256 Fingerprint: D2:ED:40:97:73:96:B7:E8:0A:B9:69:68:52:69:3A:CE:D6:CB:5E:0B:BF:28:A0:30:A3:C5:97:44:A4:33:61:F3

```

서명 포렌식:

· CN=xzlm: 서명자 코드네임. "xzlm"은 "下载联盟"(Download Alliance)의 약자로 추정된다.

· OU=ue1769274899423: Unix 타임스탬프(ms) 기반 자동 생성. 1769274899423ms = 2026-01-24 17:14:59 UTC (서명 생성 시각)

· L=beijing, ST=beijing: 중국 베이징 소재 개발자

· 유효기간 50년: 악성앱의 전형적 패턴으로, 인증서 만료로 인한 앱 동작 중단을 방지하기 위한 설정

· SHA512withRSA, 4096-bit: 불필요하게 강력한 서명 알고리즘 사용. 서명 위조 방지보다는 분석 방해 목적으로 추정

2.3 AndroidManifest.xml 분석

2.3.1 위험 권한 (데이터 탈취 직접 관련)

권한 · 위험도 · 악성 용도

`READ_CONTACTS` · **CRITICAL** · 연락처 전체 탈취 (이름, 전화번호)

`CAMERA` · **CRITICAL** · 무단 카메라 촬영

`READ_EXTERNAL_STORAGE` · **CRITICAL** · 외부 저장소 파일(사진, 문서) 접근

`WRITE_EXTERNAL_STORAGE` · HIGH · 외부 저장소 쓰기 (다운로드 파일 저장)

`READ_MEDIA_IMAGES` · **CRITICAL** · Android 13+ 미디어 이미지 직접 접근

`QUERY_ALL_PACKAGES` · HIGH · 설치된 앱 전체 목록 수집 (금융앱 확인용)

2.3.2 네트워크/시스템 권한

권한 · 악성 용도

`INTERNET` · C2 서버 통신

`ACCESS_NETWORK_STATE` · 네트워크 연결 상태 확인 (전송 타이밍)

`ACCESS_WIFI_STATE` · Wi-Fi 접속 정보 수집

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

`WAKE_LOCK` · 백그라운드 지속 실행 (화면 꺼진 상태에서도)

`POST_NOTIFICATIONS` · 피싱 알림 표시

`VIBRATE` · 알림 진동

`FLASHLIGHT` · 플래시 제어

2.4 앱 컴포넌트

유형 · 이름 · 설명

**Activity** · `MainActivity` · 메인 런처 (로그인/권한 처리, 24개 Lambda)

**Activity** · `MainActivity2` · 보조 메인 (대체 진입점)

**Activity** · `MaintenanceActivity` · 유지보수 화면 (서버 점검 시)

**Activity** · `KefuActivity` · "고객센터" 위장 WebView

**Activity** · `CaptureActivity` · QR 코드 스캔 (ZXing 라이브러리)

**Service** · `MyServices` · **데이터 탈취 백그라운드 서비스** (8개 참조, exported)

**Provider** · `InitializationProvider` · AndroidX Startup 초기화

**Provider** · `OkDownloadProvider` · OkDownload 파일 다운로드 관리

**Receiver** · `ProfileInstallReceiver` · 프로파일 설치

2.5 DEX 구조 (Jiagu Packed)

Red Cat의 classes.dex는 단일 파일이지만 내부에 두 개의 페이로드 DEX를 은닉하고 있다.

```

classes.dex (17,469,832 bytes = 16.7 MB)

├── Stub Layer: 4개 클래스 (Jiagu StubApp loader)

│ ├── com.frezrik.jiagu.StubApp

│ ├── com.frezrik.jiagu.StubApp$1

│ ├── com.frezrik.jiagu.StubApp$2

│ └── com.frezrik.jiagu.StubApp$3

├── [Hidden DEX 1] 10,671,984 bytes (10.18 MB)

│ ├── 클래스: 7,760개

│ ├── 암호화: AES-128-CBC (헤더 512바이트)

│ └── 내용: 프레임워크 및 라이브러리 코드

│ ├── OkHttp3, Retrofit2

│ ├── Glide, Lottie

│ ├── FastJSON (Alibaba)

│ ├── ZXing

│ ├── RxJava2

│ └── AndroidX 라이브러리

└── [Hidden DEX 2] 7,633,032 bytes (7.28 MB)

├── 클래스: 5,739개

├── 암호화: AES-128-CBC + XOR 0x66 이중 인코딩

└── 내용: 실제 악성 앱 코드

└── com.jiazai.mx.durian (216개 클래스)

```

> XOR 0x66 이중 인코딩: 두 번째 DEX는 AES 복호화 후에도 추가로 XOR 0x66 인코딩이 적용되어 있다. 이는 메모리 덤프를 통한 DEX 추출 시에도 바로 사용할 수 없도록 하는 추가 보호층이다. 0x66은 ASCII 'f'에 해당하며, 개발자의 의도적 선택으로 보인다.

2.6 내부 패키지 구조 (`com.jiazai.mx.durian`)

```

com.jiazai.mx.durian/ (216 classes)

├── base/ [기반 클래스]

│ ├── BaseActivity.java - 공통 Activity 기반

│ ├── BaseFragment.java - 공통 Fragment 기반

│ ├── BaseDialogFragment.java - 다이얼로그 기반

│ ├── BaseFullActivity.java - 전체 화면 Activity

│ ├── BaseFullNoStatActivity.java - 상태바 없는 전체 화면

│ ├── BaseTitleActivity.java - 타이틀바 Activity

│ ├── MyApp.java - Application 클래스 (앱 초기화)

│ ├── OkHttpAppGlideModule.java - Glide + OkHttp 통합

│ └── UnsafeOkHttpClient.java - [CRITICAL] SSL 인증서 우회 클라이언트

├── bean/ [데이터 모델]

│ ├── HttpResult.java - HTTP 응답 래퍼

│ ├── LocationBean.java - 위치 정보 데이터 객체

│ └── RejistBean.java - 가입 데이터 ("rejist" = register 오타)

├── customview/ [커스텀 UI]

│ ├── BaseDialog.java - 기본 다이얼로그

│ ├── BaseDialog1.java - 다이얼로그 변형

│ ├── BaseNormalDialog.java - 일반 다이얼로그

│ ├── CustomScrollView.java - 커스텀 스크롤뷰

│ ├── CustomVideoView.java - 비디오 재생

│ ├── DragView.java - 드래그 가능 뷰 (플로팅 버튼)

│ ├── MyRec.java - RecyclerView 커스텀

│ ├── TimingButton.java - 타이머 버튼 (인증코드 대기)

│ ├── TimingButtonLogin.java - 로그인용 타이머 버튼

│ ├── TimingGameButton.java - 게임 UI 위장 버튼

│ ├── GlobalProgressDialog.java - 전역 진행 표시줄

│ └── ToastUtil.java - 토스트 메시지

├── databinding/ [UI 바인딩]

│ ├── ActivityMainBinding.java - 메인 화면 바인딩

│ ├── ActivityMain2Binding.java - 보조 메인 바인딩

│ ├── ActivityMainzhBinding.java - 중국어 메인 바인딩 ("zh" = 중문)

│ ├── ActivityKefuBinding.java - 고객센터 바인딩

│ ├── ActivityLoadingBinding.java - 로딩 화면 바인딩

│ ├── FragmentHomeBinding.java - 홈 프래그먼트

│ ├── FragmentDashboardBinding.java - 대시보드 프래그먼트

│ ├── FragmentNotificationsBinding.java - 알림 프래그먼트

│ ├── DialogUpdateBinding.java - 업데이트 다이얼로그

│ └── DialogNumProgressBinding.java - 숫자 진행 다이얼로그

├── http/ [네트워크 통신]

│ ├── HttpHelper.java - [CRITICAL] API 통신 핵심 클래스

│ ├── SSLSocketClient.java - [CRITICAL] TrustAllManager 내장

│ ├── HeaderInterceptor.java - HTTP 헤더 주입 (기기 정보 등)

│ ├── BaseObserver.java - RxJava 옵저버 기반

│ ├── RxSchedulers.java - 비동기 스케줄러

│ ├── NetUtil.java - 네트워크 유틸

│ ├── CommonLog.java - 로그 출력

│ ├── CacheManager.java - 캐시 관리

│ ├── CacheUtil.java - 캐시 유틸

│ ├── DiskLruCache.java - 디스크 LRU 캐시

│ ├── CommonNoNetCache.java - 오프라인 캐시

│ └── OkhttpCacheInterceptor.java - OkHttp 캐시 인터셉터

├── ui/ [화면 및 서비스]

│ ├── MyServices.java - [CRITICAL] 데이터 탈취 백그라운드 서비스

│ │ (8개 외부 참조, exported=true)

│ ├── home/

│ │ ├── MainActivity.java - [CRITICAL] 핵심 로직 (24개 Lambda)

│ │ │ 권한 요청 -> 데이터 수집 -> C2 전송

│ │ ├── MainActivity2.java - 보조 진입점

│ │ ├── MaintenanceActivity.java - 서버 점검 화면

│ │ ├── HomeFragment.java - 홈 프래그먼트

│ │ ├── HomeViewModel.java - 홈 뷰모델

│ │ └── FullScreenVideoView.java - 전체화면 비디오 (로딩 위장)

│ ├── dashboard/

│ │ ├── DashboardFragment.java - 대시보드 UI

│ │ └── DashboardViewModel.java - 대시보드 로직

│ └── notifications/

│ ├── NotificationsFragment.java - 알림 UI

│ └── NotificationsViewModel.java - 알림 로직

├── utils/ [유틸리티 - 악성 기능 집중]

│ ├── Aes.java - [CRITICAL] AES/ECB/PKCS5Padding

│ ├── AesCBC.java - [CRITICAL] AES/CBC/PKCS5+PKCS7Padding

│ ├── AesUtil.java - [CRITICAL] AES 추가 유틸

│ ├── EmulatorCheck.java - [HIGH] 에뮬레이터 탐지

│ ├── LDNetUtil.java - [HIGH] LDPlayer 특화 탐지

│ ├── ContentUtil.java - [CRITICAL] 연락처 읽기 (ContentResolver)

│ ├── DeviceUtils.java - [CRITICAL] 기기정보 수집 (IMEI, 전화번호, 모델)

│ ├── LocationUtil.java - [CRITICAL] GPS/네트워크 위치 수집

│ ├── Shooter.java - [CRITICAL] 스크린샷 캡처

│ │ ├── Shooter$OnShotListener - 스크린샷 완료 콜백

│ │ └── Shooter$SaveTask - 스크린샷 저장 비동기 태스크

│ ├── ImageUtil.java - 이미지 처리/압축

│ ├── PermissionUtil.java - 권한 요청 래퍼

│ ├── SharedPreferencesUtil.java - 로컬 설정 저장

│ ├── GlideUtil.java - Glide 이미지 로딩

│ ├── GlideRoundImage.java - 원형 이미지 트랜스폼

│ ├── GsonUtil.java - JSON 직렬화

│ ├── Autil.java - 범용 유틸

│ ├── ButtonUtils.java - 버튼 유틸

│ ├── DonwloadSaveImg.java - 이미지 다운로드/저장 ("Download" 오타)

│ ├── DataCleanManager.java - 캐시/데이터 정리

│ ├── CornerTransform.java - 이미지 모서리 라운딩

│ ├── SpanUtils.java - 텍스트 스팬 유틸

│ └── ICallback.java - 콜백 인터페이스

└── web/ [WebView 및 다운로드]

├── KefuActivity.java - "고객센터" 위장 WebView

├── ApkDownLoadListener.java - [HIGH] APK 자동 다운로드/설치 (추가 악성앱)

├── EasonWebChromeClient.java - 파일 선택 지원 WebView

├── FileUtils.java - 파일 유틸

├── UpdateDialog.java - 업데이트 다이얼로그

├── NumProgressDialog.java - 다운로드 진행률 표시

└── ViewExtentionKt.java - Kotlin View 확장 함수

```

3. Phase 2: 방어기제 분석 및 우회

3.1 Jiagu 패커 (Frezrik) - 상세 분석

3.1.1 개요

Red Cat은 Frezrik Jiagu 패커를 사용하여 실제 악성 코드를 런타임에만 복호화하는 보호 기법을 적용하고 있다. 이는 중국산 오픈소스 Jiagu 패커의 변형으로, 정적 분석을 완전히 차단한다.

3.1.2 네이티브 라이브러리

라이브러리 · 아키텍처 · 크기 · 설명

`libjiagu.so` · ARM 32-bit · 129 KB · ARM32 기기 지원

`libjiagu_64.so` · ARM64 · 236 KB · ARM64 기기 지원 (주력)

`libjiagu_x86.so` · x86 · 227 KB · x86 에뮬레이터 지원

`libjiagu_x86_64.so` · x86_64 · 257 KB · x86_64 에뮬레이터 지원

> 4개 아키텍처 모두 지원한다는 것은 에뮬레이터 환경에서도 동작하도록 의도했다는 의미이다. 이는 에뮬레이터 탐지를 별도로 구현한 이유와 연관된다 -- 패커 레벨이 아닌 앱 로직 레벨에서 에뮬레이터를 차단한다.

3.1.3 복호화 함수 체인

libjiagu_64.so 역공학으로 확인된 함수 호출 체인:

```

JNI_OnLoad()

└── native_attach(Context) [진입점]

├── SetEnv() [환경 변수 설정]

├── mprotect() [메모리 보호 변경: RW->RWX]

├── AES_CBC_decrypt_buffer() [DEX 복호화 메인]

│ └── tiny_aes_decrypt_cbc() [AES-128-CBC 구현]

├── load() [복호화된 DEX 로딩 (API < 23)]

├── load23() [복호화된 DEX 로딩 (API >= 23)]

├── register_natives() [네이티브 메소드 등록]

└── uninit() [정리]

```

3.1.4 AES 키/IV 추출 (libjiagu_64.so .rodata)

libjiagu_64.so의 .rodata 섹션에서 추출한 암호화 파라미터:

파라미터 · 값 · 위치

**AES Key** · `bajk3b4j3bvuoa3h` · .rodata offset 0x3A40

**AES IV** · `mers46ha35ga23hn` · .rodata offset 0x3A60

**Algorithm** · AES-128-CBC · 함수 `tiny_aes_decrypt_cbc`

**범위** · 첫 512바이트만 암호화 · Header-only encryption

> Header-only 암호화의 의미: 전체 DEX를 암호화하지 않고 첫 512바이트(헤더)만 암호화한다. 이는 성능과 보호 사이의 타협으로, DEX 매직 넘버(dex\n035\0)와 체크섬, 시그니처를 숨기는 것만으로도 정적 분석 도구의 파싱을 차단할 수 있다. 그러나 이 방식은 나머지 바이트가 평문으로 노출되므로 문자열 추출 등의 분석에는 취약하다.

3.1.5 DEX 복호화 과정

```

[Packed classes.dex]

├── Step 1: StubApp.attachBaseContext() 호출

│ └── System.loadLibrary("jiagu_64")

├── Step 2: native_attach(Context) 실행

│ ├── classes.dex에서 Hidden DEX 1 추출

│ ├── AES-128-CBC로 헤더 512바이트 복호화

│ │ Key: bajk3b4j3bvuoa3h

│ │ IV: mers46ha35ga23hn

│ └── 복호화된 DEX 1을 DexClassLoader로 로딩

├── Step 3: Hidden DEX 2 처리

│ ├── AES-128-CBC로 헤더 복호화 (동일 키/IV)

│ ├── XOR 0x66으로 전체 바이트 디코딩

│ └── 복호화된 DEX 2를 DexClassLoader로 로딩

└── Step 4: 실제 Application 클래스 실행

└── com.jiazai.mx.durian.base.MyApp.onCreate()

```

3.2 에뮬레이터 탐지

3.2.1 EmulatorCheck 클래스

EmulatorCheck.java의 isEmulator() 메소드는 다음 항목을 검사한다:

검사 항목 · 탐지 대상 · 방법

Build.FINGERPRINT · "generic", "unknown" 포함 여부 · 문자열 비교

Build.MODEL · "google_sdk", "Emulator", "Android SDK built for x86" · 문자열 비교

Build.MANUFACTURER · "Genymotion" · 문자열 비교

Build.BRAND · "generic" · 문자열 비교

Build.DEVICE · "generic" · 문자열 비교

Build.PRODUCT · "sdk", "google_sdk", "sdk_x86", "vbox86p" · 문자열 비교

Build.HARDWARE · "goldfish", "ranchu" · 문자열 비교

시스템 속성 · `__system_property_get` (네이티브) · JNI 호출

3.2.2 LDNetUtil 클래스 (LDPlayer 특화 탐지)

일반 에뮬레이터 탐지와 별도로, LDPlayer(뇌전 에뮬레이터) 를 특별히 탐지하는 클래스가 존재한다.

검사 항목 · 탐지 기법

네트워크 인터페이스 · LDPlayer 고유 네트워크 어댑터 확인

시스템 속성 · LDPlayer 관련 `ro.` 프로퍼티 확인

파일 존재 여부 · LDPlayer 고유 파일/디렉토리 확인

> LDPlayer를 특별 탐지하는 이유: LDPlayer는 한국에서 가장 널리 사용되는 안드로이드 에뮬레이터 중 하나이다. 한국인을 타겟으로 하는 이 악성앱이 LDPlayer를 별도로 탐지한다는 것은, 보안 분석가들이 LDPlayer를 이용해 분석하는 것을 인지하고 있다는 의미이다.

3.3 SSL 인증서 우회 (자체 내장)

Red Cat은 스스로 SSL 인증서 검증을 무력화하는 코드를 내장하고 있다. 이는 앱이 어떤 네트워크 환경에서든 C2 서버와 통신할 수 있도록 보장한다.

3.3.1 UnsafeOkHttpClient

```java

// 모든 SSL 인증서를 무조건 신뢰하는 OkHttpClient 생성

public class UnsafeOkHttpClient {

public static OkHttpClient getUnsafeOkHttpClient() {

TrustManager[] trustAllCerts = new TrustManager[]{

new X509TrustManager() {

public void checkClientTrusted(X509Certificate[] chain, String authType) {}

public void checkServerTrusted(X509Certificate[] chain, String authType) {}

public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }

}

};

SSLContext sslContext = SSLContext.getInstance("SSL");

sslContext.init(null, trustAllCerts, new SecureRandom());

// ... OkHttpClient 빌드

}

}

```

3.3.2 SSLSocketClient.TrustAllManager

```java

// X509TrustManager 구현이 모든 인증서를 통과시킴

public static class TrustAllManager implements X509TrustManager {

@Override

public void checkClientTrusted(X509Certificate[] chain, String authType) {

// 검증 없음 - 모든 클라이언트 인증서 허용

}

@Override

public void checkServerTrusted(X509Certificate[] chain, String authType) {

// 검증 없음 - 모든 서버 인증서 허용

}

}

```

3.3.3 Network Security Config

```xml

<!-- AndroidManifest.xml -->

<application android:usesCleartextTraffic="true" ... >

```

> 보안 영향: SSL 인증서 검증을 완전히 비활성화했기 때문에, 이 앱의 모든 HTTPS 통신은 MITM(Man-in-the-Middle) 공격에 취약하다. 역설적으로, 이는 보안 분석가가 Burp Suite 등의 프록시 도구로 트래픽을 가로채기 쉽게 만든다. 앱 개발자는 분석 방지보다 C2 서버와의 안정적 통신을 우선시한 것으로 보인다.

3.4 방어기제 우회 종합 평가

방어기제 · 난이도 · 상태 · 우회 방법

Jiagu 패커 · MEDIUM · **우회 완료** · AES 키/IV 추출 후 DEX 복호화

XOR 0x66 인코딩 · LOW · **우회 완료** · 단순 XOR 디코딩

에뮬레이터 탐지 · LOW · **우회 완료** · Build 속성 변경 또는 smali 패치

LDPlayer 탐지 · LOW · **우회 완료** · 네트워크 속성 스푸핑

SSL Pinning · N/A · **자체 비활성** · 앱이 스스로 SSL 검증 비활성화

4. Phase 3: 네트워크 및 C2 서버 분석

4.1 C2 서버 인프라 (3중 구조)

Red Cat은 3중 C2 서버 구조를 사용하여 단일 서버 차단 시에도 통신을 유지할 수 있다.

```

┌─────────────────────────────┐

│ Red Cat 악성앱 │

└─────────┬───────────────────┘

┌───────────────┼───────────────┐

│ │ │

┌─────────┴──────┐ ┌─────┴──────┐ ┌─────┴──────────────┐

│ Primary C2 │ │ Secondary │ │ Direct IP │

│ ([비공개]) │ │ C2 (전용) │ │ (AWS SG) │

├────────────────┤ ├────────────┤ ├────────────────────┤

│ zhuye.golgol. │ │ ak.sxjoa. │ │ [비공개] │

│ [비공개] │ │ com/ │ │ │

├────────────────┤ ├────────────┤ ├────────────────────┤

│ 무료 도메인 │ │ 전용 도메인 │ │ AWS ap-southeast-1 │

│ 빠른 교체 가능 │ │ 안정적 통신 │ │ 도메인 차단 우회 │

└────────────────┘ └────────────┘ └────────────────────┘

```

4.1.1 Primary C2: [비공개]

항목 · 값

**URL** · `[비공개]

**도메인 유형** · [비공개] 무료 서브도메인

**용도** · C2 리다이렉트, 웹 패널

**특성** · 추적 어려움 (무료 등록, 익명), 빠른 교체 가능

> [비공개] 도메인의 전략적 가치: eu.org는 무료 도메인 등록 서비스로, 실명 인증 없이 도메인을 획득할 수 있다. 악성앱 운영자는 도메인이 차단될 때마다 새 [비공개] 서브도메인을 빠르게 등록하여 C2 인프라를 유지할 수 있다. "zhuye"(主页)는 중국어 "홈페이지"를 의미하며, "golgol"은 코드네임으로 추정된다.

4.1.2 Secondary C2: [비공개]

항목 · 값

**URL** · `[비공개]

**도메인 유형** · 전용 도메인 (.com)

**용도** · 앱 다운로드, 업데이트 배포

**특성** · Primary보다 안정적, 장기 운용 목적

> "sxjoa"는 앱 내에서 반복 등장하는 코드네임이다. URL 경로 /Sxjoa/와 도메인 [비공개]에서 동일한 식별자가 사용되어, 단일 운영 그룹이 관리함을 시사한다.

4.1.3 Direct IP: [비공개]

항목 · 값

**URL** · `[비공개]

**인프라** · AWS EC2 (ap-southeast-1, 싱가포르)

**포트** · 8101 (비표준 HTTP 포트)

**프로토콜** · HTTP (평문, 암호화 없음)

**용도** · 도메인 차단 시 최종 폴백

> AWS 싱가포르 리전 사용은 한국/중국/동남아시아 피해자에 대한 지연시간 최적화 목적이다. 비표준 포트 8101은 기본 포트 차단을 우회하기 위한 선택이다.

4.2 정보 수집 서버

C2 서버와 별도로, 피해자의 IP/위치 정보를 수집하기 위해 합법적인 외부 서비스를 악용한다.

URL · 서비스 · 목적

`[비공개] · Sohu (중국 포털) · 피해자 IP 주소 및 도시 정보 수집

`[비공개] · IP138 (IP 조회 서비스) · IP 주소 조회 및 ISP 정보 확인

`[비공개] · ShareTrace SDK · 앱 설치 경로 추적 (어떤 링크로 설치했는지)

> Sohu cityjson API 악용: `[비공개] 원래 Sohu의 웹 분

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