eScooter veya kick scooter ve teknolojisi ile kiralık escooter lar + IOT + Kilit (Lock) sisteminin 3. Yazı serisinin Akıllı Kilit teknolojisi ve bunun şu ana kadar yaptığımız escooter entegrasyonlarına entegre edilmesini sizlerle paylaşacağım..
Martı, Binbin, Palm, Kedi vb neredeyse tüm kiralık escooter lar da aynı kilit var. Siyah bir kutu ve genelde hemen siyah IOT kutusunun hemen üzerinde.. Resimde bu kilidi görebilirsiniz..
Bu kilit çinden satın alınıyor.. Ve içinde bluetooth 4.x destekli teknolojisi var ve size mobil yazılımını da veriyorlar.. Ancak bu sadece o yazılımla çalışıyor.. Sizin bu kilidi kendi sisteminize entegre yapmanız gerekir.. Bunun için üretici ile konuşup PROTOCOL verilerini istemeniz gerekir.. Bu size entegrasyonu kolayca yapmanızı sağlar.. Bundan başka aynı kilidin kablolu olanı da var yani bluetooth olmayan modeli ve direkt IOT a bağlanan modeli.. Tabii IOT un bunu desteklemesi gerekir..
Bu kilit Solebe Y905 diye geçiyor.. Bu kilidin protokol verilerini de kırdım ve artık elimde.. Özellikle token ile çalıştığını belirteyim.. Önce belirli bir veri var ve onu yine özel şekilde Encrypt edip gönderiyoruz ve geri veri dönüyor ve biz bu veriyi Decrypt ediyoruz içine bakıp belli veri kısımlarını TOKEN olarak alıyoruz.. Bu token verisini bu defa yine başında özel bir veri ile (Unlock, restart machine, Lock vb) birlikte Encrypt edip gönderiyoruz ve mesela kilit açılıyor.. Kısaca böyle çalışıyor.. Bu kilidin tüm kaynak kodu ve protokol bilgileri tarafımdan elde edilmiş ve custom bir yazılımla test edilmiştir..
Şimdi de Çin yerine benzer bluetooth teknolojisini sunan ve daha sofistike ve daha iyi olan Alman malı Semptec SmartLock ( Aslında bu da Çin de üretiliyor yani her şey Çin ! Yine SOlebe Y797 bu ürünün adı belirtelim..) ürününü Almanya dan temin ettim.. Yaklaşık 40 Euro.. Kitapçığı vb her şey Almanca ve okumadım bile ( Okudum da Almancam yok yani okuyorum ama anlamıyorum durumu !)… Aç kapayı bil yeter.. Bir de Google Play Store da uygulamasını indirip oradan bisiklet vb ile scooter ı nıza uygulayabiliyorsunuz.. Telini keserlerse inanılmaz ötüyor (-muş denemedim tabii) hatta batarya sını çıkarmaya çalışıp (denedim muthiş ! )çıkarsanız bile yine inanılmaz ötüyor…İşte onun resimleri :
Bana yukarıda da bahsettiğim gibi protocol verileri lazım.. Ama maalesef bunu alamıyorsunuz.. Sadece münferit alıp kullanmanız için yapmışlar..
Ben zaten bunu bilerek aldım.. Derdim bu kilidi HACK ve CRACK etmek… Ve diğer sistemlerime entegre yapmak..
Önce 1. Yazımızda elimizde raspberry pi Zero W vardı ve bluetooth ile Xiaomi m365 escooter un 3 adet olan tüm kontroller larına eriştik ve örneğin batarya doluluğu, motoru kilitle veya aç veya arka lambayı yak gibi fonksiyonlarına eriştik ve uyguladık..
- yazımızda SIM+GSM+GNSS+GPS sistemini bir elektronik modul kart olan SIM808 ile ilk sisteme entegre yaptık MQTT broker ve client ile verileri SIM kart üzerinden okuyup yazdık..
Şimdi ise kilidi entegre yapacağız.. Hedefim 2 konu var.. Biri gerekirse Google Play store dan indirdiğim Android yazılımını kırmak ne yaptığını öğrenebilmek ve yine gerekirse kaynak kodları her ne kadar zor olsa da elde etmek ve bunu saklamak..
Bu tip sistemler benzer çalışır ancak protokolleri farklıdır.. Yani burada okuduklarınızı benzer metodolojilerle diğer sistemlere de uygulayabilirsiniz.. Zaten amacım balığı tutup vermek değil balık nasıl tutulur u size göstermek..
Önce kilide pil takıp çalıştırdım.. Android yazılımını yükleyip + Android telefonumu kablo ile notebook a bağladım + Android Studio yu herhangi bir projeyi açtım ve yazılımı mobil cihazda çalıştırdım.. Android Studio da Alttaki LogCat sekmesini açtım ve mobil cihazda o anda çalışan her şeyi ve bu yazılımın müsaade edilen debug mesajlarını görmeye başladım.. Bu bir mühendisin ilk inceleyeceği kısım olmalı.. Bir çok veri gördüm ve kopya ile notepad e alıp sakladım + inceledim..
Android yazılımını 2 farklı şekilde kırdım ve kaynak kodlarına baktım.. Yukarıdaki verilerle karşılaştırdım ki hangi aşamada hangi butona basınca ne oluyor un debug verilerine bakıp notlarımı aldım.. Artık biraz daha alışkınım ne olup bittiğine ancak henüz bitmiyor işimiz çok..
Sonuçta aynen 1. Yazımda olduğu gibi bir HEADER var arkasından 6 hane rakamsal şifre ki bu ilk anda 123456 oluyor siz değiştirebiliyorsunuz indirdiğiniz android yazılımla ve en son da da yapmak istediğiniz işlemin kodu.. 1 kilidi aç 6 ise kilidin durumu açık mı kapalı mı vs vs.. HEADER enteresan bir değer ve tek.. Veri 8 byte uzunluğunda ama bu sadece kilidi aç için geçerli.. Örneğin şifre değiştir vb yaklaşık 20 byte veri içeriyor..
Bu kilidi aç protokol verisi elimde ve yine raspberry de GATTTOOL ile aynen 1 yazımda m365 in bluetooth una bağlandığım gibi buna da bağlanıyorum.. Ama bu cihazın MAC adresini öğrenmemiz lazım.. Çok kolay hcitool lescan yazıp enter e basın göreceksiniz ki MAC adresi yanında SmartLock yazar..
Sonra gatttool -t hci0 -b MAC_ADRES -I yazın … sonra connect yazın ve bağlandı diye yazacak.. yazmadıysa bir daha bir daha connect yazın.. Tabii cihazınızın açık ve kilidin de kilitli olması gerekir söyleyeyim..
Şimdi önce cihazın characteristics UUID lerini öğrenmemiz lazım ki 1. Yazımızdan bilirsiniz.. characteristics yazın
Bir çok değer görürsünüz.. Bizi ilgilendiren aşağıdaki değer…
handle: 0x0024, char properties: 0x0a, char value handle: 0x0025, uuid: 0000fff1-0000-1000-8000-00805f9b34fb
Burada char value handle 0x0025 e değer göndereceğiz.. değer kilidi aç komutu olacak..
char-write-req 0x0025 XXYYYYYYYYYYYYKK diye ki burada XX e header değeri geliyor Y ler ise şifremizin örneğin 123456 nın 1 i için ki burada 1 i integer yani sayı değil string olarak alıp ascii kodu 49 ve HEX değeri ise 31 dir.. Ona göre yazıp en son KK ya da 01 veya 06 ki ilki kilidi aç ikincisi ise kilit durumu ne anlamı taşıyan komutu vermek..
Aynen bu şekilde ama bir türlü açılmıyor.. Karışık olan ters mühendislik ve reflection ile baktığım kaynak kodları inceliyorum yüzde yüz doğruyum ama;
ÇALIŞMIYOR..
Orada byte array gönderiyor ben HEX gönderiyorum ki bu önemli değil bilesiniz.. Sorun nerede diye 3-4 gün karışık olan kodu incelemeye çalışıyorum..
Biraz deniz kenarına biraz farklı yerlere gidiyorum.. Aracımın arkasına madem aldık scooter ı atıp ailemdeki herkese bindiriyorum hem geziyorum hem de eğleniyorum yani… Boşuna almadık bunu değil mi? Arada aklıma geliyor aslında delirmem lazım çözemedim ya henüz o nedenle ama hiç merak etmiyorum çünkü bu ve benzer durumlarla 30 yıldır karşılaşıyorum.. Çözemediğim hiç bir şey olmadı !.. Kısaca “imkansız diye bir şey yoktur” ve sadece biraz zaman alır.. Siz de böyle yapın biraz oksijen alın gezin tozun..
Sonunda kesin olarak yazılımın bu kilide önce 2 adet CRC /Checksum verify verisi gönderdiğini anlıyorum.. Bunun ne olduğunu sonunda anlıyorum.. Madem öyle o zaman şu an ilk hedefim kaynak kodu bir şekilde kendim de bazı yerleri ekleyerek + düzelterek elde etmek.. Bu konuda çok çalışmam var o yüzden 1 gün içinde bunu hallettim.. Her şey elimde artık.. O 2 verify değeri debug ile net görebiliyorum artık.. Nasıl yaptığını da…
Ve artık o 2 verinin örneğini ve ilk kısımdaki veriyi ardı ardına GATTTOOL da gönderiyorum cihaza…
VE KİLİT UZUN ve KORKUTUCU BİR BİP SESİYLE AÇILIYOR…
Oldukça karmaşık yapmışlar ama ben de meraklıyım yani…
Aşağıda bazı kısımları gizleyerek GATTTOOL da ki komutları yazarak paylaşmak istiyorum
pi@raspberrypi:~ $ gatttool -t hci0 -b 64:69:5A:33:B4:DD -I
[64:69:5A:33:B4:DD][LE]> connect
Attempting to connect to 64:69:5A:33:B4:DD
Error: connect error: Function not implemented (38)
[64:69:5A:33:B4:DD][LE]> connect
Attempting to connect to 64:69:5A:33:B4:DD
Error: connect error: Transport endpoint is not connected (107)
[64:69:5A:33:B4:DD][LE]> connect
Attempting to connect to 64:69:5A:33:B4:DD
Connection successful
[64:69:5A:33:B4:DD][LE]> char-write-req 0x0025 XXPPPPPPPPPPPPKKCCCCCCCCCCCCCCCCCCCCCC
Characteristic value was written successfully
[64:69:5A:33:B4:DD][LE]>
(gatttool:11994): GLib-WARNING **: 16:09:27.272: Invalid file descriptor.
[64:69:5A:33:B4:DD][LE]> connect
Attempting to connect to 64:69:5A:33:B4:DD
Connection successful
[64:69:5A:33:B4:DD][LE]> char-write-req 0x0025 XXPPPPPPPPPPPPKKCCCCCCCCCCCCCCCCCCCCCC
Characteristic value was written successfully
[64:69:5A:33:B4:DD][LE]> char-write-req 0x0025 XXPPPPPPPPPPPPKK
Characteristic value was written successfully
[64:69:5A:33:B4:DD][LE]>
(gatttool:11994): GLib-WARNING **: 16:10:12.182: Invalid file descriptor.
[64:69:5A:33:B4:DD][LE]>
Yukarıda XX HEADER değeri
PP ler byte veya HEX olarak daha yukarıda anlattığım gibi şifre niz..
KK ise yapılmak istenen işlemin kodu..
Böylece bu zorlu çalışmayla hem yazılımın kaynak kodlarına sahip oldum hem de protokol verilerinin tamamına ve ne anlama geldiklerine sahip oldum.. Firma vermiyorsa biz buluruz yani !
Kilidi Xiaomi m365 bluetooth + IOT (SIM+GNSS+GPS) sistemine entegre yapmak çok kolay artık.. O kısımlarda çalışan yazılımımız C++ veya Python idi.. Örneğin python ile kısa bir kod yazıp test edersiniz sonra da diğer kısımlardaki motorun beyni ve SIM kart vb ile konuşan Python yazılımına entegre yapabilirsiniz..
Bazı okurlarım bu kısmı nasıl yaparız diye sormuşlar.. GATTTOOL da yazdığımız komutları aynen Python da da kullanma komutları var.. pygatt veya benzeri kütüphaneleri install edip ve projeye import edip kullanacaksınız.. Önce cihazın MAC adresini bulup veya yazıp direkt connect olacak ve sonra gerekli bilgileri o cihazın servis ve oradan da karakteristiğini bulup o karakteristiğe komutları verilerle birlikte ÇAKACAKSINIZ yani göndereceksiniz.. Bu kadar !
Burada sistemin kavramsal çözüm yaklaşımını da yazıp bitirelim..2 seçenek var aslında :
1-) Amerika da ki firmalardan mesela Bird ün yaptığı gibi kilidi mobil yazılımdan açabilirsiniz.. Yani QR Kodu okut sisteme kiralamak istediğin bilgisi gitsin ve OK ise senin mobil yazılım yukarıda anlattığım gibi protokol verilerini gönderip kilidi kolayca açar..
2-) Bizdeki çoğu firmanın yaptığı gibi QR kodu okut sisteme kiralamak istediğin bilgisi gitsin ve OK ise IOT daki örneğin raspberry pi benzeri donanımın bluetooth u python koduyla kilidi açsın…
Bu 2 seçenek dışında bazan da direkt escooter a özel bir kabloyla bağlandığını da görebiliriz…
Ben yukarıdakiler dışında profesyonel bir scooter IOT üzerinde entegrasyon yaptım.. test yazılımları android ve kaynak kodları bende.. Ama ben paylaşımlı scooter yazılımımın mobil tarafında flutter ile entegre ettim ve gayet iyi çalışıyor..Hatta video sunu da paylaştım..
Sonuç olarak hem SOLEBE Y905 hem de SOLEBE Y797 akıllı kilitlerin tüm know how ve yazılım teknolojisi elimde bulunmakta..
Son bir not: Bu kilitlerin kendi yazılımlarında size şifre olanağıda verirler ama inanın o şifrenin hiç bir önemi olmuyor !.. Yani o yazılımla oluyor ama ben kırdıktan sonra şifre vb gerekmeden açıyorum 🙂
Hepsi bu kadar…
Sağlıcakla kalın..
Selcuk Celik
Baştaki kilidi arattım fakat bulamadım bir türlü rica etsem 2 kilidin de linkini atabilirmsiniz scooter im için alacağım
Semptec zaten aratırsanız bulursunuz.. Martı ve Binbin ile diğerlerinin kullandığı kilit için link :
https://turkish.alibaba.com/product-detail/shared-mobility-e-scooter-smart-iot-wire-helmet-shared-lock-waterproof-for-rental-electric-scooters-62431845778.html