Przeglądam jeden leniwy i już dość nudny wieczór фициальное Aplikacja Habr, po raz kolejny zginałem palce, po jednym dla każdej niedziałającej funkcji. Tutaj na przykład nie można komentować, tutaj odmawia się prawa do głosowania i w ogóle, dlaczego formuły nie są widoczne na ekranie?
Zdecydowano: potrzebowaliśmy czegoś wygodnego, przyjemnego, czegoś własnego. A co powiesz na własną aplikację dla Habr?
Pozwól, że dam ci kilka zrzutów ekranu, aby zrozumieć sytuację.
Jakoś tak to wygląda to - z. aplikacja habr.com
Lista „niedogodności”
Nie możesz ocenić publikacji, której ocena jest różna od 0
Nie zawsze można napisać komentarz
Sondaże nie działają
Formuły nie są widoczne w ciemnym motywie (czarny na czarnym)
Nie wszystkie zakładki są dostępne
Tak, aplikacja nie była aktualizowana od sierpnia ubiegłego roku, ale nadal jest źle. Generalnie trzeba to naprawić.
Część pierwsza. Szukam dostępu.
Szybkie zapytanie Google „habrahabr API” mówi, że jest już dość przestarzały magazyn na Githubie, od tego czasu nieaktualizowany Listopada 21 2016, i to przez chwilę dwa i pół roku.
Ignorując fakt, że jest to PHP, przewiń w dół i przeczytaj:
Pobieranie identyfikatora aplikacji
Wykorzystując ten formularz na Habrahabr trzeba krótko opisać istotę nowej aplikacji i cel, do jakiego potrzebuje API.
Nie ma wątpliwości, że jeśli potrzebujesz dostępu, to go potrzebujesz. Piszemy list (w skrócie):
List
Istnieje chęć zrobienia aplikacji dla Habr w oparciu o PWA. Jest tego kilka powodów.
Pierwsza i najbardziej oczywista: aplikacja na Androida nie spełnia moich osobistych wymagań.
Po drugie: nie ma wystarczającej liczby natywnych powiadomień o wszelkiego rodzaju rzeczach, które zwykle przychodzą e-mailem (na przykład komentarze).
Po trzecie: osobiste zestawienie (jako perspektywy) osób/centrów, które mnie interesują, biorąc pod uwagę moje zainteresowania.
Odpowiedź oczywiście nie była zbyt przyjemna, ale przynajmniej szczera:
Niestety, dostęp do naszego API nie jest aktualnie dostępny. Planujemy wznowić zapewnianie dostępu po zakończeniu prac nad interfejsem API, ale nie znamy jeszcze dokładnych dat, ponieważ Obecnie jesteśmy zajęci rozwiązywaniem innych priorytetowych zadań.
"Dobra, nie ma problemu! Wymyślimy coś!” - powiedziałem sobie i zacząłem szukać.
Część druga. Głębokie wykopaliska.
W oparciu o logikę, jeśli aplikacja jest uruchomiona, ma dostęp do interfejsu API i jest na stałe połączona z aplikacją. Przeanalizujmy.
Ponieważ mamy do czynienia z ruchem, Wireshark jest naszym wyborem. Nie bez pewnych trudów, po podłączeniu telefonu do Internetu za pośrednictwem komputera stacjonarnego, otwieramy aplikację i przeglądamy żądania:
Jasne, że nic nie jest jasne
Tak, wszystko jest szyfrowane, ale nie chcę mieszać się z kryptografią. Następnie musisz zajrzeć do samej aplikacji.
Zdekompilowano . Apk, zacznijmy szukać. Czego potrzebuje każde API? Prawidłowy, Punkt końcowy, miejsce, do którego trafiają wszystkie prośby. Prawdopodobnie jest to http(s), spróbujmy znaleźć „https://”:
To jest kod maszyny wirtualnej Androida (Maszyna wirtualna Dalvik), niezbyt zrozumiałe dla ludzi, ale wciąż dość pouczające. Te trzy stałe sądząc po ich zawartości i nazwie oraz repozytorium GitHub, służą do żądania tokena dostępu metodą GET.
Spójrzmy dalej. Plik, który pojawi się jako następny w wyszukiwaniu to NetworkModule.smali:
const-string v0, "https://habr.com/api/v1/"
A tu jest miejsce, w którym możesz przekazać swoje prośby!
Aby samodzielnie napisany klient działał poprawnie, pozostaje tylko jedna rzecz do ustalenia - client_id, który najprawdopodobniej jest unikalnym identyfikatorem aplikacji.
Poszukiwanie tego tekstu w kodzie źródłowym nie doprowadziło jednak do znalezienia istotnych informacji...
Ale nagle w jednym z plików moje oczy dostrzegły kilka interesujących linijek:
Jak możesz zrozumieć, jest to wpis w dzienniku. Ale nagrywanie czego?
Część trzecia. To są logi!
Używamy adb logcat aby wyświetlić dzienniki aplikacji.
Nieoczekiwanie logi okazały się jeszcze bardziej szczegółowe niż oczekiwano.
Tutaj mamy nie tylko to, czego potrzebujemy client_idAle token użytkownik/aplikacja oraz login и hasło zwykłym tekstem!
Niektóre teorie spiskoweSama obecność loginu i hasła w logach niczemu nie szkodzi, ponieważ logi te można odczytać tylko z uprawnieniami roota lub połączeniem poprzez adb. Jednak ze względu na fakt, że wśród osób czytających Habr są programiści Androida, którzy mogą mieć włączone debugowanie, staje się to problemem.
W takim przypadku „darmowe ładowanie” na lotnisku może skutkować kradzieżą konta, ale komu to potrzebne?
Z tych dzienników możemy wyodrębnić:
client_id и apikeywymagane do uzyskania dostępu api;
Adres URL autoryzacji użytkownika (dziwne, ale w repozytorium nie ma nic na temat tej metody, może nie jest podany?)
Tak to się stało. Na podstawie tego maleńkiego badania trwają już prace nad małym projektem - naszym własnym wdrożeniem aplikacji mobilnej. Proszę tych, którzy chcą pomóc, o napisanie wiadomości, a pozostałych - o oddanie głosu (bo chcę zrozumieć, czy komukolwiek to jest potrzebne).
Dziękuję za uwagę!
W ankiecie mogą brać udział tylko zarejestrowani użytkownicy. Zaloguj się, Proszę.
Korzystasz z aplikacji mobilnej Habr?
Tak, używam, jestem zadowolony
Tak, korzystam, aplikacja powoduje niedogodności
Nie, korzystam z wersji internetowej na telefonie
Nie, używam Habr z mojego komputera
Głosowało 357 użytkowników. 30 użytkowników wstrzymało się od głosu.