# 모바일 앱에서 AI 모델 추출하기

> Clean Markdown view of GeekNews topic #18593. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18593](https://news.hada.io/topic?id=18593)
- GeekNews Markdown: [https://news.hada.io/topic/18593.md](https://news.hada.io/topic/18593.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-06T10:06:51+09:00
- Updated: 2025-01-06T10:06:51+09:00
- Original source: [altayakkus.substack.com](https://altayakkus.substack.com/p/you-wouldnt-download-an-ai)
- Points: 14
- Comments: 3

## Summary

많은 모바일 앱이 AI 모델을 기기에 직접 통합하여 빠른 추론과 오프라인 접근을 가능하게 하지만, 이는 사용자가 모델 파일을 추출하고 분석할 수 있는 위험도 내포합니다. Microsoft의 Seeing AI 앱은 시각 장애인을 위한 "말하는 카메라"로, 다양한 물체와 화폐를 인식하며, 앱의 AI 모델은 암호화된 상태로 APK 파일에 포함되어 있습니다. 글에서는 Frida와 같은 도구를 사용하여 앱의 메서드 호출을 추적하고 복호화된 모델을 추출하는 방법을 시연하고 있는데, 이러한 방법은 연구 목적으로 사용되어야 하며 저작권 문제를 고려해야 합니다.

## Topic Body

- 많은 앱이 AI 모델을 기기에 직접 통합하고 있음. 이는 빠른 추론과 오프라인 접근이 중요한 경우에 유리함  
- 하지만 기기 내부에 모델 파일이 존재한다는 것은 사용자가 해당 파일을 추출하고 분석할 수도 있음을 의미함  
  
### 목표  
- Microsoft의 Seeing AI 앱은 시각 장애인을 위한 "말하는 카메라"로, 물체, 문서, 화폐 등을 인식하여 음성으로 설명해 줌  
- 특히 화폐(currency) 인식 기능은 17개 이상의 통화를 지원하며, 225개의 고유한 지폐를 인식함  
- 앱 배포 형식인 APK 파일 안에 모델이 포함되어 있지만, 암호화된 상태의 파일(`currency`)로 존재함  
- 파일이 단순 암호화되어 있으면, 앱 실행 중 메모리나 복호화 과정을 추적해 파일을 추출할 수 있음  
  
### 초기 조사  
- Android 앱은 APK 파일로 배포되며, 이는 앱 실행에 필요한 모든 것을 포함하는 아카이브임.  
- AI 모델은 일반적으로 이러한 자산과 함께 저장됨  
- `apktool`을 사용하여 APK를 디컴파일하고 구조를 분석할 수 있음  
- `assets` 폴더에서 `currency`라는 파일을 발견했으나, 암호화되어 있음  
  
### 더 나아가기   
- 앱이 `currency` 파일을 어떻게 복호화하는지 역공학할 수 있음  
- TensorFlow Lite가 `com.microsoft.seeingai`에서 사용됨을 확인함  
- `org.tensorflow.lite.NativeInterpreterWrapper`를 사용하여 `*.tflite` 모델을 로드할 수 있음  
  
### Frida 사용하기  
- Frida는 거의 모든 운영체제에서 실행 가능한 동적 계측 도구로, 실행 중인 프로세스에 연결하여 동작을 변경할 수 있음  
- 프로세스 실행 중에 붙어 메서드 호출을 추적하고, 인자와 반환값을 확인하거나, 메서드 내용을 원하는 로직으로 덮어쓸 수 있음  
  - 예: `checkKey(key)`를 무조건 `true`로 반환하도록 변경할 수도 있음  
- Objection은 Frida 스크립트를 모아놓은 CLI 도구로, 모바일 앱 연구에 유용함  
- `org.tensorflow.lite.NativeInterpreterWrapper`의 함수 호출을 추적하여 모델을 디스크에 덤프함  
  - 앱 실행 시 `.createModelWithBuffer(java.nio.ByteBuffer, long)`가 호출되는데, 이 때 전달되는 `ByteBuffer`가 복호화된 `.tflite` 모델일 가능성이 큼  
  - 훅킹을 통해 이 메서드를 덤프용 코드로 대체하면, 디스크에 해당 모델을 저장 가능함  
- `adb pull` 명령으로 추출한 `.tflite` 모델(`currency.tflite`)을 로컬 디바이스로 가져옴  
- Netron 같은 툴로 로드해 실제 TensorFlow Lite 모델이 맞는지(레이어, 가중치, 바이어스 등) 확인  
- 화폐 인식 모델의 완벽한 덤프 성공  
  
### CTRL + C; CTRL + V  
- TensorFlow Lite를 사용하는 앱에 대해 이 공격을 활용할 수 있음  
- 예를 들어 Adobe Scan은 내가 실제로 자주 사용하는 멋진 앱으로, 휴대폰 카메라로 문서를 스캔하는 것이 가장 좋은 기능  
  - 누군가..  
  
### 주의사항  
- 추출된 모델은 저작권이 있으므로, 적법한 허가 없이 무단 사용/수정은 지양해야 함  
- 본 포스팅의 방법은 연구 목적이며, 실제 적용 시 관련 법규와 지적 재산권 이슈를 고려할 필요가 있음

## Comments



### Comment 33398

- Author: yangeok
- Created: 2025-01-14T08:16:24+09:00
- Points: 1

와 모델도 리버싱,,

### Comment 33045

- Author: jhj0517
- Created: 2025-01-06T15:37:48+09:00
- Points: 1

우와 apk 파일로 부터 weight 파일을 추출??  
특정 라이브러리 한정이라지만 대단한데요..

### Comment 33024

- Author: neo
- Created: 2025-01-06T10:06:51+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42601549) 
- ML 모델을 추출하는 것은 첫 번째 단계이며, 데이터 입력 전 변환과 출력 형식을 처리하는 것이 두 번째 단계임
- 기기 내에서 ML을 사용하는 것은 사용자 프라이버시를 개선하는 큰 장점이 있음
- tflite를 고려하는 앱 개발자는 Firebase에 모델을 호스팅하고 작업 완료 후 삭제하는 것이 더 안전한 방법임
  - Firebase는 모델 업데이트 버전 관리, A/B 테스트, APK 크기 감소 등의 기능을 제공함
- Gboard는 동형 암호화를 사용하여 공공의 일반적인 단어를 학습하고 암호화된 제안을 제공함
  - 예를 들어, Gboard에서 'bizarre'의 두 가지 일반적인 철자가 있음
- AI 모델은 지적 재산으로 간주되며, 이를 사용하거나 수정하기 전에 소유자의 명시적 허가가 필요함
- 오픈 데이터로 훈련된 오픈 모델을 시각 장애인을 위해 해방한 것에 대해 잘한 일임
  - 관련 논문, 코드, 훈련 데이터 및 모델은 GitHub에서 다운로드 가능함
  - MIT 및 CDLA-Permissive-2.0 라이선스 하에 있음
- 주요 플레이어의 입장에 따르면, 대량으로 모델을 다운로드하고 ML 모델을 훈련하는 것은 지적 재산권을 침해하지 않음
- Android 앱에서 대규모로 모델을 추출한 흥미로운 연구 논문이 있음
- Frida 도구는 매우 유용하며 많은 사람들이 지적 재산권 문제에 관심을 가짐
  - 법적 문제를 피하기 위해 모델을 '훔치는' 방법을 광고하지 않으려는 시도로 보임
