항목 · 값
**앱 이름** · GalleryVault Pro Key
**APK 파일명** · myvideo+.apk
**패키지명** · com.licks.atom
**내부 런처 액티비티** · com.licks.atom.MainAco
**Application 클래스** · k.h (Jiagu StubApp, 난독화)
**앱 아이콘** · ic_launcher_foreground (mipmap)
**앱 테마** · Theme.Cave
항목 · 값 · 출처
**versionCode** · 405060000 · apktool.yml
**versionName** · 4.5.6 · apktool.yml
**minSdkVersion** · 26 (Android 8.0) · apktool.yml
**targetSdkVersion** · 35 (Android 15) · AndroidManifest.xml
**compileSdkVersion** · 35 · AndroidManifest.xml
**apktool 버전** · 2.9.3 · apktool.yml
항목 · 값
**위장 형태** · 갤러리 금고 / 사진 보관 앱
**실제 목적** · 연락처/미디어 탈취 (추정)
**프레임워크** · Native Android + Jiagu 3-Layer
**위협 수준** · EXTREME
**분석 상태** · 구조 분석 90% / 실행 0%
apktool.yml에서 확인된 포함 라이브러리:
```
DebugProbesKt.bin → Kotlin Coroutines Debug
okhttp3/internal/publicsuffix/a.gz → OkHttp 네트워크 라이브러리
okhttp3/internal/publicsuffix/NOTICE → OkHttp 라이선스
```
또한 doNotCompress 항목에서 Baseline Profile 존재가 확인됨:
```
assets/dexopt/baseline.prof → Android Baseline Profiles
assets/dexopt/baseline.profm → Baseline Profile Metadata
```
소견: OkHttp 포함은 네트워크 통신 기능의 존재를 확인시켜 주나, 실제 코드가 Jiagu 보호 내부에 있어 직접 확인 불가.
AndroidManifest.xml에서 직접 확인한 권한 목록:
권한 · 위험도 · 용도
`INTERNET` · Normal · 네트워크 통신
`READ_CONTACTS` · **Dangerous** · 연락처 접근
`READ_PHONE_NUMBERS` · **Dangerous** · 전화번호 읽기
```xml
<permission
android:name="com.licks.atom.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
android:protectionLevel="signature"/>
```
이 권한은 Android 13+ (API 33)에서 동적 브로드캐스트 리시버의 보안을 위해 사용되는 패턴으로, AndroidX Core 라이브러리가 자동 생성하는 보호 권한이다.
Manifest에 3개 권한만 선언되어 있지만, 이는 Jiagu StubApp의 Manifest만 반영된 것이다.
apps.json에 기록된 권한(READ_CONTACTS, READ_PHONE_STATE, CAMERA, READ_EXTERNAL_STORAGE)과 차이가 있는 이유:
· 실제 앱(MainAco)의 코드는 암호화된 SO 라이브러리 내부에 존재
· Jiagu 보호가 런타임에 실제 DEX를 복호화하여 메모리에 로드
· 런타임 시 추가 권한을 요청할 수 있으나 코드 분석 불가
· Manifest에 보이는 권한은 외부 껍데기(StubApp)의 권한
권한 · 근거
`READ_CONTACTS` · Manifest에 명시
`READ_PHONE_NUMBERS` · Manifest에 명시
`CAMERA` · MALBIO 게놈 데이터에서 camera_access=1
`READ_EXTERNAL_STORAGE` · MALBIO 게놈 데이터에서 storage_access=1
`READ_PHONE_STATE` · MALBIO 게놈 데이터에서 phone_access=1
주의: CAMERA, READ_EXTERNAL_STORAGE, READ_PHONE_STATE는 Manifest에서 직접 확인된 것이 아니라 분석 과정에서 추정된 값이다. 실제 확인을 위해서는 Jiagu 내부 DEX의 복호화가 필요하다.
Jiagu 보호로 인해 접근 가능한 코드는 극히 제한적이다:
```
접근 가능 (분석 완료):
classes.dex (8KB)
├── k/h.smali → Jiagu StubApp (Application 클래스)
└── (기타 Jiagu 내부 클래스)
1차 복호화 성공 (구조만 확인):
classes2.dex (23,272 bytes)
├── n/k.smali → 2차 로더 클래스
└── n/k$1.smali → 익명 내부 클래스
접근 불가 (2차 암호화):
실제 앱 코드 (MainAco 등)
└── 암호화된 SO 라이브러리 내부에 존재
```
k/h.smali는 이 APK의 유일하게 분석 가능한 핵심 코드이다. [비공개].Application을 상속하며, Jiagu 보호 프레임워크의 진입점 역할을 한다.
```smali
.class public Lk/h;
.super Landroid/app/Application;
.field public static a:Ljava/lang/Class; # 복호화된 실제 Application 클래스 참조
.method public static native attach(Lk/h;)V # 2차 복호화 트리거 (libjiagu.so)
.method public static b(String, File)V # ZIP 추출기 (APK에서 j6lad 추출)
.method public static bf(String)String # Base64 + 난독화 문자열 디코더
.method public static cuyjk()String # 반분석 더미 메서드
.method public static getInstance()Application # 실제 Application 인스턴스 획득
.method public static ivuwi(String, String)V # 반분석 더미 메서드 (no-op)
.method public a(Application, String)V # n.k 클래스의 hook 메서드 호출
.method public a(String)[B # n.k 클래스의 b 메서드 호출 (바이트 배열 반환)
.method public attachBaseContext(Context)V # 핵심: 다단계 복호화 및 클래스 로딩
.method public createPackageContext(String, int)Context # n.k 프록시
.method public getPackageName()String # 패키지명 반환 (난독화)
.method public onCreate()V # n.k.onCreateEx() 프록시
```
이 메서드가 Jiagu 보호의 전체 복호화 체인을 실행한다:
```
실행 순서:
1. super.attachBaseContext(context) 호출
2. getFilesDir() → 작업 디렉토리 획득
3. "j6lad.dex" 파일 존재 여부 확인
4. 미존재 시:
a. getApplicationInfo().sourceDir → APK 경로 획득
b. b(sourceDir, tempFile) → APK에서 nak.j6lad ZIP 엔트리 추출
c. 비트 시프트 복호화 적용 (lines 642-650):
shr-int/lit8 v9, v7, 0x3 # v9 = byte >> 3
shl-int/lit8 v7, v7, 0x5 # v7 = byte << 5
or-int/2addr v7, v9 # v7 = v7 | v9 (= rotateLeft(byte, 5))
int-to-byte v7, v7 # 바이트로 변환
d. 결과를 j6lad.dex로 저장
e. setReadOnly() 설정
f. 임시 파일 삭제
5. DexClassLoader(j6lad.dex) 생성 (line 762)
6. "n.k" 클래스 로드 (line 770)
7. static field 'a'에 클래스 참조 저장 (line 774)
8. n.k.attachBaseContextEx(context) 호출 (reflection, lines 790-818)
9. attach(this) 네이티브 메서드 호출 (line 833) ← 2차 복호화!
10. n.k.setLoadFlag() 호출 (reflection, lines 845-865)
```
smali 원본 (lines 642-650):
```smali
shr-int/lit8 v9, v7, 0x3 # 오른쪽으로 3비트 시프트
shl-int/lit8 v7, v7, 0x5 # 왼쪽으로 5비트 시프트
or-int/2addr v7, v9 # OR 연산으로 합산
int-to-byte v7, v7 # 바이트 크기로 자름
```
Python 등가 코드:
```python
def decrypt_byte(b):
return ((b << 5) | (b >> 3)) & 0xFF
```
수학적 의미: 이것은 8비트 바이트의 왼쪽 순환 시프트(ROL) 5비트 연산이다. ROL(byte, 5) == ROR(byte, 3). 암호화 시에는 ROR(byte, 5) (오른쪽 순환 시프트 5비트)가 적용되었을 것이다.
```smali
.method public static cuyjk()Ljava/lang/String;
.locals 2
const-string v1, "putx01awl2f53rdbku4zl29b2t0yabpp79eam5"
return-object v1
.end method
```
이 메서드는 코드 전체에 58회 이상 삽입되어 있으며, 실질적 기능은 없다. 목적:
· 정적 분석 방해: 무의미한 호출로 코드 플로우 복잡화
· 타이밍 기반 탐지: nanoTime(), uptimeMillis() 등과 함께 사용
· 문자열 난독화 보조: 실제 중요한 코드 사이에 노이즈 삽입
반환값 "putx01awl2f53rdbku4zl29b2t0yabpp79eam5"는 사용되지 않는 더미 문자열이다.
```smali
.method public static ivuwi(Ljava/lang/String;Ljava/lang/String;)V
.locals 2
const-string v1, "o3peko2p2kjka2sn2vr4hbmvkmz83ndz"
return-void
.end method
```
매개변수를 받지만 아무 작업도 하지 않는 no-op 메서드. 입력값을 무시하고 즉시 반환한다.
Base64 디코딩 후 문자열 조작을 수행하는 난독화된 디코더:
```
동작 순서:
1. Base64.decode(input, 0) → 바이트 배열
2. new String(bytes) → 문자열 변환
3. split("f\u01d6\u0111") → 특수 구분자로 분리
4. [1] 인덱스 선택 → 구분자 이후 문자열 추출
5. replace("\\'", "'") → 이스케이프된 작은따옴표 복원
6. replace("\\n", "\n") → 이스케이프된 개행 복원
7. replace("\\r", "") → 캐리지 리턴 제거
```
이 디코더를 통해 해독되는 문자열 예시:
· "7p+IZMSTZseWxJEuajZsYWRmx5bEkcO6ZcST" → ".j6lad" (암호화 파일 확장자)
· "Y+6fiMSHZseWxJFjb20ubGlja3MuYXRvbWbHlsSRxavDvMSH" → "com.licks.atom" (패키지명)
· "7p+IYcSRZseWxJFqNmxhZC5kZXhmx5bEkcO6x5bEkQ==" → "j6lad.dex" (복호화 DEX 파일명)
```smali
const-string v0, "Y+6fiMSHZseWxJFjb20ubGlja3MuYXRvbWbHlsSRxavDvMSH"
invoke-static {v0}, Lk/h;->bf(Ljava/lang/String;)Ljava/lang/String;
```
bf() 디코더를 통해 "com.licks.atom" 문자열을 반환한다. 이 오버라이드의 목적은 Jiagu 보호 프레임워크가 원본 패키지명을 유지하면서도 문자열을 난독화하기 위함이다.
k/h.smali에서 관찰된 반분석/반디버깅 기법:
기법 · 구현
**더미 메서드 삽입** · cuyjk(), ivuwi() 코드 전체에 산재
**타이밍 체크** · System.nanoTime(), SystemClock.uptimeMillis(), SystemClock.elapsedRealtime()
**반사 기반 호출** · Class.getMethod() + Method.invoke()로 간접 호출
**문자열 난독화** · Base64 + 커스텀 인코딩 (bf() 디코더)
**더미 API 호출** · VelocityTracker.obtain(), Collections.emptyList(), Parcel.obtain() 등
**런타임 클래스 로딩** · DexClassLoader로 동적 DEX 로드
**네이티브 코드 분리** · 핵심 복호화를 libjiagu.so에 위임
1차 복호화로 획득한 classes2.dex (23,272 bytes)에 포함된 클래스:
```
Ln/k; → 2차 로더 클래스 (실제 Application 프록시)
Ln/k$1; → 익명 내부 클래스
```
n.k 클래스는 다음 메서드를 외부에 노출한다 (k/h.smali의 reflection 호출로 확인):
· attachBaseContextEx(Context) - 실제 앱의 attachBaseContext 위임
· onCreateEx(Application) - 실제 앱의 onCreate 위임
· createPackageContextEx(Application) - 패키지 컨텍스트 위임
· getInstance() - 싱글톤 Application 인스턴스 반환
· hook(Application, String) - 앱 훅 메커니즘
· setLoadFlag() - 로드 완료 플래그 설정
· b(String, String) - 바이트 배열 반환 유틸리티
핵심: classes2.dex에는 실제 앱 로직(MainAco)이 포함되어 있지 않다. n.k는 또 다른 중간 로더에 불과하며, 실제 앱 코드는 attach() 네이티브 메서드를 통한 2차 복호화 이후에만 접근 가능하다.
분석 과정에서 Manifest를 패치한 흔적이 남아 있다:
```xml
<!-- PATCHED: Removed appComponentFactory to avoid ClassNotFoundException -->
<!-- PATCHED: Removed InitializationProvider to avoid ClassNotFoundException -->
<!-- PATCHED: Removed ProfileInstallReceiver to avoid ClassNotFoundException -->
```
패치된 항목:
1. appComponentFactory 제거 - AndroidX AppCompat의 AppComponentFactory는 Jiagu 내부에 있어 ClassNotFoundException 발생
2. InitializationProvider 제거 - emoji2, lifecycle, profileinstaller의 Initializer가 내부 DEX에 의존
3. ProfileInstallReceiver 제거 - Baseline Profile 설치 리시버가 내부 클래스에 의존
이 패치들에도 불구하고 MainAco 클래스를 찾을 수 없어 실행은 실패하였다.
```xml
<!-- res/xml/network.xml -->
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
```
```xml
<!-- AndroidManifest.xml -->
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network"
```
· HTTP 평문 통신 허용 (HTTPS 강제 없음)
· 모든 도메인에 대해 cleartext 허용
항목 · 값
**C2 서버 주소** · **확인 불가**
**프로토콜** · HTTP (cleartext 허용 설정)
**API 엔드포인트** · 확인 불가
**백엔드 프레임워크** · 확인 불가
이유: 실제 네트워크 통신 코드는 Jiagu 보호 내부의 암호화된 코드에 존재한다. k/h.smali의 StubApp 코드에는 URL, 도메인, IP 등의 네트워크 관련 문자열이 전혀 포함되어 있지 않다.
APK 내부에 OkHttp 라이브러리의 존재가 확인됨:
```
okhttp3/internal/publicsuffix/a.gz (압축된 publicsuffix 데이터)
okhttp3/internal/publicsuffix/NOTICE (라이선스 파일)
```
이는 실제 앱이 OkHttp 기반 네트워크 통신을 수행함을 시사하지만, 코드 분석은 불가하다.
myvideo+는 에뮬레이터 탐지로 인해 실행 자체가 불가능하여:
· 동적 네트워크 분석(MITM 프록시) 불가
· DNS 쿼리 캡처 불가
· API 엔드포인트 발견 불가
myvideo+는 이 프로젝트에서 분석된 모든 앱 중 가장 강력한 보호를 사용한다.
```
Layer 1: StubApp + DEX 암호화
APK
├── classes.dex (8KB) - k.h StubApp만 포함
└── res/raw/nak.j6lad - 비트 시프트 암호화된 DEX
Layer 2: 중간 로더
classes2.dex (23KB) - 1차 복호화 결과
├── n/k (Application 프록시)
└── 실제 앱 로직 없음
Layer 3: Native 2차 암호화
res/raw/*.j6la* - 5개 암호화 SO 라이브러리
├── 1차 비트 시프트 복호화 후에도 여전히 암호화
└── attach() 네이티브 메서드에서만 복호화 가능
```
항목 · 상세
**탐지 주체** · libjiagu.so (네이티브 레벨)
**탐지 결과** · 에뮬레이터에서 크래시 루프
**크래시 패턴** · PID 무한 재시작 (8965 → 8981 → 8998 → 9015 ...)
**우회 상태** · 미우회 (네이티브 레벨 탐지)
런타임 시 생성되는 네이티브 라이브러리:
```
.jiagu/k.h.so → StubApp 전용 (ARM64)
libjiagu.so → Jiagu 메인 보호 (ARM)
libjiagu_64.so → Jiagu 메인 보호 (ARM64)
libjiagu_x86.so → Jiagu 메인 보호 (x86)
```
res/raw/ 디렉토리에 존재하는 암호화 파일 6개:
파일명 · 크기 · 1차 복호화 후 크기 · 1차 복호화 후 헤더 · 용도
nak.j6lad · 23KB · 23,272 bytes · `dex\n` (DEX 매직) · 중간 로더 DEX
iw0.j6la_x86_64 · 107KB · 109,088 bytes · 0xED 0x31 0x0D 0xF5 · x86_64 SO (에뮬레이터용)
ae6.j6la_x86 · 110KB · 111,984 bytes · 0x17 0xA8 0x9C 0x5D · x86 SO
thp.j6la_64 · 99KB · 100,528 bytes · 0x16 0x69 0x67 0x2F · ARM64 SO
p3y.j6la · 70KB · 71,312 bytes · 0x98 0xA9 0x47 0x12 · 불명 (ARM 추정)
axj.j6la0 · 798KB · 798,064 bytes · 0x1A 0xEB 0x01 0xB4 · 실제 앱 코드 (가장 큼)
1차 복호화 결과: 비트 시프트 복호화 후에도 유효한 ELF/DEX/ZIP 매직 헤더가 없음. 2차 암호화 레이어가 존재함을 확인.
모든 중요 문자열이 Base64 + 커스텀 인코딩으로 난독화:
```
원본: com.licks.atom
인코딩: "Y+6fiMSHZseWxJFjb20ubGlja3MuYXRvbWbHlsSRxavDvMSH"
디코더: k/h.bf() 메서드
원본: j6lad.dex
인코딩: "7p+IYcSRZseWxJFqNmxhZC5kZXhmx5bEkcO6x5bEkQ=="
디코더: k/h.bf() 메서드
```
기법 · 구현 위치 · 우회 상태
**에뮬레이터 탐지** · libjiagu.so · 미우회
**DEX 암호화 (1차)** · res/raw/nak.j6lad · **우회 완료**
**SO 암호화 (2차)** · res/raw/*.j6la* · 미우회
**네이티브 코드 보호** · attach() 메서드 · 미우회
**문자열 난독화** · k/h.bf() · **해독 완료**
**더미 코드 삽입** · k/h.cuyjk(), ivuwi() · 식별 완료
**런타임 클래스 로딩** · DexClassLoader · 분석 완료
**Reflection 기반 호출** · Class.getMethod() · 분석 완료
항목 · 프로젝트 14 (jiagu_1757) · myvideo+
**보호 단계** · 2단계 · **3단계**
**StubApp** · com.frezrik.jiagu.StubApp · k.h (고도 난독화)
**암호화 DEX** · assets/39285EFA.dex (XOR) · res/raw/nak.j6lad (비트 시프트)
**복호화 키** · ab1234cd (XOR) · N/A (비트 순환 시프트)
**Native SO** · 없음 · **5개 파일 (2차 암호화)**
**실제 앱 타입** · UniApp (WebView) · Native Android
**앱 코드 위치** · 암호화된 DEX · **암호화된 SO**
**해결 방법** · WebView wrapper 제작 · **미해결**
**성공률** · 100% · 0% (분석만 90%)
**반분석 기법** · 기본 · **고급 (더미 코드, 타이밍, 난독화)**
핵심 차이: 프로젝트 14는 WebView 기반 앱이라 URL만 추출하면 wrapper로 재현 가능했으나, myvideo+는 Native Android 앱이므로 코드 자체를 복호화해야 한다.
데이터 유형 · 근거 · 확인 수준
**연락처** · READ_CONTACTS 권한 (Manifest) · 확정
**전화번호** · READ_PHONE_NUMBERS 권한 (Manifest) · 확정
**미디어/사진** · MALBIO 게놈 storage_access=1 · 추정
실제 데이터 전송 코드(API 엔드포인트, 전송 형식, 서버 주소)는 Jiagu 보호 내부에 있어 분석이 불가능하다. 확인 가능한 정보:
· OkHttp 라이브러리 존재 → HTTP/HTTPS 기반 데이터 전송
· cleartext 허용 → 비암호화 통신 가능
· Kotlin Coroutines → 비동기 데이터 처리 가능성
갤러리 금고 앱으로 위장하여:
1. 사용자가 "사진 보관" 기능으로 착각하고 앱 실행
2. 저장소/연락처/카메라 권한 요청
3. 권한 획득 후 연락처, 사진, 전화번호 수집
4. C2 서버로 전송
단계 · 방법 · 결과
**Phase 1** · nak.j6lad 비트 시프트 복호화 · **성공** - classes2.dex (23,272 bytes) 획득
**Phase 2** · attach() 네이티브 호출 제거 (smali 패치) · **부분 성공** - 크래시 해결, ClassNotFoundException 발생
**Phase 3** · AndroidX provider 제거 (Manifest 패치) · **실패** - MainAco 클래스 여전히 미발견
**Phase 4** · classes2.dex 직접 포함 (APK/assets/unknown) · **실패** - Android가 자동 로드하지 않음
**Phase 5** · 5개 j6la* 파일 1차 복호화 · **부분 성공** - 비트 시프트 제거, 2차 암호화 잔존
복호화 도구: decrypt_j6lad.py
```python
#!/usr/bin/env python3
"""
Decrypt nak.j6lad to j6lad.dex
Based on the decryption logic in k/h.smali:attachBaseContext
Decryption algorithm:
For each byte b:
result = ((b << 5) | (b >> 3)) & 0xFF
"""
def decrypt_j6lad(input_path, output_path):
with open(input_path, 'rb') as f_in:
encrypted = f_in.read()
decrypted = bytearray()
for byte in encrypted:
shifted_right = byte >> 3
shifted_left = byte << 5
result = (shifted_left | shifted_right) & 0xFF
decrypted.append(result)
with open(output_path, 'wb') as f_out:
f_out.write(decrypted)
if decrypted[:4] == b'dex\n':
print("[OK] Valid DEX file detected!")
return True
else:
print(f"[WARN] DEX magic not found. Got: {decrypted[:4]}")
return False
```
결과: DEX 매직 헤더 dex\n035\0 확인, 유효한 DEX 파일 획득 완료.
```smali
```
패치 결과: libjiagu.so 로드 실패로 인한 크래시는 해결되었으나, attach()가 담당하던 2차 복호화가 실행되지 않아 MainAco 클래스가 메모리에 로드되지 않음.
5개 j6la* 파일 모두에 동일한 비트 시프트 알고리즘 적용:
```
복호화 결과:
iw0_x86_64.bin (109,088 bytes) - Header: 0xED 0x31 0x0D 0xF5 → ELF 아님
ae6_x86.bin (111,984 bytes) - Header: 0x17 0xA8 0x9C 0x5D → ELF 아님
thp_arm64.bin (100,528 bytes) - Header: 0x16 0x69 0x67 0x2F → ELF 아님
p3y.bin (71,312 bytes) - Header: 0x98 0xA9 0x47 0x12 → ELF 아님
axj.bin (798,064 bytes) - Header: 0x1A 0xEB 0x01 0xB4 → ELF 아님
```
결론: 1차 비트 시프트 이후에도 유효한 파일 형식이 아님. Native attach() 함수 내부에 추가적인 복호화 로직이 존재하며, 이는 libjiagu.so 바이너리 분석(IDA Pro/Ghidra) 없이는 해독 불가.
```
myvideo+_patched_v1-aligned-debugSigned.apk → attach() 제거만
myvideo+_patched_v2-aligned-debugSigned.apk → + AndroidX 제거
myvideo+_patched_v3-aligned-debugSigned.apk → + 추가 수정
myvideo+_patched_v3_with_dex-aligned-debugSigned.apk → + classes2.dex 포함
```
모든 패치 APK가 LD Player에서 실행 실패.
```
총 시도: 5개 Phase
성공: 1.5개 (Phase 1 완전 성공, Phase 2 부분 성공)
실패: 3.5개
현재 상태: 분석만 가능, 실행 불가
병목 지점: attach() 네이티브 메서드의 2차 복호화
필요 도구: IDA Pro, Ghidra, Frida (물리 기기)
```
MALBIO (Malware Biology) 27차원 게놈 분석 결과:
유전자 · 값 · 설명
permission_count · 4 · 위험 권한 수 (중간)
dangerous_perm_ratio · 1.0 · 위험 권한 비율 100%
data_exfil_count · 3 · 탈취 데이터 종류 (연락처, 미디어, 사진)
phase_count · 5 · 분석 단계 수
contacts_access · 1 · 연락처 접근
camera_access · 1 · 카메라 접근
sms_access · 0 · SMS 접근 없음
storage_access · 1 · 저장소 접근
phone_access · 1 · 전화 상태 접근
location_access · 0 · 위치 접근 없음
network_access · 0 · 네트워크 상태 접근 없음
media_images · 0 · 미디어 이미지 권한 없음
media_video · 0 · 미디어 비디오 권한 없음
media_audio · 0 · 미디어 오디오 권한 없음
c2_known · 0 · C2 서버 미확인
tld_type · 0 · TLD 유형 불명
api_endpoint_count · 0 · API 엔드포인트 미발견
uses_https · 0 · HTTPS 사용 미확인
multi_c2 · 0 · 다중 C2 없음
has_jiagu · **1** · **Jiagu 보호 사용**
has_invitation_code · 0 · 초대코드 없음
bypass_level · 1 · 낮은 우회 수준
protection_level · **3** · **최고 보호 수준**
framework_code · 1 · Native Android
is_wavegrid · 0 · Wavegrid 패밀리 아님
threat_level_code · **4** · **EXTREME 위협**
analysis_depth · 0.2174 · 분석 깊이 21.74% (매우 제한적)
MALBIO 계통수(Phylogenetic Tree)에서의 위치:
```
Root
├── Cluster_18 (distance: 0.1609)
│ ├── myvideo (distance: 0.1289) ← GalleryVault Pro [독립 클러스터]
│ └── Cluster_12 (distance: 0.1289)
│ ├── leader_k (distance: 0.0547)
│ └── leetalk (distance: 0.0547)
└── (나머지 앱들)
```
특징: myvideo는 독립 클러스터(Singleton)를 형성한다. 어떤 다른 앱과도 같은 하위 클러스터에 속하지 않으며, 가장 가까운 클러스터(leader_k + leetalk)와도 상당한 거리(0.1289)를 유지한다.
앱 · 거
본 보고서는 주식회사 아크링크 Deep-Coding 보안연구소가 피싱·몸캠피싱 피해자 구제를 목적으로 작성했습니다. 전체 열람·피해 상담: arklink.co.kr