악성앱 303종을 리버스 엔지니어링으로 전수 분석한 1차 실측 데이터스터디
본 리포트는 2026년 한국에서 유포된 몸캠피싱·영상통화사기 악성앱 303종을 전수 리버스 엔지니어링한 결과다. 개별 신고 사례가 아니라 악성앱 코드 자체를 직접 해부해 얻은 집계이며, 세 가지 결론으로 수렴한다.
READ_CONTACTS가 272종(89.8%)에서 확인됐다.이는 "피해자의 지인 전체가 2차 협박 대상이 된다"는 몸캠피싱 피해 구조가 소수 예외가 아니라 이 위협 생태계의 표준 설계임을 보여준다.
전 과정은 주식회사 아크링크의 악성앱 분석 파이프라인(Deep-Coding / deep-scan.ai)에서 4단계로 표준화돼 수행됐다.
| 단계 | 작업 | 산출물 |
|---|---|---|
| Phase 1 구조 | APK 디컴파일, 매니페스트·권한·컴포넌트 매핑 | 권한/컴포넌트 목록, 패키지 지문 |
| Phase 2 우회 | 패킹(Jiagu·Virbox 등) 탐지, smali 정적 분석, 런타임 복호화 우회 | 언패킹 DEX, smali 코드 |
| Phase 3 네트워크 | 통제된 에뮬레이터 동적 분석, 트래픽 관찰, C2 프로빙 | C2/baseUrl, API 엔드포인트, 프로토콜 |
| Phase 4 심층 | 바이트코드 정밀 분석, 탈취 데이터 흐름 추적, IOC 전수 추출 | 데이터 전송 구조, IOC(도메인·URL·해시·패키지) |
모든 통계는 303종의 분석 메타데이터(family·category·permissions·dataExfil·c2Details·threatLevel)에서 직접 집계한 전수치다. 본 리포트는 방어·인식 목적의 위협 인텔리전스로, 피해자 개인정보(전화번호·실명·기기 식별자)는 일절 포함하지 않으며, 공격을 재현할 익스플로잇 코드나 특정 C2 주소 전량 나열은 배제하고 인프라는 클러스터·패턴 수준으로만 기술한다.
앱들이 요구하는 권한과 실제 탈취 대상을 정량 대조하면, 표적은 명확히 피해자의 연락처로 수렴한다. 협박 모델("가족·지인에게 유포하겠다")이 실효를 가지려면 유포 대상(연락처)이 사전에 손에 있어야 하며, 앱은 피해 영상 확보 이전에 설치·권한 단계에서 이미 협박 인프라를 구축한다.
| 요청 권한 | 앱 수(/303) | 대응 탈취 데이터 | 피해자 관점 위험 |
|---|---|---|---|
| INTERNET | 280 (92.4%) | C2 반출 통로 | 탈취 데이터의 서버 전송 |
| READ_CONTACTS | 272 (89.8%) | contacts 279종 | 가족·지인 명단이 유포 리스트로 전환 |
| READ_EXTERNAL_STORAGE | 244 (80.5%) | files 92 · images 84 | 저장 사진·문서가 협박 소재화 |
| READ_PHONE_STATE | 194 (64.0%) | phone_info 155종 | 회선·기기 식별로 피해자 특정·추적 |
| READ_SMS | 152 (50.2%) | sms 190종 | 은행·본인확인 인증문자 열람 |
| READ_MEDIA_IMAGES | 134 (44.2%) | images 84종 | 갤러리 이미지 반출 |
| RECEIVE_SMS | 103 (34.0%) | 실시간 문자 가로채기 | 인증문자 중계·2차 금융피해 |
가장 주목할 정량 패턴은 연락처 실제 탈취율(92.1%, 279종)이 READ_CONTACTS 권한 요청율(89.8%, 272종)보다 높다는 점이다. 즉 일부 앱은 해당 권한을 매니페스트에 명시하지 않고도 연락처를 탈취 대상에 포함한다. SMS도 같은 초과 현상을 보인다 — READ_SMS 요청은 152종인데 sms 반출은 190종이다. 설치 시점의 권한 화면만으로 앱의 실제 위험을 판정하는 것이 불충분하다는 방어적 함의를 갖는다.
303종은 서로 무관한 개별 앱이 아니라 소수의 제작 계보(패밀리)가 대량으로 찍어낸 변종군이다. 상위 6개 명명 클러스터 하나만으로 전체의 약 28%(85종)가 설명된다. 수백 개의 서로 다른 패키지명·도메인 뒤에 재사용되는 코드베이스·패킹 도구·서버 백엔드·초대코드 관문이라는 공통 뼈대가 있으며, 이는 MaaS(Malware-as-a-Service) 성격의 공장형 구조를 시사한다.
| 클러스터 | 변종 | 주 카테고리 | 공통 방어기제 |
|---|---|---|---|
| golgol_cluster | 19 | 연락처 15 · SMS 4 | 다수 패킹 보호 |
| vultr_104_cluster | 16 | SMS 릴레이 14 | 전량 초대코드 관문 |
| wavegrid | 14 | 연락처 14 | 전량 초대코드 · Gen3/Gen4 진화 |
| 19kuem (성인미끼) | 14 | 연락처 14 | 전량 초대코드 |
| jiagu (패킹) | 11 | 연락처 5 · SMS 5 | Jiagu 패킹 |
| frezrik_jiagu | 11 | 연락처 10 | 전량 Jiagu 패킹 |
계보 진화: wavegrid 계열은 원형에서 gen3 → gen4(R8 난독화) → Kotlin 이식판 → 경량판으로 분화하며, 난독화 강도와 개발 언어를 바꿔 탐지를 회피하되 연락처 탈취 목적과 초대코드 관문 구조는 유지한다.
두 개의 관문: (1) 전체 303종 중 168종(약 55%)이 초대코드 게이트를 두어, 유효 코드 없이는 악성 UI로 진입하지 않아 자동 샌드박스를 원천 차단한다. (2) 정적 분석 무력화용 상용 패커가 광범위하다(Jiagu 계열 70종·Virbox 계열 47종·에뮬레이터 탐지 51종). ※ 패밀리·패커 라벨은 아크링크 애널리스트가 수동 부여한 값으로, 위 수치는 확인된 하한선(최소치)이며 실제 집중도는 더 높을 수 있다.
303종에서 추출한 고유 C2/베이스URL 269개를 분석했다. 핵심은 2차 인용이 아니라 직접 관측이라는 점이다 — 303종 중 297종(98.0%)에서 C2 상세 프로파일이 확보됐고, API 엔드포인트에 실제 요청을 보내 서버가 반환한 HTTP 상태(200 OK 201건, 500 17건, 401 인증요구 13건, 연결실패 0 34건)를 기록했다. "코드에서 URL만 뽑아 추정"한 것이 아니라 살아있는 서버를 실측한 1차 데이터다.
| 지표 | 실측 | 의미 |
|---|---|---|
| 서버 프레임워크 | RuoYi 계열 63종+ (확인 하한) | 중국산 Spring Boot 관리 프레임워크를 템플릿 복제로 재사용 |
| 전송 프로토콜 | 평문 HTTP 계열 188 vs HTTPS 70 | 탈취 데이터 3분의 2가 암호화 없이 전송 — 탐지 회피보다 대량 배포 속도 우선 |
| 인프라 집중 | 소수 클러스터로 재사용 | golgol 19 · vultr_104 16 · wavegrid 14 등 소수 운영 그룹 |
동일 RuoYi 버전 공유, 동일 호스팅 대역 집중, 동일 패킹 보호는 모두 인프라·코드 재사용의 지문이다. 한 클러스터의 서버 프로파일을 확보하면 같은 패밀리의 나머지 서버에 즉시 응용할 수 있다.
이 데이터가 말하는 위협 지형은 명확하다. 제작 도구와 도메인은 다변화하되, "피해자의 연락처·문자를 빼내 지인 협박으로 확산"이라는 단일 비즈니스 모델을 소수 공장이 공유한다. 피해자 관점의 실제 위험은 네 겹으로 축적된다.
대응 관점: 미분류는 41종에 그치고 다수가 패밀리·공유 인프라로 묶인다. 이는 개별 앱 단위가 아니라 패밀리·공유 인프라(초대코드 관문·상용 패커·RuoYi 백엔드) 단위로 차단하면 다수 변종을 한 번에 무력화할 수 있음을 뜻한다 — 도메인만 바꿔 재출현하는 변종을 좇는 두더지잡기보다 구조적으로 우월한 방어 전략이다.