Niniejsza notatka jest podsumowującą całą serię edukacyjnych wpisów SaeLog, jakie w tym roku na przestrzeni kilku miesięcy pojawiały się na blogu. Seria dotyczyła hackowania modyfikacji kodu firmware oraz aplikacji analizatora logicznego firmy Saleae, aby ten działa również z nieoficjalnymi wersjami (klonami) urządzenia, gdzie używane są różne typy pamięci EEPROM. Problem ostatecznie został rozwiązany, więc nie będzie kontynuacji tematu.
Poniżej lista wszystkich odcinków jakie ukazały się na blogu w ramach #SaeLog:
- SaeLog #1: Intro
- SaeLog #2: Komunikacja z pamięcią EEPROM
- SaeLog #3: Fake EEPROM
- SaeLog #4: Firmware i jego ekstrakcja
- SaeLog #5: Testy, enumeracja i deskryptory USB w FX2
- SaeLog #6: Hacki w firmware w obsłudze EEPROM
- SaeLog #7: Firmware z detekcją typu EEPROM
- SaeLog #8: Aplikowanie zmian do kodu programu
- SaeLog #9: Outro
Wszystkie powstałe artykuły są bardzo ciekawym zbiorem edukacyjnym, przedstawiające kolejne zmagania i etapy walki z irytującym błędem. Przy okazji sam się nauczyłem czegoś nowego, a także przypomniałem wiele zapomnianych elementów - jak chociażby '51.
Poruszonych zostało wiele tematów, począwszy od reverse engineeringu, przez zabawy z firmware, zmagania z asemblerem 8051, czy bliższe poznanie niektórych elementów z bebechów chipsetu Cypressa. Jest to ciekawa dawka wiedzy, do której pewnie jeszcze wrócę. A poznane bebechy chipsetu FX2 pozwolą mi w przyszłości lepiej i łatwiej wykorzystać ten układ w różnych innych projektach, a kilka pomysłów od dawana czeka na realizację.
Prezentowany materiał nie wyczerpuje tematu, bo w kodzie programu czy firmware można znaleźć jeszcze wiele ciekawych i interesujących elementów, które aż proszą się o zbadanie.
Może to być np. temat identyfikatora urządzenia - funkcja GetIdFromDevice
i SetIdToDevice
z LogicAnalyzerDevice
. Identyfikator zapisany jest w pamięci EEPROM w postaci 8 bajtów zaraz za identyfikatorami USB (8 bajtów). Interesujące może być skąd się on bierze, do czego służy i jak jest generowany.
Podobnie z konfiguracją, w kodzie natknąłem się na funkcję WriteConfigurationData
, ciekawe czy dane te przechowywane są w EEPROM. Podobnie z ustawianiem w urządzeniu różnych istotnych parametrów (np. ActiveInputs, SampleRateHz, ...) do których istnieją dedykowane metody w obiekcie LogicAnalyzerDevice
.
Ciekawym zagadnieniem mogłoby być stworzenie mapy pamięci EEPROM, przedstawiającej całą jej przestrzeń adresową wraz z zawartością, ale to wykracza szeroko poza ramy głównego tematu jakim było naprawienie obsługi pamięci EEPROM. Po części wprowadzone modyfikacje można nazwać naprawianiem niedoróbek z obsługą różnych pamięci EEPROM. Chociaż ciężko powiedzieć, że jest to celowe działanie producenta, ale niestety tego też nie można jednoznacznie wykluczyć.
Osobiście, chyba już o tym wspominałem, ale na pewno będę chciał wykorzystać płytę deweloperską z CY7C68013A od Lcsoft do budowy prawdziwego analizatora logicznego, w samej aplikacji układu brakuje chociażby zabezpieczenia i buforowania wejść przed niepożądanymi sygnałami o amplitudzie przekraczającej bezpieczne dla układu poziomy. A jak wiadomo analizator czasem podłącza się do nieznanych elementów różnych systemów, więc bardzo łatwo wyrządzenie szkód.
Na razie zadowolę się prowizorką analizatora, ale temat ten prędzej czy później wróci.