21 puan yazan xguru 2023-01-16 | 2 yorum | WhatsApp'ta paylaş

NYCTrainSign kapanalı 5 yıl oldu

  • New York metrosunun varış saatlerini gösteren kişisel LED tabela (Raspberry Pi tabanlı)
  • Şirketin neden başarısız olduğunu araştırıyor ve onların filosunu devralmak için bir exploit yazıyor
  • O dönemde Instagram/Facebook'ta inanılmaz popülerdi, ama ürünü teslim alamayan çok kişi de vardı
  • İkinci el bir satıcı üzerinden edinip gerçekten sökünce iç yapısının çok düşük seviyede olduğu ve sürdürülebilir bir iş olmadığı görüldü
    • BOM (Bill of Material) çok yüksekti (yani üretim maliyetinin kendisi yüksekti)
    • Genelde perakende fiyatı tahmin etmek için BOM maliyetini yaklaşık 4 ile çarparım

Parça fiyatları

  • Raspberry Pi 3 - $35
  • Adafruit LED Matrix Hat - $25
  • LED Matrix * 2 - $60
  • 5V 2A güç kaynağı - $5
  • 4GB MicroSD kart - $7
  • Ahşap kasa - $15
  • Diğer kablolar, düğmeler, vidalar, paketleme vb. - $3
  • Yani sadece böyle hesaplasanız bile $150 ediyor; dolayısıyla $600 almaları gerekirdi

Hileyi bilmiyorlardı

  • Web arşivinde sitelerine bakınca bunu $599'a satmaya çalıştıkları görülüyor
  • Ama başlangıçta bunu $299'a hatta $100'a da sattılar (beta sürüm)
  • Aylık $30 karşılığında kiralamayı da denemiş gibiler (donanım başlangıç maliyeti gerektirdiği için bu model de zor olurdu)

Küreği kim sattı

  • "Altına hücumda kürek sat" sözündeki gibi, burada kürek satarak kim para kazandı? Adafruit
  • Adafruit LED Matrix HAT kullanmaları fiyatı $25 artırdı (yaklaşık %20)
  • Bu, biraz mühendislik çabasıyla azaltılabilecek bir maliyetti; çünkü zorunlu değildi
    • Doğrudan kablolama da yapılabilirdi. Ya da $2'lık ucuz HAT'ler vardı
  • Adafruit ürünlerinin çoğu yalnızca ilk prototiplemede kullanılır, gerçek üretimde ise daha ucuz olanlarla değiştirilir
  • Raspberry Pi da bir anlamda kürek satıcısı sayılabilir, ama burada Arduino veya ESP32 kullanmak biraz aşırı olurdu
  • Pi 3 ile başlayıp sonra Pi Zero W'ye geçmeleri daha doğru olurdu diye düşünüyor

Kodu incelemek

  • MicroSD içindeki Python ve NodeJS kodlarına bakıldı
  • İki ana bileşen var: Python sunucusu (LED sunucusu) ve NodeJS sunucusu (Config sunucusu)

LED Server

  • LED Matrix'e çizim yapma ve şirket API'sinden tren bilgisi alma işlevi
  • Kullanıcı ayarlarını almak için Config sunucusuyla iletişim kuruyor
  • Tren verisini alıp görüntü/metin oluşturuyor ve bunu LED Matrix üzerinde render ediyor

Config Server

  • Kullanıcı bilgisini JSON'a kaydediyor ve güncelleme isteklerini alıp ilgili dosyayı güncelliyor
  • Açılışta Config Server en güncel bilgileri alıyor
  • AWS IoT Core'a bağlanıp MQTT sunucusundan gerçek zamanlı ayar değişikliklerini alıyor

Kod kalitesi

  • Kod kalitesiyle ilgili çeşitli sorunlar var
  • Transit API, her istasyonun birden fazla tren hattına sahip olabileceğini dikkate almıyor
  • Firmware güncelleme süreci yok
  • Birçok Python kodu sistem değişikliklerini sadece system call ile yapıyor
  • Python LED sunucusu bilgiyi almak için NodeJS Config sunucusuyla konuşuyor; bunun sebebi muhtemelen AWS IoT Core'un NodeJS'de kodlamasının daha kolay, Python'un da ekran yönetiminde daha elverişli olması
  • Tab ve space karışık kullanılmış (muhtemelen editör ayarı bozuktu)
  • Tüm git geçmişi micro sd içinde duruyor
  • bash history de kayıtlı
  • Kod yeniden kullanımı neredeyse yok

Tabelanın yeniden diriltilmesi

Shell elde etmek

  • Çoğu Raspberry Pi'de MicroSD şifreli olmadığı için root shell elde etmek kolay
  • Single-user mode'da açıp pi kullanıcısının şifresini sıfırlamak yeterli
  • Şirketin API'si artık yok ve cihaz internet bağlı değilken hardcode edilmiş yerel veriyi kullanacak şekilde tasarlanmış

Sunucuyu yeniden oluşturmak

Tabelanın kontrolünü ele geçirmek

  • Diğer IoT cihazlarında olduğu gibi bu tabela da çok sayıda system call kullanıyor
  • Bunlardan birinde Sign ID doğrudan shell komutuna ekleniyor
  • API sunucusu doğrudan kontrol edildiği için tüm tabelalar uzaktan kontrol edilebilir hale geliyor
  • Birkaç denemeden sonra exploit yazılmış
    • Tabela cihazı açıldığında ayar bilgisini alıyor ve logo görseli için istek yapıyor
    • Bu sırada Sign ID gönderiliyor
    • Bu ID kaydediliyor, sonra bir sonraki logo görseli isteğinde exploit tabelaya gönderiliyor
    • Kullanıcı tabelayı yeniden başlatınca exploit açılışta çalışıyor
    • Exploit gerekli kodu güncelliyor ve cihazın bizim sunucuyla eşleşmesini sağlıyor
  • Artık bu cihazlar yeni API sunucusuyla düzgün çalışıyor

Ne oldu?

  • Sorun aşırı indirimli satışlardı
    • $150'a mal edilip $117'ye satılması mümkün değildi
    • $300 bile çok ucuzdu; baştan itibaren $600 istemeleri gerekirdi
  • Bir startup için fazla sayıda pazarlama çalışanı ve reklam gideri vardı
  • Talebe kıyasla yeterince ürün de üretemediler (el işi üretim)
    • Buna rağmen sipariş almaya devam ettiler; adeta Ponzi benzeri biçimde yeni siparişlerin parasıyla daha önce indirimli sattıkları ürünleri ürettiler
    • Üretimi Çin'e taşıma işini de başaramadılar
  • LinkedIn'e bakılırsa 4 kurucu vardı, sonra 11'e çıkmışlar, belli bir noktada 15 kişiye kadar büyümüşler
    • Kurucu başına sadece $60k saysanız bile, cihaz başına $400 kârla 600'er adet satmaları gerekirdi
  • Kurucunun paylaştığı ekran görüntüsüne göre 2 ayda $250k ciro yaptıklarını söylüyorlar
    • Ama cihazlarda çok fazla indirim yaptıkları için ne kadar kâr ettikleri bilinmiyor
  • Kurucular ne olduğunu, neden çok az ürün sevk edildiğini, bütün paranın nereye gittiğini açık biçimde anlatmadı
  • Kuruculardan biri kişisel olarak hiç para almadığını söyledi
  • NYCTrainSign ekibinin en azından elektronik bilgisi olan biriyle konuşmuş olsalardı başarılı olabileceklerine inanılıyor
    • Ama ana danışmanları bir üniversitenin bilgisayar bilimi profesörüydü
  • NYCTrainSign, CEO'nun boş zamanında yaptığı bir projeyi, sonrasında neler olacağını düşünmeden $300~$600 aralığında satmaya çalışma girişimiydi
  • Sonuç olarak "Good Idea, Good Timing, Bad Team, Bad Product"

Bundan sonra ne olacak

  • Bunu ilk başta yapmaya başladığında, kendi tabelasını satma hayali vardı
  • ESP32 ile bir tane yaptı ve hâlâ kullanıyor
  • Ama ne kadar düşünürse düşünsün, bunu üretip satacak doğru kişi olmadığını düşünüyor
  • Zaten LED tabela pazarı da çok rekabetçi: Tidbyt gibi ya da Amazon'da sayısız şirket var
  • Bu yüzden bunu sadece kişisel bir öğrenme projesi olarak bırakmaya karar verdi
  • NYCTrainSign ile ilgili şeyleri open source olarak yayımladı
    • Buna exploit kodunu içeren API sunucusu da dahil
  • Ayrıca yeni NYCTrainSign sunucusunu barındırmaya devam edecek (hosting maliyeti çok düşük)
  • Yeni özellikler eklemeyi planlamıyor, ama geliştirilmiş firmware için fikirleri var
  • Elinizde bir tabela varsa, uzaktan yönetim için hazırladığı siteyi kullanabilirsiniz
  • "Tabelanız yoksa yenisini satın almayın"

2 yorum

 
loblue 2023-01-18

İlginçmiş
Ama eğer bunun kârlı olduğuna karar verip ticarileştirirlerse hukuki bir sorun olmaz mı acaba?

 
kloty 2023-01-16

Bir tycoon oyununu izliyormuşsunuz hissi veriyor.

Code Quality > Kod kalitesi bölümünde, çeşitli sorunların "yok" olarak yazılması muhtemelen bir yazım hatası gibi görünüyor.