분석 기관: 주식회사 아크링크 (사업자등록번호: 378-88-03382)
분석자: [비공개] 대표
최초 분석일: 2026-02-05
보고서 버전: v3.0 (2026-02-13 ML Gold Standard 심층 분석 - 언팩 DEX 전수 분석, API 엔드포인트 추출, 네이티브 바이너리 SHA256 동일성 검증, "AnLei(暗雷)" 작전명 발견, 기법 카탈로그)
분석 목적: 피싱/스미싱 [피해자 정보 비공개] 위한 악성앱 분석
항목 · 내용
**파일명** · 250924_LeeTalk.apk
**파일 크기** · 12,159,711 bytes (11.6 MB)
**패키지명** · `pufpu.golorboaej.tcnrbxkkfd.htgflzyhfo` (난독화된 무작위 문자열)
**내부 패키지명** · `com.jiazai.mx.durian`
**앱 이름** · LeeTalk (strings.xml 내부명: BeeTALK)
**Target SDK** · 34 (Android 14)
**Compile SDK** · 34
**DEX 버전** · dex.035
**Application 클래스** · `com.frezrik.jiagu.StubApp`
**Main Activity** · `com.jiazai.mx.durian.ui.home.MainActivity`
**보호 방식** · Frezrik Jiagu (加固)
**프레임워크** · Kotlin + OkHttp3 + Glide + Jetpack Compose + OkDownload + ZXing
**패밀리** · durian
패키지명 pufpu.golorboaej.tcnrbxkkfd.htgflzyhfo는 무작위 문자열 생성기로 자동 생성된 것으로, 정상적인 앱의 com.회사명.앱명 형식과 전혀 다릅니다. 이는 대량 자동 생성으로 안티바이러스 시그니처를 우회하고, 추적을 방지하기 위한 의도적 은폐입니다.
내부 패키지 com.jiazai.mx.durian에서 jiazai(加载, 로딩)는 중국어이며, durian은 이 악성앱 패밀리의 코드명입니다.
라이브러리 · 용도 · 악성 활용
OkHttp 3 · HTTP 클라이언트 · C2 서버 통신, 탈취 데이터 전송
Glide (OkHttpGlideModule) · 이미지 로딩/캐싱 · 피싱 UI 이미지 표시
Jetpack Compose · UI 프레임워크 · 현대적 피싱 UI 구현
Kotlin Coroutines · 비동기 처리 · 백그라운드 데이터 탈취
OkDownload (com.liulishuo.okdownload) · 다운로드 관리 · 추가 페이로드 다운로드
ZXing (com.yzq.zxinglibrary) · QR 코드 스캔 · QR 코드 기반 악성앱 배포
ShareTrace · 앱 유입 경로 추적 · [피해자 정보 비공개] 채널 분석 (중국 마케팅 SDK)
Emoji2 (androidx.emoji2) · 이모지 호환성 · UI 표시
strings.xml에서 확인된 주요 중국어 문자열:
문자열 키 · 값 · 해석
`contact` · 通讯录 · 연락처 (탈취 대상)
`message` · 短信 · 문자메시지 (탈취 대상)
`photo` · 相册 · 사진앨범 (탈취 대상)
`invitation_code` · 输入邀请码 · 초대코드 입력
`invalid_invite_code` · 邀请码无效或不存在 · 초대코드 무효
`please_allow_contact_permission` · 请允许通讯录权限后继续 · 연락처 권한 허용 요청
`please_allow_photo_permission` · 请允许相册权限后继续 · 사진 권한 허용 요청
`privacy_protection_starting` · 正在开启保护隐私中!2秒后重启 · 프라이버시 보호 위장
`login_success` · 登录成功!加载中... · 로그인 성공
`select_language` · 选择语言 · 언어 선택
`korean` · 한국어 · 한국어 지원
`japanese` · 日本語 · 일본어 지원
`simplified_chinese` · 简体中文 · 중국어 간체 지원
`traditional_chinese` · 繁體中文 · 중국어 번체 지원
`english` · English · 영어 지원
핵심 발견: privacy_protection_starting = "正在开启保护隐私中!2秒后重启" (프라이버시 보호 켜는 중! 2초 후 재시작) -- 이는 데이터 탈취 행위를 "프라이버시 보호"로 위장하는 기만적 UI입니다.
권한 · 위험도 · 용도 (추정) · 피해 시나리오
`READ_CONTACTS` · **극심** · 연락처 전체 읽기 · 피해자의 모든 지인 연락처 탈취 후 유포 위협
`READ_EXTERNAL_STORAGE` · **극심** · 외부 저장소 파일 읽기 · 사진, 문서 등 개인 파일 탈취
`READ_MEDIA_IMAGES` · **극심** · 미디어 이미지 접근 · 갤러리 사진 탈취 (Android 13+)
`CAMERA` · **극심** · 카메라 촬영 · 몸캠 녹화 핵심 기능
`WRITE_EXTERNAL_STORAGE` · **높음** · 외부 저장소 쓰기 · 악성 파일 저장, 추가 페이로드 기록
`QUERY_ALL_PACKAGES` · **높음** · 설치 앱 목록 조회 · 금융앱 설치 여부로 [피해자 정보 비공개] 파악
`POST_NOTIFICATIONS` · **중간** · 알림 표시 · 피싱 알림으로 앱 재접속 유도
`INTERNET` · 일반 · 네트워크 통신 · C2 서버 연결 및 데이터 전송
`ACCESS_NETWORK_STATE` · 일반 · 네트워크 상태 확인 · 전송 가능 여부 판단
`ACCESS_WIFI_STATE` · 일반 · WiFi 상태 확인 · 네트워크 환경 감지
`CHANGE_NETWORK_STATE` · 일반 · 네트워크 상태 변경 · 네트워크 연결 조작
`FLASHLIGHT` · 낮음 · 플래시 제어 · 카메라 보조
`VIBRATE` · 낮음 · 진동 · 알림 진동
`WAKE_LOCK` · 낮음 · 화면 깨우기 · 백그라운드 동작 유지
하드웨어 · required · 목적 분석
`android.hardware.telephony` · true · SIM 카드 필수 -- 전화번호 기반 [피해자 정보 비공개]
`android.hardware.location` · true · 위치 추적 -- [피해자 정보 비공개] 위치 파악
`android.hardware.camera.front` · true · 전면 카메라 -- **몸캠 녹화 핵심 기능**
`android.software.webview` · true · 웹뷰 -- 피싱 페이지 표시
`android.hardware.camera.autofocus` · true · 자동 초점 -- 선명한 영상 확보
`android.hardware.camera` · true · 후면 카메라 -- 촬영 기능
해석: 전면 카메라(camera.front)와 자동 초점(autofocus)을 모두 required=true로 설정한 것은 피해자의 얼굴/신체를 선명하게 촬영하여 협박 자료로 사용하려는 의도가 명백합니다.
```
pufpu.golorboaej.tcnrbxkkfd.htgflzyhfo.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
```
· Protection Level: signature
· 동적 브로드캐스트 리시버의 외부 접근을 제한하는 자체 보호 권한
유형 · 클래스명 · 역할
**Application** · `com.frezrik.jiagu.StubApp` · Jiagu 패커 스텁 -- 실제 Application 로딩
**MainActivity** · `com.jiazai.mx.durian.ui.home.MainActivity` · 메인 로그인 화면 (exported=true, LAUNCHER)
**MainActivity2** · `com.jiazai.mx.durian.ui.home.MainActivity2` · 보조 화면 (exported=true)
**MaintenanceActivity** · `com.jiazai.mx.durian.ui.home.MaintenanceActivity` · 유지보수 화면 (exported=false)
**MyServices** · `com.jiazai.mx.durian.ui.MyServices` · 백그라운드 서비스 (exported=true) -- 데이터 탈취
**CaptureActivity** · `com.yzq.zxinglibrary.android.CaptureActivity` · QR 코드 스캔
**InitializationProvider** · `androidx.startup.InitializationProvider` · 앱 초기화 (Emoji2, Lifecycle, ProfileInstaller)
**OkDownloadProvider** · `com.liulishuo.okdownload.OkDownloadProvider` · 다운로드 관리
**ProfileInstallReceiver** · `androidx.profileinstaller.ProfileInstallReceiver` · 프로파일 설치
Frezrik Jiagu는 오픈소스 기반 네이티브 패커로, 다음과 같은 계층 구조를 가집니다:
```
[외부 껍질] StubApp.smali (Dalvik 바이트코드)
+-- attachBaseContext() 진입
+-- CPU 아키텍처 감지 (ARM/ARM64/x86/x86_64)
+-- assets/libjiagu_*.so를 .jiagu/ 디렉토리로 복사
+-- System.load() 네이티브 라이브러리 로드
+-- native attach(StubApp) 호출
[네이티브 레이어] libjiagu_*.so (C/C++ ELF 바이너리)
+-- JNI_OnLoad() -- JNI 초기화
+-- native_attach() -- DEX 복호화 엔진
+-- AES 복호화 (암호화된 DEX 코드 복원)
+-- mmap() -- 메모리에 DEX 매핑
+-- mprotect() -- 실행 권한 부여
[복호화된 실제 앱] com.jiazai.mx.durian.*
+-- invoke2() -- Application 교체 (Java Reflection)
+-- onCreate() -- 실제 앱 시작
```
attachBaseContext() -- 1268줄의 smali 코드에서 확인된 로직:
1. Context.getFilesDir().getParentFile().getAbsolutePath() -- 앱 내부 경로 획득
2. .jiagu 디렉토리 생성 (존재하지 않으면)
3. /.jiagu/libjiaguv1.so 경로로 SO 파일 복사 대상 경로 구성
4. CPU_ABI 확인: "64" 포함 여부로 64비트 판단
5. 아키텍처별 SO 선택: libjiagu_64.so / libjiagu.so / libjiagu_x86.so / libjiagu_x86_64.so
6. 기존 .jiagu/ 파일 전체 삭제 후 새로 복사
7. assets/에서 해당 SO 파일을 InputStream으로 읽어 .jiagu/ 디렉토리에 FileOutputStream으로 저장 (8KB 버퍼)
8. System.load(path) -- 네이티브 라이브러리 로드
9. StubApp.attach(this) -- 네이티브 진입점 (여기서 DEX 복호화 수행)
invoke1(String) -- 암호화된 DEX 추출:
1. APK 파일을 ZipFile로 열기
2. classes.dex 엔트리 탐색
3. DEX 바이트 배열을 ByteArrayOutputStream으로 추출
4. 반환된 byte[]를 네이티브 코드에서 복호화에 사용
invoke2(Application, String) -- 실제 Application 교체:
1. 대상 Application 클래스명 유효성 검증 (com.frezrik.jiagu.StubApp이면 스킵)
2. getClassLoader().loadClass(className).newInstance() -- 실제 Application 인스턴스 생성
3. La/a/a/a/a;->a 필드에 실제 Application 저장 (ApplicationHook)
4. Java Reflection으로 Application.attach(Context) 호출
5. Log.w("NDK_JIAGU", "hook") 디버그 로그
onCreate() -- Application Context 교체:
1. a/a/a/a/a.a (ApplicationHook)의 Application 참조 확인
2. setOuterContext() -- BaseContext의 외부 컨텍스트를 실제 앱으로 교체
3. mMainThread 접근 -- ActivityThread 참조 획득
4. mInitialApplication 교체 -- 초기 Application을 실제 앱으로
5. mAllApplications -- ArrayList에서 StubApp 제거, 실제 앱 추가
6. mPackageInfo.mApplication 교체 -- LoadedApk의 Application 참조
7. mApplicationInfo.className 교체 -- ApplicationInfo 업데이트
8. realApp.onCreate() 호출 -- 실제 앱의 onCreate 실행
getPackageName() -- "JIAGU" 문자열 반환 (패커 식별 마커)
createPackageContext() -- ContentProvider 교체:
1. mProviderMap 순회
2. 각 ContentProvider의 mLocalProvider.mContext를 실제 앱으로 교체
3. 모든 ContentProvider가 실제 Application을 참조하도록 변경
· 소스 파일: ApplicationHook.java
· 정적 필드: public static a:Landroid/app/Application; (실제 Application 참조)
· 주요 메서드:
· a(Class, Object, String) -> Object -- Reflection으로 필드 값 획득 (getDeclaredField + setAccessible)
· a(String, Object, String, Object) -> boolean -- Reflection으로 필드 값 설정
· a(Class, Object, Object[], String, Class[]) -> Object -- Reflection으로 메서드 호출
서버 · 용도 · 프로토콜 · 상태
`[비공개] · 주요 C2 서버 · HTTP (평문) · 오프라인
`[비공개] · 백업 C2 서버 · HTTPS · 오프라인
`[비공개] · 설정/인덱스 서버 · HTTPS · 온라인 (확인 시점)
`[비공개] · 추적/분석 서비스 · HTTPS · 정상 동작
주요 C2: [비공개]
· 호스팅: AWS ap-southeast-1 (싱가포르)
· 포트: 8101 (비표준)
· 프로토콜: HTTP 평문 -- 중간자 공격 취약
백업 C2: [비공개]
· 도메인 해석: wuaipojiewang = "我爱破解网" (나는 크래킹 네트워크를 사랑한다)
· .vip TLD 사용 -- 중국 발 도메인 특징
· HTTPS 사용
**인덱스 서버: [비공개]
· 리다이렉트/설정 서버 역할
· /hg 엔드포인트 -- 앱 설정 데이터 제공 추정
· .[비공개] 무료 도메인 사용 -- 추적 회피
```xml
<!-- res/xml/network_security_config.xml -->
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
```
cleartextTrafficPermitted="true" -- HTTP 평문 통신 허용. Android 9+ 기본값(HTTPS만 허용)을 의도적으로 우회하여 평문 데이터 전송을 가능하게 합니다.
```
[피해자 정보 비공개]
+--[1순위]--> [비공개] (주 C2, AWS 싱가포르)
-- 실패 시
+--[2순위]--> [비공개] (백업 C2)
-- 실패 시
+--[3순위]--> [비공개] (인덱스 서버에서 새 주소 획득)
```
Frezrik Jiagu 프레임워크 사용. 4개 아키텍처 모두 지원:
네이티브 라이브러리 · 아키텍처 · 크기
`assets/libjiagu.so` · ARM 32-bit (ELF) · 129,012 bytes
`assets/libjiagu_64.so` · ARM 64-bit (ELF) · 235,992 bytes
`assets/libjiagu_x86.so` · x86 32-bit · 227,368 bytes
`assets/libjiagu_x86_64.so` · x86 64-bit · 256,744 bytes
동작 흐름:
1. StubApp.attachBaseContext() -- CPU ABI 감지
2. assets/libjiagu_*.so -> <app_data>/.jiagu/libjiaguv1.so로 복사
3. System.load() -- 네이티브 라이브러리 동적 로드
4. native attach(StubApp) -- JNI 진입점에서 DEX 복호화
5. 메모리에 복호화된 DEX 로드 (mmap + mprotect)
6. Reflection 기반 Application 교체
한계: classes.dex에는 StubApp과 ApplicationHook만 존재하며, 실제 악성 코드는 네이티브 라이브러리 내부에 암호화되어 있어 정적 분석으로 접근 불가합니다.
· 외부 패키지: pufpu.golorboaej.tcnrbxkkfd.htgflzyhfo (무작위)
· 내부 패키지: com.jiazai.mx.durian (실제 코드 패키지)
· 피해자별 고유 패키지명 생성으로 AV 시그니처 우회
· UI 필드: et_login_yqm (邀请码 = 초대코드)
· 아이콘: @drawable/ic_invite
· strings.xml 확인: invite_code_hint = "请输入邀请码", invalid_invite_code = "邀请码无效或不存在"
· 초대코드 형식: 6자리 (invalid_invite_code_format = "邀请码必须为6位数字")
· 확인된 초대코드: 8888 (피해 사례 보고됨)
· 서버 기반 검증 -- smali 패치 또는 네트워크 가로채기 필요
strings.xml에서 확인된 지원 언어:
· 한국어 (한국어)
· 日本語 (일본어)
· 简体中文 (중국어 간체)
· 繁體中文 (중국어 번체)
· English (영어)
언어 전환 버튼 존재하나 visibility="gone" -- 서버에서 동적으로 표시 여부 결정.
libjiagu SO 바이너리 내부에 __system_property_get 함수 참조 존재 -- Build.FINGERPRINT, Build.MODEL 등 시스템 속성을 검사하여 에뮬레이터를 탐지하는 것으로 추정됩니다. (네이티브 바이너리 분석 제한으로 정확한 메커니즘 미확인)
데이터 유형 · 관련 권한 · 위험도 · 협박 활용 방식
**연락처 전체** · READ_CONTACTS · 극심 · 피해자의 모든 지인에게 유포 위협
**갤러리 이미지** · READ_MEDIA_IMAGES, READ_EXTERNAL_STORAGE · 극심 · 개인 사진 탈취 후 합성/유포 위협
**카메라 영상** · CAMERA · 극심 · 실시간 몸캠 녹화 후 유포 위협
**설치 앱 목록** · QUERY_ALL_PACKAGES · 높음 · 금융앱 설치 여부로 [피해자 정보 비공개] 파악
**파일/문서** · READ_EXTERNAL_STORAGE · 높음 · 개인 문서, 사진 등 탈취
```
[피해자 정보 비공개]
+-- [연락처] READ_CONTACTS --> OkHttp3 --> C2 서버 ([비공개])
+-- [사진] READ_MEDIA_IMAGES --> OkHttp3 --> C2 서버
+-- [영상] CAMERA --> 녹화 --> OkHttp3 --> C2 서버
+-- [앱목록] QUERY_ALL_PACKAGES --> OkHttp3 --> C2 서버
공격자 (협박/금전 요구)
```
· 네트워크 라이브러리: OkHttp3 (Glide의 OkHttpGlideModule 연동 확인)
· 다운로드: OkDownload (com.liulishuo.okdownload) -- 추가 페이로드 수신
· 전송 프로토콜: HTTP 평문 + HTTPS 혼용 (cleartextTrafficPermitted=true)
· 추적 SDK: ShareTrace ([비공개]) -- [피해자 정보 비공개] 경로 분석
strings.xml에서 확인된 기만적 문자열:
· privacy_protection_starting: "正在开启保护隐私中!2秒后重启" (프라이버시 보호 켜는 중! 2초 후 재시작)
· privacy_protection_success: "开启保护隐私成功!" (프라이버시 보호 성공!)
데이터 탈취 행위를 "프라이버시 보호" 기능으로 위장하여 피해자가 권한을 허용하도록 유도합니다.
방어기제 · 상태 · 난이도 · 비고
Jiagu 네이티브 패킹 · 식별됨 · 극상 · AES 키 추출 또는 런타임 DEX 덤프 필요
초대코드 검증 · 식별됨 · 상 · 서버 측 검증 -- smali 패치 또는 MITM 필요
패키지명 난독화 · 분석 완료 · - · 내부 패키지 com.jiazai.mx.durian 확인
에뮬레이터 탐지 · 추정됨 · 중 · __system_property_get 호출 확인
경로 A: 런타임 DEX 덤프
1. Frida를 사용하여 mmap() 후 복호화된 DEX를 메모리에서 덤프
2. 덤프된 DEX에서 실제 악성 코드 분석
3. C2 통신 로직, 데이터 탈취 함수 식별
경로 B: 네이티브 바이너리 분석
1. Ghidra/IDA Pro로 libjiagu_64.so 분석
2. AES 키/IV 추출
3. 암호화된 DEX를 오프라인 복호화
· Jiagu 패커의 네이티브 복호화 로직이 SO 바이너리 내부에 있어, 정적 분석만으로는 실제 악성 코드에 접근 불가
· classes.dex에는 StubApp.smali와 ApplicationHook.java(a/a/a/a/a.smali)만 존재
· 실제 데이터 탈취 함수, C2 통신 프로토콜, API 엔드포인트는 복호화된 DEX에서만 확인 가능
항목 · 값
**패밀리** · durian
**내부 패키지** · `com.jiazai.mx.durian`
**패커** · Frezrik Jiagu (com.frezrik.jiagu)
**패밀리 변종** · durian (Jiagu 보호 적용)
durian 패밀리는 다음 유전자를 공유합니다:
1. 내부 패키지: com.jiazai.mx.durian (모든 변종 동일)
2. StubApp 구조: com.frezrik.jiagu.StubApp (동일 패커)
3. Application Hook: a/a/a/a/a.smali (ApplicationHook.java)
4. 네이티브 라이브러리: 4개 아키텍처 동일 크기 (libjiagu.so: 129,012 / libjiagu_64.so: 235,992 / libjiagu_x86.so: 227,368 / libjiagu_x86_64.so: 256,744)
5. 컴포넌트 패턴: MainActivity, MainActivity2, MaintenanceActivity, MyServices
6. 라이브러리 스택: OkHttp3 + Glide + OkDownload + ZXing
7. 패키지명 난독화: 무작위 문자열 패턴
앱명 · 패키지명 (난독화) · 내부 패키지 · libjiagu 크기 일치
**LeeTalk** · pufpu.golorboaej.tcnrbxkkfd.htgflzyhfo · com.jiazai.mx.durian · 일치 (4개 모두 동일)
**Leader K** · hfsymlqrq.hmhg.nulybhh.ovvignhccq · com.jiazai.mx.durian · 일치 (4개 모두 동일)
두 앱의 libjiagu SO 파일 크기가 바이트 단위까지 완전히 일치하며, 동일한 Jiagu 빌드를 사용한 것으로 확인됩니다.
차원 · 유전자 · LeeTalk
패킹 · Frezrik Jiagu · 확인
암호화 · AES (추정) · 추정
내부 패키지 · com.jiazai.mx.durian · 확인
Application · StubApp · 확인
네트워크 · OkHttp3 · 확인
이미지 · Glide · 확인
다운로드 · OkDownload · 확인
QR · ZXing · 확인
추적 · ShareTrace · 확인
UI · Jetpack Compose · 확인
초대코드 · 서버 검증 · 확인
연락처 탈취 · READ_CONTACTS · 확인
이미지 탈취 · READ_MEDIA_IMAGES · 확인
카메라 · CAMERA · 확인
다국어 · 한/중/일/영 · 확인
앱 목록 · QUERY_ALL_PACKAGES · 확인
서비스 · MyServices · 확인
유지보수 · MaintenanceActivity · 확인
네트워크 설정 · cleartext=true · 확인
에뮬레이터 탐지 · __system_property_get · 추정
C2 다중화 · 3개 서버 · 확인
기만 UI · 프라이버시 보호 위장 · 확인
카테고리 · 점수 (1-10) · 근거
**금융 피해** · 8/10 · 몸캠 녹화 후 금전 요구, 설치 앱 목록으로 지불능력 파악
**프라이버시 침해** · 9/10 · 연락처 전체, 갤러리 사진, 카메라 영상 탈취
**심리적 피해** · 9/10 · 몸캠 유포 협박에 의한 극심한 정신적 고통, 자살 충동 가능
**사회적 피해** · 8/10 · 연락처 기반 지인 전체에 유포 위협, 사회적 평판 훼손
**시간적 피해** · 6/10 · 피해 대응에 소요되는 시간 (경찰 신고, 연락처 변경 등)
**통제권 상실** · 9/10 · 카메라, 연락처, 저장소 등 기기 핵심 기능 탈취, 백그라운드 서비스
종합 위협도: 8.2 / 10 (HIGH)
1. 접근: 로맨스 스캠 채널을 통해 피해자에게 앱 설치 유도
2. 설치: 피해자가 APK 설치 후 초대코드 8888 입력
3. 권한 획득: "프라이버시 보호" 위장으로 연락처/사진/카메라 권한 획득
4. 탈취: 연락처 전체 + 갤러리 사진을 C2 서버로 전송
5. 녹화: 영상통화 중 몸캠 녹화
6. 협박: "연락처에 있는 모든 사람에게 영상을 보내겠다" 금전 요구
7. 반복: 금전 지불 후에도 추가 요구 반복
도메인:
· [비공개] (중국어 "我爱破解网" -- 크래킹 네트워크)
· [비공개] (인덱스/리다이렉트 서버)
· [비공개] (중국 마케팅 추적 SDK)
IP 주소:
· [비공개] (AWS ap-southeast-1, 싱가포르)
URL 패턴:
· `[비공개] (주 C2)
· `[비공개] (백업 C2)
· `[비공개] (인덱스)
· `[비공개] (추적)
패키지명:
· pufpu.golorboaej.tcnrbxkkfd.htgflzyhfo (외부, 난독화)
· com.jiazai.mx.durian (내부, 실제)
특징 파일:
· assets/libjiagu.so (129,012 bytes)
· assets/libjiagu_64.so (235,992 bytes)
· assets/libjiagu_x86.so (227,368 bytes)
· assets/libjiagu_x86_64.so (256,744 bytes)
특징 클래스:
· com.frezrik.jiagu.StubApp
· a.a.a.a.a (ApplicationHook)
특징 문자열:
· "NDK_JIAGU" (Log 태그)
· ".jiagu" (작업 디렉토리)
· "libjiaguv1.so" (복사 대상 파일명)
· "JIAGU" (getPackageName 반환값)
· "BeeTALK" (strings.xml app_name)
· 인증서 유형: 자체 서명 (Debug 서명 추정)
· 정밀 인증서 분석은 원본 APK의 META-INF 확인 필요
항목 · 분석 결과
**출신 추정** · 중국
**근거** · 중국어 strings.xml, [비공개] 도메인, Jiagu(加固) 프레임워크, ShareTrace(중국 SDK), "com.jiazai"(加载) 패키지명
**타겟** · 한국 사용자 (한국어 UI 기본), 일본 사용자 (일본어 지원)
**공격 유형** · 로맨스 스캠 / 몸캠피싱
**인프라** · AWS 싱가포르 + 중국 도메인 + EU 무료 도메인
날짜 · 단계 · 내용
2026-02-05 · Phase 1 · APK 디컴파일 (apktool), 구조 분석, AndroidManifest.xml 파싱
2026-02-05 · Phase 2 · Jiagu 보호 식별, StubApp.smali 분석, 권한 분석
2026-02-05 · Phase 3 · 동적 분석, UI 흐름 확인, 로그인 화면 분석
2026-02-05 · Phase 4 · C2 서버 추출, IOC 정리, 네트워크 인프라 분석
2026-02-12 · Phase 5 · 11섹션 표준 포맷 업그레이드, StubApp 심층 분석, strings.xml 분석, durian 패밀리 연관성 분석, MALBIO 유전체 분석
2026-02-13 · Phase 6 · 언팩 DEX 심층 분석 (17.4MB, 149,991 문자열, 204 클래스), "AnLei(暗雷)" 작전 코드명 발견, API 엔드포인트 7개 전수 추출
2026-02-13 · Phase 7 · 네이티브 SO 바이너리 문자열 분석 (1,217개), AES 함수 체인 10개 매핑, VMDEX 커스텀 포맷 분석, Custom NDK Loader 분석
2026-02-13 · Phase 8 · Leader K SHA256 바이너리 동일성 검증, 버전 진화 분석 (LeeTalk v6 vs Leader K v2), UI 레이아웃 심층 분석
2026-02-13 · Phase 9 · EmulatorCheck + LDNetUtil 이중 에뮬레이터 탐지 분석, SSLSocketClient 취약점 분석, 기법 카탈로그 T058-T062
2026-02-13 · Phase 10 · 26차원 MALBIO 유전체 완전 매핑, v2.0 추정값 → v3.0 확인값 전환, 피해 영향 재평가
Jiagu 패커로 암호화된 실제 악성 코드를 런타임 덤프를 통해 추출하였습니다.
항목 · 값
**원본 경로** · `250924_LeeTalk_unpacked/classes.dex`
**DEX 크기** · 17,457,220 bytes (16.6 MB)
**추출된 문자열** · 149,991개 (6자 이상)
**durian 내부 클래스** · 204개
**발견된 API 엔드포인트** · 7개
**작전 코드명** · "AnLei" (暗雷 = 암뢰/다크 썬더)
API 엔드포인트에 사용된 AnLei는 중국어 暗雷(àn léi)로, 직역하면 "숨겨진 지뢰" 또는 "다크 썬더"입니다.
· 暗(àn): 어둡다, 숨기다, 몰래
· 雷(léi): 천둥, 지뢰
중국 해커 커뮤니티에서 "숨겨진 트랩/함정"을 의미하는 은어로, 피해자가 모르는 사이에 작동하는 악성 코드를 지칭합니다. API 접두사에 작전 코드명을 직접 사용한 것은 공격자의 의도를 직접적으로 드러냅니다.
# · 메서드 · 엔드포인트 · 목적 · 위험도
1 · POST · `api/Anlei/register?type=android&userId=` · [피해자 정보 비공개] 등록 · **극심**
2 · POST · `api/AnLei/uploadImg?type=android&userId=` · 갤러리 이미지 탈취 업로드 · **극심**
3 · POST · `api/Anlei/subSmsList?type=android&userId=` · SMS 문자 목록 제출 · **극심**
4 · POST · `api/Anlei/subAddress?type=ios&userId=` · 연락처(주소록) 제출 · **극심**
5 · POST · `/UploadImage` · 이미지 업로드 (별도 경로) · **극심**
6 · POST · `[비공개] · ShareTrace [피해자 정보 비공개] · 높음
7 · GET · `[비공개] · ShareTrace 상태 확인 · 중간
핵심 발견: subAddress API의 type=ios는 iOS 버전에서 사용하던 코드가 Android에 재사용된 증거입니다. 이는 크로스 플랫폼 악성앱 운영 (iOS + Android 동시 공격)을 의미합니다.
```
[Phase 1: 등록]
[피해자 정보 비공개] → api/Anlei/register?type=android&us
본 보고서는 주식회사 아크링크 Deep-Coding 보안연구소가 피싱·몸캠피싱 피해자 구제를 목적으로 작성했습니다. 전체 열람·피해 상담: arklink.co.kr