Claude 덕분에 NordicTrack과 iFit 구독 서비스에 제대로 엿을 날릴 수 있었습니다!
Thanks to Claude, I was able to give NordicTrack and their iFit subscription a big F U!
핵심 요약
Claude를 활용해 iFit 구독 강요가 심한 러닝머신을 해킹하여, 구독 없이도 넷플릭스와 크런치롤을 이용할 수 있게 개조했습니다.
- 구독 우회 — iFit 강제 구독 없이 넷플릭스와 크런치롤을 시청함
- 시스템 최적화 — 불필요한 앱을 제거하여 러닝머신 부팅 속도와 성능을 개선함
- Claude 활용 — ADB를 통한 분석과 Java 클라이언트 개발로 러닝머신 제어 구현
- 안전한 제어 — 물리적 안전 키와 속도 제한 기능을 유지하며 원격 제어 구현
우리 여자친구가 몇 년 전에 NordicTrack Commercial 2250을 샀는데, 우리가 제일 기대했던 건 운동하면서 스트리밍 서비스를 볼 수 있는 큰 화면이었거든. 근데 막상 써보니까 기본적인 운동 조작 말고는 전부 iFit 구독 뒤에 잠겨 있더라. 우리가 이미 돈 내고 쓰는 스트리밍 서비스조차도 말이야. 심지어 그냥 기본 기능만 쓰려고 해도 iFit 로딩될 때까지 기다려야 하고, 짜증 나는 광고도 피할 방법이 없음.
알고 보니 그 화면은 그냥 iFit 소프트웨어가 돌아가는 안드로이드 9 태블릿이더라고. 모터 기능은 그대로 쓰면서 넷플릭스랑 크런치롤을 깔고 싶어서, Claude Code랑 CLAUDE.md 파일을 프로젝트 메모리로 잡고 앉아서 꼬박 하루 반나절 동안 작업해서 다 성공시켰다.
결과물은 이래:
-
내가 직접 만든 홈 화면 앱인데, 넷플릭스랑 크런치롤 바로가기 타일이 크게 박혀 있어. iFit 로그인도 필요 없고, 광고도 없고, 멤버십 가입하라고 귀찮게 구는 것도 없음.
-
영상 위에 속도, 경사도, 시간, 거리가 표시되는 플로팅 바가 떠 있고, 랩이랑 페이스를 볼 수 있는 400미터 트랙 패널도 추가했어.
-
화면에 시작, 일시정지, 정지 버튼이랑 속도/경사도 조절 버튼도 넣었음. 물론 물리 버튼도 그대로 작동해.
-
넷플릭스 켜지는 데 21초밖에 안 걸려. 원래는 1분 가까이 걸렸거든.
작업 과정은 이랬어:
-
Claude가 ADB로 이것저것 뒤져보더니 iFit 모터 서비스가 콘솔에서 작은 서버를 돌리고 있다는 걸 찾아냈어. 앱들이 그 서버랑 통신하는 방식이더라고. 오픈 소스인 QZ (qdomyos-zwift) 프로젝트가 어떻게 통신하는지 참고해서 순수 자바로 클라이언트를 처음부터 새로 짰어. QZ 팀한테 진짜 고맙다. 그 사람들 작업 없었으면 이거 절대 못 했음.
-
iFit 앱들을 하나씩 비활성화하면서 모터 서비스가 제대로 도는지 계속 체크했어. 중간에 삽질도 좀 했는데, 어떤 앱은 모터 서비스를 아예 죽여버려서 복구하는 데 30분이나 걸리기도 했음. 그때마다 Claude가 CLAUDE.md에 교훈을 적어두고 다음 세션에서 그걸 참고하게 했지.
-
핵심은 iFit의 잠금 장치랑 업데이트 앱을 내 계정에서 날려버린 거야(복구 가능함). 이게 재부팅할 때마다 원격 접속을 다시 켜고, 내가 비활성화한 걸 다 되살려놓으면서 CPU를 엄청 잡아먹었거든. 이걸 없애니까 러닝머신이 잠금 해제된 상태로 부팅되고 태블릿이 드디어 숨을 쉬더라.
