ETC

크레마 카르타G 부활시켜서 밀리의 서재 사용하기 ("통신 오류가 발생했습니다. 네트워크 상태를 확인해주세요.")

hegelty 2026. 8. 16. 21:20

이 글은 Debian 기준으로 설명합니다.

1. 해결 과정

1.1. 밀리의 서재 로그인이 안된다

오랜만에 이북리더(김정은 아님)에서 밀리의 서재로 책을 보려고 하니 로그인에 문제가 생겼다.

 

위 사진과 같이 "통신 오류가 발생했습니다. 네트워크 상태를 확인해주세요."라는 토스트 메세지가 뜨며 로그인이 되지 않는다.


앱 버전이 오래되어서 그런건가 싶어 업데이트를 하려 홈페이지에 들어가니 안드로이드 6 이상부터 지원한다는 문구가 추가된 것을 보고 한가지를 떠올렸다. 크레마 카르타 G의 OSs는 킷캣(안드로이드 4.4)이라는 사실을.

 

처음 구매한 2021년에도 킷캣은 너무한 것 아닌가 하는 생각을 했었는데, 아니나 다를까 작년 말부터 인증서 지원이 종료되었고, 그로 인해 문제가 생긴 것이었다.

1.2. 인증서 문제면 CA를 직접 집어넣으면 되지 않을까?

아주 쉽게 생각할 수 있는 해결책인 만큼, 나도 처음 생각한 방법은 바로 이것이었다.


ADB를 어떻게 연결할지 모르겠어서 별의별 방법으로 fast boot로 들어가는 방법을 찾아내고, TWRP로 부팅해서 CA를 집어넣었다.

 

내장 브라우저에서 뜨던 SSL 에러가 해결되었다.

1.3. OS가 너무 오래되어서 또 다른 문제가 생겼다...!

하지만 여전히 밀리의서재 에러 메세지는 달라지지 않았고, 이때부터 막막해지기 시작했다.


로그를 뒤져가며 파악한 결과 밀리에서 요구하는 TLS1.2를 킷캣에 들어있는 OpenSSL 1.0.1가 지원하지 않는다는 것을 확인할 수 있었다.


열심히 인터넷을 (에이전트가)뒤진 후, 이 글을 찾았고, 공유된 APK를 뜯어 브릿지 바이너리를 가져와 카르타G에 맞춰 설정했다.

 

2. 준비

2.1. 툴 설치

# adb / fastboot (platform-tools)
sudo apt install android-tools-adb android-tools-fastboot
# openssl (인증서/서버 분석용)
sudo apt install openssl

2.2. 필요한 파일 준비

파일 용도
   
twrp.3.3.1-0.img 무플래시 TWRP RAM 부팅 이미지 (fastboot boot용)
u-boot_carta-g.bin 부트로더 (만약의 복구용, 직접 플래시는 안 함)
millie-device-bridge Go 정적 ARM 바이너리 (밀리 브릿지)
millie-bridge.00~13 브릿지 분할 파일 (사운드업 system.img에서 추출)
soundup-install-recovery.sh 부팅 자동 실행 스크립트
Root CA 15개 시스템 CA 저장소에 추가할 인증서

TWRP / 툴킷 (카르타 G 전용)

사운드업 system.img (브릿지 소스)

최신 Root CA (시스템 CA 저장소에 추가할 인증서)

sudo apt install ca-certificates

# 파일명 = subject_hash_old, 내용 = PEM + SHA1 fingerprint
HASH=$(openssl x509 -in <ca>.crt -noout -subject_hash_old)
cp <ca>.crt $HASH.0
openssl x509 -in <ca>.crt -fingerprint -sha1 >> $HASH.0
  • 필요한 최소 CA:
    ISRG Root X1/X2, Google Trust Services R1/R3/R4, USERTrust RSA/ECC, DigiCert Global Root G2/G3, Amazon Root CA 1~4, Microsoft ECC/RSA 2017

밀리 브릿지 바이너리

밀리 APK(2.1.0.0)

curl -L -o millie-2.1.0.0.apk \
  "https://apis.millie.co.kr/v1/download/apk/millie-app-2.1.0.0.apk"

3. 방법

3.1 패스트부트 준비

  1. 기기 전원 종료
  2. 홈 + 전원을 동시에 5초
  3. PC에서 확인:
    fastboot devices
    # CREMA99B021046     Android fastboot

3.2 TWRP RAM 부팅

fastboot boot twrp.3.3.1-0.img
# 잠시 후 recovery 모드로 ADB 연결
adb devices
# CREMA99B021046    recovery

3.3 시스템 파티션 마운트 (TWRP)

adb shell 'mount -t ext4 /dev/block/mmcblk0p5 /system'

카르타 G 파티션은 p4가 실제 userdata(정상부팅 /data, TWRP에선 /sdcard1), p5=system 이다.

3.4 CA 백업

adb shell 'cd /system/etc/security/cacerts && tar czf /tmp/cacerts_backup.tar.gz .'
adb pull /tmp/cacerts_backup.tar.gz .

3.5 정상 부팅에서 ADB 활성화

  • ramdisk default.prop: ro.debuggable=0 (user build → adbd 기본 비활성)
  • build.prop보다 /data/property/persist.sys.usb.config가 우선
    # TWRP에서 (정상부팅 /data = TWRP /sdcard1)
    adb shell 'echo -n "mtp,adb" > /sdcard1/property/persist.sys.usb.config'
    # 이후 정상 부팅에서도
    adb devices   # CREMA99B021046    device  (root shell 가능)

3.6 CA 추가

    1. 최신 Root CA 15개를 PEM + SHA1 fingerprint 형식으로 준비
    2. 파일명 = openssl x509 -subject_hash_old 값 + .0
    3. /system/etc/security/cacerts/에 복사, 0644, root:root
      # 예: ISRG Root X1
      openssl x509 -in isrg-root-x1.pem -noout -subject_hash_old
      # 6187b673
      cp isrg-root-x1.pem /system/etc/security/cacerts/6187b673.0
      chmod 0644 /system/etc/security/cacerts/6187b673.0
    4. 재부팅 → 브라우저 HTTPS 정상화

추가한 CA: ISRG X1/X2, GTS R1/R3/R4, USERTrust RSA/ECC, DigiCert G2/G3, Amazon Root CA 1~4, MS ECC/RSA 2017

3.7 브릿지 설치

  1. 브릿지 분할 파일을 /system/etc/에 배치
    adb push millie-bridge.00 ~ /system/etc/
  2. (부팅 스크립트가 재조립) /system/etc/millie-bridge.*/data/local/millie_bridge/bin/millie-device-bridge
    cat /system/etc/millie-bridge.* > /data/local/millie_bridge/bin/millie-device-bridge
    chmod 0755 /data/local/millie_bridge/bin/millie-device-bridge

3.8 부팅 스크립트 등록 (/system/etc/install-recovery.sh)

부팅 시 root로 실행되며, 아래와 같은 작업을 하는 스크립트다.

  • 브릿지 재조립 + --init-ca + --daemon 실행
  • iptables: 80/443/8000-8999 → 18080 REDIRECT
  • 교보 포그라운드 → proxy ON, 밀리 → proxy OFF (자동 전환)
  • USB 디버깅 설정(mtp,adb), 로그 기록(/data/local/millie_bridge/bridge-init.log)
    adb push install-recovery.sh /system/etc/install-recovery.sh
    adb shell 'chmod 0755 /system/etc/install-recovery.sh'

브릿지 --init-ca가 부팅 시 CA를 새로 만들면 시스템에 주입된 CA와 달라져 밀리가 Trust anchor not found로 실패한다.
시스템 CA를 브릿지의 현재 ca.pem과 동기화해야 함!

# TWRP에서
cp /data/local/millie_bridge/ca.pem /system/etc/security/cacerts/7b304d11.0
chmod 0644 /system/etc/security/cacerts/7b304d11.0
# 검증
cmp /system/etc/security/cacerts/7b304d11.0 /data/local/millie_bridge/ca.pem && echo 일치

3.9 밀리 앱 설치

adb push millie-2.1.0.0.apk /data/local/tmp/
adb shell 'pm install -r /data/local/tmp/millie-2.1.0.0.apk'
adb shell 'dumpsys package kr.co.millie.eink | grep versionName'
# versionName=2.1.0.0

3.10 검증

# WiFi 연결 후 밀리 실행
adb shell 'am start -n kr.co.millie.eink/.SplashActivity'
# 브릿지 로그 확인
adb shell 'tail -30 /data/local/millie_bridge/bridge.log'
# 기대 성공 로그:
#   transparent HTTPS api.millie.co.kr
#   HTTPS POST https://api.millie.co.kr/V2/Api.php?...&app_ver=2.1.0.0&... -> 200
#   HTTPS GET https://install.millie.co.kr/lib/epub-latest.json -> 200
# 밀리 앱: LoginActivity 도달, SSL 예외 없음
  • 화면에서 로그인 시도 → 성공 여부 확인

4. 출처 및 소스코드