21P by xguru 2023-01-16 | favorite | 댓글 2개

NYCTrainSign이 폐업한지 5년

  • 뉴욕시 지하철의 도착시간을 알려주는 개인용 LED 전광판 (라즈베리파이 기반)
  • 회사가 실패한 이유를 조사하고, 그들의 Fleet을 넘겨받기 위한 Exploit를 작성
  • 당시 인스타/페북에서 엄청 인기였지만, 물건을 못받은 사람도 많음
  • 중고판매자를 통해서 구해 실제로 뜯어보니 내부는 수준 이하였고, 지속 가능하지 못한 비즈니스였음
    • BOM(Bill of Material)이 너무 높음 (즉 제조원가 자체가 높음)
    • 나는 보통 BOM 비용에 4배정도를 곱해서 소매 가격을 추측함

부품 가격들

  • Raspberry Pi 3 - $35
  • Adafruit LED Matrix Hat - $25
  • LED Matrix * 2 - $60
  • 5V 2A Power Supply - $5
  • 4GB MicroSD Card - $7
  • Wood Case - $15
  • 그외 전선, 버튼, 나사, 패키징 등 - $3
  • 즉, 이렇게만 계산해봐도 $150 이니 $600은 받았어야 함

그들은 트릭을 몰랐음

  • 웹아카이브에서 그들의 홈페이지를 보니 $599로 팔려고 했었던 듯
  • 하지만 처음엔 $299 나 $100 에도 팔았음(베타버전)
  • 월$30에 대여해주려는 시도도 했었던듯 (하드웨어는 초기비용이 필요해서 이 방식도 어려웠을 것)

누가 삽을 팔았나

  • "골드러시때는 삽을 팔아라" 여기서 누가 삽을 팔아 돈을 벌었을까? Adafruit
  • "Adafruit LED Matrix HAT" 을 사용함으로써 $25(약 20%)의 가격이 상승했음
  • 이것은 약간의 엔지니어링 노력이면 절감할 수 있음. 꼭 필요한 것이 아니기 때문에
    • 직접 와이어링도 가능했음. 또는 $2 짜리 저렴한 HAT들도 있음
  • 대부분 Adafruit의 제품은 초기 프로토타이핑에만 사용되고, 실 생산때는 더 저렴한 것으로 교체됨
  • 라즈베리파이도 삽 판매자라고 생각할 수 있지만, Arduino나 ESP32를 쓰는 것은 좀 오버인것 같음
  • 파이3로 시작했다가, Pi Zero W로 교체하는게 맞았을거라고 봄

코드 읽어 보기

  • MicroSD에 들어 있는 Python & NodeJS 코드를 살펴봤음
  • 2개의 메인 컴포넌트가 있음 : Python 서버(LED 서버) 와 NodeJS 서버(Config 서버)

LED Server

  • LED Matrix에 그리는 기능과 회사 API로 부터 열차 정보를 가져오는 기능
  • Config 서버와 통신해서 사용자 설정을 가져옴
  • 열차 데이터를 받아와서 이미지/텍스트를 생성해서 LED Matrix에 렌더링

Config Server

  • 사용자 정보를 JSON에 저장하고 업데이트 요청을 받아서 해당 파일을 업데이트
  • 부팅때에는 Config Server가 최신 정보를 가져옴
  • AWS IoT Core에 접속해서 실시간 설정 변경 정보를 MQTT서버에서 받음

Code Quality

  • 코드 품질에 여러가지 문제가 있음
  • Transit API가 각 역이 여러개의 열차 라인을 가질수 있다는 것을 고려하지 않음
  • 펌웨어 업데이트 프로세스가 없음
  • 많은 파이썬 코드들이 그냥 시스템 콜을 사용해서 시스템 변경을 수행
  • 파이썬 LED 서버가 NodeJS Config 서버와 통신해서 정보를 가지고 오는데, 이것은 아마도 AWS IoT Core가 NodeJS에서 코딩하기 쉽고, 파이썬이 디스플레이 관리를 하기가 쉬웠기 때문일 거라고 예상
  • 탭과 스페이스가 섞여있음 (아마도 코드 에디터 설정이 잘못된 듯)
  • 전체 git history가 micro sd에 저장되어 있음
  • bash history도 저장되어 있음
  • 코드 재사용이 거의 없음

Sign Ressurection

Shell 얻기

  • 대부분의 라즈베리파이는 MicroSD가 암호화 되어있지 않기 때문에 루트쉘 얻기가 쉬움
  • 싱글유저모드로 부팅해서 pi 사용자에 대한 암호만 리셋하면 됨
  • 회사의 API는 이미 존재하지 않고, 기기는 인터넷이 연결 안된상태에선 하드코드된 로컬 데이터를 사용하게 되어있음

서버 재생성 하기

Sign의 제어 얻기

  • 다른 IoT장비들처럼, Sign도 많은 시스템 호출을 사용
  • 그중 하나의 호출이 Sign ID를 쉘커맨드에 직접 붙여서 사용
  • API서버를 직접 제어하고 있으므로, 모든 Sign들을 원격으로 제어가 가능
  • 몇번의 작업끝에 exploit를 작성
    • Sign기기가 켜졌을때 설정 정보를 가져오고, 이미지 로고에 대한 요청을 함
    • 이때 Sign ID가 넘어옴
    • 이 ID를 저장해 둔뒤, 다음번 이미지 로고 요청시 Exploit를 Sign에 보냄
    • 사용자가 Sign을 리부팅 하게 하면, exploit가 재시작시에 동작됨
    • exploit가 필요한 코드를 업데이트하고, 우리의 서버와 페어링 하게 만들었음
  • 이제 해당 기기들은 새 API 서버와 잘 동작함

무슨 일이 있었나 ?

  • 너무 많은 할인 판매가 문제였음
    • $150에 만들어서 $117에 판매가 불가능
    • $300도 너무 쌈. 처음부터 $600은 받았어야함
  • 스타트업 치고는 너무 많은 광고 담당자와 광고비용을 썼음
  • 수요에 비해서 제품을 많이 만들지도 못했음(수작업)
    • 그럼에도 불구하고 계속 주문을 받아서 마치 폰지사기처럼 새 주문비용으로 이전에 할인해서 판것들을 만듦
    • 중국으로 생산을 옮기는 것도 하지 못했음
  • 링크드인을 보면 창업자가 4명이었고, 나중엔 11명으로 늘었다고, 특정 시점엔 15명까지로 늘었음
    • 파운더당 $60k 만 잡아도, $400 수익이 나는 기기를 600개씩은 팔아야 함
  • 창업자가 공유한 스크린샷에 의하면 2달만에 $250k 매출을 내었다고 하는데
    • 기계 할인을 너무 많이 해서 얼마나 수익이 났는지 알 수 없음
  • 창업자들은 무슨일이 일어났는지, 왜 제품이 몇개 안 발송되었는지, 돈은 다 어디로 갔는지 명확히 밝히지 않았음
  • 한명의 창업자는 개인적으로는 전혀 돈 받은게 없다고 했음.
  • NYCTrainSign 팀이 적어도 전자쪽 지식이 있는 누군가와 얘기라도 나눴다면 성공했을 것이라고 믿음
    • 대신 그들의 메인 어드바이저는 대학의 컴퓨터 사이언스 교수였음
  • NYCTrainSign 은 CEO가 여가 시간에 만든 프로젝트를, 나중에 일어날 일을 고려하지 않고 $300~$600에 판매하려고 한 것
  • 결론적으로 "Good Idea, Good Timing, Bad Team, Bad Product"

What Happens Now

  • 처음에 이걸 시작할때, 난 나만의 Sign을 팔 꿈을 꾸었음
  • ESP32로 만들어서 지금도 사용하고 있음
  • 하지만 생각하면 할수록 난 이걸 만들어서 팔 적합한 사람이 아닌 것 같음
  • 이미 LED Sign은 시장 경쟁도 심함 : Tidbyt 이나 아마존에 수많은 회사들이 있음
  • 그래서 그냥 개인 학습 프로젝트로 남겨두기로
  • NYCTrainSign 에 대한 것은 오픈소스로 공개함
    • exploit 코드를 포함한 API 서버도 포함
  • 또한 새로운 NYCTrainSign 서버는 계속 호스팅 할 예정(호스팅 비용이 매우 저렴)
  • 뭔가 새로운 기능을 넣을 것은 아니지만, 개선된 펌웨어에 대한 아이디어는 있음
  • Sign을 가지고 있다면 원격으로 관리하는 사이트를 만들어뒀으니 이용해 볼 것
  • "Sign이 없다면 새로 구매하지는 마세요"

재밌네요 ㅋㅋ
근데 이거 만약에 수익성이 있다고 판단해서 사업화하면 법적인 문제는 안되려나요?

타이쿤 게임을 구경하는 느낌이네요

Code Quality > 코드 품질에 여러가지 문제가 "없음"으로 오타가 난 것 같습니다