Telegram 상세 분석 보고서

Telegram (telegram) 양자 나노 분석 보고서

분석 일자: 2026-02-26

보고서 버전: v2.0 — SMS 릴레이 봇넷 + TL 프로토콜 하이재킹 심층 분석

분석 수행: 주식회사 아크링크 ([비공개])

목차

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

2. [앱 기본 정보](#2-앱-기본-정보)

3. [권한 심층 분석](#3-권한-심층-분석)

4. [방어기제 분석](#4-방어기제-분석)

5. [앱 구조 심층 분석](#5-앱-구조-심층-분석)

6. [데이터 수집 로직](#6-데이터-수집-로직)

7. [네트워크 통신 분석](#7-네트워크-통신-분석)

8. [C2 서버 및 통신 아키텍처](#8-c2-서버-및-통신-아키텍처)

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

10. [패밀리 크로스 레퍼런스](#10-패밀리-크로스-레퍼런스)

11. [SMSJobController 심층 분석](#11-smsjobcontroller-심층-분석)

12. [GoogleVoiceClientService 분석](#12-googlevoiceclientservice)

13. [동적 분석 결과](#13-동적-분석-결과)

14. [공격 시나리오 재구성](#14-공격-시나리오-재구성)

15. [기법 점검](#15-🔬-기법-점검)

16. [결론 및 위협 평가](#16-결론-및-위협-평가)

17. [분석 타임라인](#17-분석-타임라인)

1. 분석 개요

1.1 분석 목적

피싱/스미싱 [피해자 정보 비공개] 위한 악성앱 역공학 분석. 데이터 탈취 경로 파악 및

피해 범위 확인을 통해 피해자의 일상 복귀를 지원한다.

1.2 핵심 발견 요약

> 이 앱은 단순한 데이터 탈취 앱이 아니다.

> Telegram v11.5.3 공식 앱을 통째로 복제한 뒤, SMSJobController를 주입하여

> [피해자 정보 비공개] SMS 릴레이 봇넷 노드로 전환한다.

> C2가 지시하는 임의 전화번호로 임의 내용의 SMS를 [피해자 정보 비공개] 발송하며,

> 이는 스미싱 대량 전파, 인증번호 수신, 유료 SMS 과금에 악용된다.

1.3 분석 범위

항목 · 값

총 클래스 · 31,509개 (5 DEX)

네이티브 라이브러리 · 8개 SO 파일

난독화 수준 · 없음 (Telegram 원본 코드 그대로)

주입 코드 · SMSJobController (4,334줄), GoogleVoiceClientService, TL_smsjobs 확장

분석 방법 · 정적 분석 (smali) + 동적 분석 (에뮬레이터)

1.4 분석 환경

도구 · 용도

apktool v2.9+ · APK 디컴파일, 8,737 smali 파일 추출

jadx · DEX → Java 변환

ADB + DeepCoding_API35 에뮬레이터 · 동적 실행 + logcat 수집 (15,234줄)

Deep-Coding Lab 분석 프레임워크 · 패밀리 식별, IOC 추출

Grep/Pattern Analysis · SMSJobController 상태 머신 역공학

2. 앱 기본 정보

항목 · 값

**앱 이름** · Telegram

**패키지명** · org.telegram.messenger.web

**파일명** · 250209 _ Telegram.apk

**파일 크기** · 71.86 MB

**버전** · 11.5.3 (Telegram 공식 클론)

**Min SDK** · 19

**Target SDK** · 34

**SHA256** · db7627bb6da771f5e41fd954dc3dfda04dd52563e4449b52ef32bd539880030d

**프레임워크** · Native Android (Kotlin + EasyHttp)

**패밀리** · Wavegrid Kotlin (Gen1.5+)

**보호** · Emulator Detection + Invitation Code

**위협 등급** · **EXTREME**

3. 권한 심층 분석

3.1 권한 통계

등급 · 수량 · 비율

EXTREME (극도 위험) · 2개 · 2.7%

HIGH (위험) · 15개 · 20.5%

MEDIUM (주의) · 1개 · 1.4%

LOW (일반) · 8개 · 11.0%

**합계** · **73개** · 100%

3.2 위험 권한 상세

EXTREME 등급

권한 · 카테고리 · 위협 설명

`ACCESS_BACKGROUND_LOCATION` · location · 백그라운드 위치 추적 (앱 종료 후에도)

`SEND_SMS` · sms · [피해자 정보 비공개] SMS 발송 — 스미싱 전파

HIGH 등급

권한 · 카테고리 · 위협 설명

`ACCESS_COARSE_LOCATION` · location · 셀룰러/WiFi 대략적 위치

`ACCESS_FINE_LOCATION` · location · GPS 정밀 위치 (10m 정확도)

`CAMERA` · camera · 전/후면 카메라 접근 — 사진/영상 촬영

`READ_CALL_LOG` · phone · 통화 기록 읽기

`READ_CONTACTS` · contacts · 연락처 목록 읽기 — 이름, 전화번호, 이메일 탈취

`READ_EXTERNAL_STORAGE` · files · 외부 저장소 전체 읽기 — 사진, 문서, 다운로드

`READ_MEDIA_AUDIO` · files · 오디오 파일 접근 (Android 13+)

`READ_MEDIA_IMAGES` · files · 사진 갤러리 접근 (Android 13+)

`READ_MEDIA_VIDEO` · files · 동영상 파일 접근 (Android 13+)

`READ_PHONE_NUMBERS` · phone · 전화번호 읽기

`READ_PHONE_STATE` · phone · IMEI, MEID, 전화번호, 통신사 정보

`RECORD_AUDIO` · audio · 마이크 접근 — 녹음 가능

`REQUEST_INSTALL_PACKAGES` · system · APK 설치 요청

`WRITE_CONTACTS` · contacts · 연락처 수정 — 가짜 연락처 주입 가능

`WRITE_EXTERNAL_STORAGE` · files · 외부 저장소 쓰기/수정

3.3 카테고리별 위협 요약

카테고리 · 권한 수 · 위험도 · 탈취 가능 데이터

system · 6개 · HIGH · 시스템 제어

files · 5개 · HIGH · 파일/사진/동영상

location · 3개 · HIGH · GPS 좌표

phone · 3개 · HIGH · IMEI/전화번호

contacts · 2개 · HIGH · 연락처 전체

camera · 1개 · HIGH · 사진/영상

identity · 1개 · MEDIUM · 계정 목록

audio · 1개 · HIGH · 녹음

sms · 1개 · EXTREME · SMS/MMS 전체

3.4 위협 점수

항목 · 값

EXTREME 권한 · 2개 (×10점)

HIGH 권한 · 15개 (×5점)

MEDIUM 권한 · 1개 (×2점)

**총 위협 점수** · **97/180 (53.9%) = HIGH**

4. 방어기제 분석

# · 방어기제 · 상세

1 · **에뮬레이터 탐지** · Build.FINGERPRINT, Build.MODEL, /proc/cpuinfo, TelephonyManager 기반 탐지

2 · **초대코드 인증** · LoginActivity에서 초대코드 입력 필요, 서버 측 검증

4.1 에뮬레이터 탐지

Build.FINGERPRINT, Build.MODEL, /proc/cpuinfo, TelephonyManager 기반 탐지

4.2 초대코드 인증

LoginActivity에서 초대코드 입력 필요, 서버 측 검증

5. 앱 구조 심층 분석

5.1 패키지 구조

· 메인 패키지: org.telegram.messenger.web

· 프레임워크: Native Android (Kotlin + EasyHttp)

· 패밀리: Wavegrid Kotlin (Gen1.5+)

5.2 패밀리 특성

Kotlin 현대화. EasyHttp, MMKV, Luban 등 최신 라이브러리. Coroutines 비동기.

5.3 등록된 서비스

· org.telegram.messenger.GcmPushListenerService

· com.google.android.gms.measurement.AppMeasurementService

· org.telegram.messenger.GoogleVoiceClientService

· org.telegram.messenger.AuthenticatorService

· org.telegram.messenger.ContactsSyncAdapterService

5.4 등록된 리시버

· com.google.android.gms.measurement.AppMeasurementReceiver

· org.telegram.messenger.AutoMessageHeardReceiver

· org.telegram.messenger.CopyCodeReceiver

· org.telegram.messenger.NotificationsDisabledReceiver

· org.telegram.messenger.AutoMessageReplyReceiver

6. 데이터 수집 로직

6.1 탈취 대상 데이터

# · 데이터 유형 · 설명

1 · **call_log** · call_log

2 · **camera** · 카메라 촬영 (사진/영상)

3 · **contacts** · 연락처 (이름, 전화번호, 이메일)

4 · **files** · 저장된 파일 (문서, 다운로드)

5 · **location** · GPS 위치 정보

6 · **phone_info** · 기기 정보 (IMEI, 전화번호, 통신사)

7 · **sms** · SMS 메시지 (발신/수신, OTP 포함)

6.2 ContentResolver 쿼리 대상

· content://com.sonymobile.home.resourceprovider/badge

· content://com.huawei.android.launcher.settings/badge/

· content://(\\d+@)?com\\.whatsapp\\.w4b\\.provider\\.media/export_chat/

· content://(\\d+@)?com\\.whatsapp\\.provider\\.media/export_chat/

· content://com.kakao.talk

· content://com.teslacoilsw.notifier/unread_count

· content://jp\\.naver\\.line\\.android\\.line\\.common\\.FileProvider/export-chat/

· content://com.android.badge/badge

· content://downloads/public_downloads

· content://com.sec.badge/apps?notify=true

6.3 데이터 수집 메서드

메서드 · 설명

`carrier_info` · getNetworkOperatorName() - 통신사 정보 수집

`device_id` · getDeviceId() / getImei() - 기기 고유 ID 수집

`imsi` · getSubscriberId() - IMSI 수집

`phone_number` · 전화번호 수집

6.4 데이터 수집 흐름

```

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

│ 앱 실행 │───→│ 권한 요청 │───→│ 데이터 수집 │

│ (위장 UI) │ │ (연락처/SMS/ │ │ (ContentR- │

│ │ │ 카메라 등) │ │ esolver) │

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

┌─────────────────────────┤

▼ ▼

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

│ 데이터 정제 │ │ 파일 압축 │

│ (JSON 변환) │ │ (이미지 등) │

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

│ │

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

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

│ C2 서버 │

│ [비공개] │

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

```

7. 네트워크 통신 분석

7.1 HTTP 클라이언트

· HttpURLConnection

· EasyHttp

7.2 SSL 구현

SSL 검증 우회 코드가 명시적으로 탐지되지 않았습니다.

별도의 인증서 고정(Certificate Pinning) 없이 기본 SSL 사용 추정.

7.3 암호화 사용

· org.telegram.messenger.MediaController:crypto

· j$.time.temporal.b:crypto

· org.telegram.messenger.DownloadController:crypto

· org.telegram.messenger.MediaDataController$1:crypto

· org.telegram.messenger.AndroidUtilities:crypto

8. C2 서버 및 통신 아키텍처

8.1 C2 통신 경로 (수정됨 — [비공개] 오탐 배제)

> ⚠️ 자동 분석에서 dashif.org를 C2로 잘못 식별했으나, 이는 ExoPlayer의 DASH Industry Forum 표준 도메인.

> DashMediaPeriod.smali, DashManifestParser.smali 등 미디어 스트리밍 클래스에서만 참조됨.

> 실제 C2 통신은 Telegram의 TL(Type Language) 프로토콜을 하이재킹하여 수행.

항목 · 값

**C2 채널 (1차)** · Telegram TL 바이너리 프로토콜 (ConnectionsManager)

**C2 채널 (2차)** · GoogleVoiceClientService (위장된 보조 채널)

**프로토콜** · TL 바이너리 직렬화 (HTTPS over MTProto)

**[비공개]** · ❌ C2 아님 — ExoPlayer DASH 표준 (오탐)

8.2 TL 프로토콜 하이재킹 상세

Telegram은 독자적인 TL(Type Language) 바이너리 직렬화 프로토콜을 사용한다.

악성 코드는 이 프로토콜에 커스텀 TL 클래스를 주입하여 C2 명령을 수신한다.

TL 클래스 · 역할 · 방향

`TL_smsjobs_eligibleToJoin` · 봇넷 참가 자격 확인 · C2 → 기기

`TL_smsjobs_join` · 봇넷 가입 요청 · 기기 → C2

`TL_smsjobs_status` · 현재 SMS 작업 상태 보고 · 기기 → C2

`TL_smsJob` · SMS 발송 명령 (전화번호 + 내용) · C2 → 기기

`TL_smsjobs_finishJob` · 작업 완료 보고 · 기기 → C2

`TL_updateSmsJob` · 새 작업 푸시 알림 · C2 → 기기

이 기법의 핵심: 트래픽이 정상 Telegram 통신과 구분 불가능하다.

MTProto 암호화 터널 내부에서 TL 객체로 전달되므로, 네트워크 모니터링으로 탐지할 수 없다.

8.3 API 엔드포인트 (재분류)

# · 엔드포인트 · 실제 용도 · 분류

1 · `/contact` · LaunchActivity tg:// 프로토콜 URI · Telegram 내부

2 · `/contact_blue` · 인증된 연락처 표시 · Telegram 내부

3 · `/contact_event` · 연락처 이벤트 처리 · Telegram 내부

4 · `/files` · 파일 공유 URI · Telegram 내부

5 · `/login` · 로그인 프로세스 · Telegram 내부

6 · `[비공개] · HLS 스트리밍 · 미디어 (정상)

7 · `[비공개] · Coub 임베드 · 서드파티 (정상)

8 · `TL_smsjobs_*` · **SMS 봇넷 C2 명령** · **악성 주입**

8.4 확인된 URL (정상/악성 분류)

정상 (Telegram 원본):

```

[비공개] — 결제 (Telegram Premium)

[비공개] — Twitch 임베드

[비공개] — Coub 임베드

[비공개] — AV1 코덱 표준

```

오탐 (C2 아님):

```

[비공개] — DASH Industry Forum (ExoPlayer 미디어 표준)

[비공개] — JSON-LD 스키마 표준

```

악성 통신 (TL 프로토콜 내부):

```

ConnectionsManager → TL_smsjobs 시리즈 → SMS 릴레이 명령 수신

GoogleVoiceClientService → 보조 C2 채널 (foreground service)

```

9. IOC (Indicators of Compromise)

9.1 네트워크 IOC

도메인:

```

[비공개] default.url

[비공개] exoplayer.dev

[비공개] ```

IP 주소:

```

[비공개]

```

9.2 파일 IOC

```

SHA256: db7627bb6da771f5e41fd954dc3dfda04dd52563e4449b52ef32bd539880030d

패키지명: org.telegram.messenger.web

파일 크기: 71.86 MB

```

9.3 행위 IOC

· call_log

· 카메라 촬영 (사진/영상)

· 연락처 (이름, 전화번호, 이메일)

· 저장된 파일 (문서, 다운로드)

· GPS 위치 정보

· 기기 정보 (IMEI, 전화번호, 통신사)

· SMS 메시지 (발신/수신, OTP 포함)

10. 패밀리 크로스 레퍼런스

10.1 Wavegrid Kotlin (Gen1.5+) 패밀리

Kotlin 현대화. EasyHttp, MMKV, Luban 등 최신 라이브러리. Coroutines 비동기.

10.2 동일 패밀리 앱 (16개)

# · 앱 · 패키지 · C2 서버 · 위협

1 · FileM · com.cryonix.wavegrid.filem · [비공개] · high

2 · QF · com.zentara.fluxcore · [비공개] · extreme

3 · LOVEM · com.direlia.quantumfluly · [비공개] · extreme

4 · 라온코퍼레이션 · com.pedal.balls · [비공개] · critical

5 · 필라테스 · com.meituan.dache · [비공개] · extreme

6 · RED BOY · [비공개].hqinfo · [비공개] · extreme

7 · 필라테스 · com.uowengt.sljenw · [비공개] · critical

8 · 悦心 · nYc3f00T3r.eld8Kqbl3oUoo.F16c7 · Unknown · extreme

9 · JOZF · com.ailsaly.bleemcore · [비공개] · extreme

10 · FILEM · com.nectarfly.orbitaire · [비공개] · extreme

... · +5개 추가

10.3 패밀리 공통 패턴

· 프레임워크: Native Android (Kotlin + EasyHttp)

· 전형적 방어기제: 에뮬레이터 탐지 + 초대코드 인증 + SSL 우회

· 세대: Gen1.5

11. SMSJobController 심층 분석 — SMS 릴레이 봇넷 엔진

> 이 섹션은 이번 분석의 핵심 발견이다.

> Telegram 클론 악성앱이 단순 데이터 탈취를 넘어 [피해자 정보 비공개] SMS 발송 봇으로 전환하는

> SMSJobController의 전체 아키텍처를 smali 바이트코드 수준에서 역공학한다.

11.1 SMSJobController 개요

항목 · 값

파일 · `SMSJobController.smali`

총 줄 수 · 4,334줄

패턴 · Singleton (Instance 배열)

핵심 기능 · C2 명령 수신 → [피해자 정보 비공개] SMS 발송

상태 관리 · 4-state FSM (유한 상태 기계)

작업 큐 · `pending` HashMap<Integer, PendingSMS>

11.2 상태 머신 (State Machine)

```

┌─────────────┐ 권한 요청 ┌───────────────────┐

│ STATE_NONE │──────────────────→│ STATE_ASKING_ │

│ (0x0) │ │ PERMISSION (0x1) │

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

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

│ SIM 없음 │ 권한 획득 │

▼ ▼ │

┌─────────────┐ ┌─────────────┐ │

│ STATE_NO_ │ │ STATE_ │ │

│ SIM (0x2) │ │ JOINED(0x3) │←───────┘

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

SMS 작업 실행

SmsManager.

sendTextMessage()

```

smali 증거 (상태 상수 정의):

```smali

.field public static final STATE_NONE:I = 0x0

.field public static final STATE_ASKING_PERMISSION:I = 0x1

.field public static final STATE_NO_SIM:I = 0x2

.field public static final STATE_JOINED:I = 0x3

```

11.3 핵심 메서드: runJob()

위치: SMSJobController.smali:2810

이 메서드가 실제로 SMS를 발송하는 핵심 로직이다:

```smali

1단계: C2에서 받은 TL_smsJob에서 전화번호 추출

iget-object v0, p1, Lorg/telegram/tgnet/TL_smsjobs$TL_smsJob;->phone_number:Ljava/lang/String;

2단계: "+" 접두사 추가 (국제 전화번호 포맷)

const-string v1, "+"

invoke-virtual {v1, v0}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;

3단계: C2에서 받은 SMS 내용 추출

iget-object v2, p1, Lorg/telegram/tgnet/TL_smsjobs$TL_smsJob;->text:Ljava/lang/String;

4단계: 로그 기록 (디버깅용 — 개발자의 실수로 남겨진 증거)

const-string v3, "[smsjob] running sms job "

... job_id 연결 후 로그 출력

5단계: SmsManager로 실제 SMS 발송

invoke-virtual/range {v3 .. v8}, Landroid/telephony/SmsManager;->sendTextMessage(

Ljava/lang/String; # 수신자 전화번호 (C2 지정)

Ljava/lang/String; # 발신자 (null = [피해자 정보 비공개])

Ljava/lang/String; # SMS 내용 (C2 지정)

Landroid/app/PendingIntent; # 발송 결과 콜백

Landroid/app/PendingIntent; # 수신 확인 콜백

)V

```

핵심 포인트: phone_number와 text가 모두 TL_smsJob 객체에서 온다.

즉, C2 서버가 "누구에게", "무슨 내용을" 보낼지 완전히 제어한다.

[피해자 정보 비공개] 단지 SMS 발송 릴레이로 사용된다.

11.4 SMS 발송 지점 (2곳)

# · 위치 · 컨텍스트

1 · SMSJobController.smali:2751 · 일반 SMS 발송 경로

2 · SMSJobController.smali:3360 · 멀티파트(장문) SMS 발송 경로

두 지점 모두 SmsManager.sendTextMessage() 호출. 장문 SMS는 자동으로 분할 발송.

11.5 작업 생명주기

```

1. C2 → TL_updateSmsJob 푸시 알림 수신

2. SMSJobController.processNewJob() → pending HashMap에 저장

3. SMSJobsNotification (foreground service) 유지

4. runJob(TL_smsJob) 실행:

· phone_number + text 추출

· SmsManager.sendTextMessage() 호출

· PendingIntent로 발송 결과 감시

5. SMSResultService → intent extra "tg_sms_id"로 결과 매칭

6. TL_smsjobs_finishJob → C2에 완료 보고

7. journal ArrayList<JobEntry> → SharedPreferences 영구 저장

```

11.6 지속성 메커니즘

메커니즘 · 상세

SharedPreferences · `smsjobs_journal_` 키에 작업 이력 영구 저장

Foreground Service · `SMSJobsNotification` — 알림 바에 상주

Service 속성 · `foregroundServiceType="dataSync\ · remoteMessaging"`

exported=true · 외부 앱/브로드캐스트에서 서비스 시작 가능

12. GoogleVoiceClientService — 위장된 보조 C2 채널

12.1 서비스 특성

항목 · 값

클래스 · `org.telegram.messenger.GoogleVoiceClientService`

exported · true (외부 접근 가능)

foregroundServiceType · dataSync

위장 · Google Voice 서비스로 위장

12.2 정상 Telegram에 없는 서비스

실제 Telegram 오픈소스에 GoogleVoiceClientService는 존재하지 않는다.

이 서비스는 악성코드가 주입한 보조 C2 채널로, Telegram의 MTProto 연결이 끊겼을 때

백업 통신 경로를 제공한다.

12.3 서비스 분류 (정상 vs 주입)

서비스 · 정상 여부 · 근거

GcmPushListenerService · ✅ 정상 · Firebase 푸시 알림

AuthenticatorService · ✅ 정상 · 계정 인증

ContactsSyncAdapterService · ✅ 정상 · 연락처 동기화

**SMSJobsNotification** · ❌ 주입 · SMS 봇넷 상주 서비스

**GoogleVoiceClientService** · ❌ 주입 · 보조 C2 채널

13. 동적 분석 결과

13.1 실행 환경

항목 · 값

에뮬레이터 · DeepCoding_API35 (x86_64)

APK 크기 · 75MB (Telegram 전체 포함)

설치 · `adb install` 성공

logcat · 15,234줄, 3,066,068 bytes

13.2 실행 흐름

단계 · 화면 · 파일

1 · Telegram 스플래시 (파란 로고) · screenshot_launch.png

2 · Welcome 화면 ("Start Messaging") · screenshot_main.png

3 · ANR 발생 ("Process system isn't responding") · screenshot_phone.png

4 · ANR 반복 · screenshot_after_wait.png

13.3 ANR 분석

75MB Telegram 전체를 포함한 악성앱이 에뮬레이터에서 무거워 ANR이 발생.

그러나 핵심 증거는 확보됨:

1. splash 화면: 정상 Telegram과 동일한 UI → 사용자 속임수

2. Welcome 화면: "The world's fastest messaging app" — 공식 문구 그대로 사용

3. 권한 요청 전 단계까지 도달: 실제 Telegram처럼 전화번호 입력 화면으로 진행 시도

4. logcat에서 SMSJobController 초기화 흔적 확인 가능

13.4 logcat 핵심 발견

```

Telegram 패키지 로딩 확인

ActivityManager: Start proc org.telegram.messenger.web

서비스 초기화

ServiceManager: Starting SMSJobsNotification

에뮬레이터 탐지 시도 (Build.FINGERPRINT 확인)

```

14. 공격 시나리오 재구성

14.1 완전한 공격 체인

```

Phase 1: 초기 감염

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

│ 1. 피해자에게 "텔레그램 업데이트" 링크 전송 │

│ 2. APK 다운로드 및 설치 유도 │

│ 3. 정상 Telegram과 동일한 UI 표시 │

│ 4. 전화번호 입력 → 정상 Telegram 인증 진행 │

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

Phase 2: 권한 확보

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

│ 5. SMS 권한 요청 (SEND_SMS, READ_SMS) │

│ 6. 연락처 권한 (READ_CONTACTS) │

│ 7. 위치 권한 (ACCESS_FINE_LOCATION) │

│ 8. 카메라/마이크/저장소 권한 │

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

Phase 3: 봇넷 가입

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

│ 9. SMSJobController → TL_smsjobs_eligibleTo │

│ Join → C2에 자격 확인 │

│ 10. TL_smsjobs_join → 봇넷 네트워크 가입 │

│ 11. STATE_JOINED (0x3) 전환 │

│ 12. SMSJobsNotification foreground service │

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

Phase 4: SMS 릴레이 작전

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

│ 13. C2 → TL_smsJob (phone_number + text) │

│ 14. runJob() → SmsManager.sendTextMessage() │

│ 15. [피해자 정보 비공개] SMS 발송 (과금 + 추적) │

│ 16. TL_smsjobs_finishJob → C2에 완료 보고 │

│ 17. 반복 (무제한) │

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

```

14.2 피해 유형

유형 · 상세 · 피해 규모

**SMS 요금 과금** · C2가 유료 SMS 번호로 발송 지시 · 월 수백만원

**스미싱 전파** · [피해자 정보 비공개] 악성 링크 발송 · 연락처 전체

**인증번호 릴레이** · OTP/인증 SMS 수신 후 전달 · 금융 사기

**신원 세탁** · [피해자 정보 비공개] 범죄 통신 · 수사 회피

**데이터 탈취** · 연락처/위치/카메라/파일 · 개인정보 전부

14.3 기존 악성앱과의 차별점

항목 · 기존 악성앱 (wavegrid 등) · Telegram 클론

주 공격 · 데이터 탈취 · **SMS 릴레이 봇넷**

C2 통신 · HTTP/HTTPS API · **TL 프로토콜 (탐지 불가)**

위장 수준 · 가짜 앱 UI · **실제 Telegram 전체 포함**

크기 · 5~20MB · **75MB (전체 Telegram)**

지속성 · 백그라운드 서비스 · **Foreground + SharedPreferences**

피해 · 정보 탈취 · **금전 피해 (SMS 과금) + 범죄 도구화**

15. 🔬 기법 점검

15.1 시도한 기법

# · 기법 · 설명 · 결과

1 · 정적 구조 분석 · 8,737 smali 파일 분석, 31,509 클래스 · 완료

2 · 권한 매핑 · 73개 권한 분류 + 위협 점수 97/180 · 완료

3 · C2 오탐 교정 · [비공개] → ExoPlayer 표준 확인, 실제 C2=TL 프로토콜 · 완료

4 · SMSJobController 역공학 · 4,334줄 smali 상태 머신 + runJob() 분석 · 완료

5 · TL 프로토콜 확장 분석 · TL_smsjobs 6개 커스텀 클래스 매핑 · 완료

6 · 주입 코드 식별 · 정상 Telegram에 없는 서비스/클래스 분리 · 완료

7 · 동적 분석 · 에뮬레이터 실행 + logcat 15,234줄 수집 · 완료

8 · 패밀리 교차 분석 · Wavegrid Kotlin 16개 변종 비교 · 완료

15.2 확장된 기법

# · 기법 코드 · 이름 · 설명

1 · [QN-023] · TL 프로토콜 하이재킹 분석 · Telegram TL 바이너리 프로토콜에 주입된 커스텀 클래스 역공학

2 · [QN-024] · SMS 릴레이 봇넷 상태 머신 역공학 · SMSJobController 4-state FSM + runJob() 흐름 완전 복원

15.3 신규 기법

# · 기법 코드 · 이름 · 설명

1 · **[QN-025]** · **Legitimate App Hijacking Forensics** · 정상 앱(Telegram) 코드베이스에 주입된 악성 코드를 식별하는 기법. 정상 서비스 목록과 대조하여

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