ios, Narzędzia

Jak podglądać ruch sieciowy na iPhone – Fiddler

Hej,

Jakiś czas temu, a raczej duży kawał czasu temu, napisałam posta o tym jak podglądać ruch sieciowy z iPhone przy użyciu narzędzia ZAP (link). Dzisiaj temat bardzo podobny, jednak tym razem wykorzystam do tego celu narzędzie Fiddler.

Post pisałam mając w ręku telefon z iOS 12.2 (dla innych wersji iOSa poszczególne ekrany mogą wyglądać nieco inaczej).

Najpierw należy pozwolić Fiddlerowi na przechwytywanie ruchu z zewnętrznych urządzeń. Klikam w Tools > Options > Conncetions i tam zaznaczam checkboxa „Allow remote computers to connect”.

Image 2019-04-17 at 11.59.20 AM

Następnie sprawdzam moje ip. Można je szybko podejrzeć w Fiddlerze (w prawym górnym rogu):

Image 2019-04-17 at 12.05.29 PM.png

Kolejnym krokiem będzie zainstalowanie wtyczki do Fiddlera: „CertMaker for iOS and Android”

Potem ustawiam odpowienie proxy w moim telefonie: Ustawienia > Wi-Fi > nazwa sieci > Konfiguruj proxy:

Image from iOS (9)

Następnie na iPhone w Safari odpalam link: http://ipv4.fiddler:8888/ i pobieram FiddlerRoot certificate.

Image 2019-04-17 at 12.22.23 PM

Teraz instaluję pobrany certyfikat na telefonie wchodząc w Ustawienia > Ogólne > Profile

Image from iOS (10)

W ostatnim kroku należy aktywować certyfikat w telefonie: Ustawienia > Ogólne > To urządzenie > Ustawienie zaufania certyfikatu

Image from iOS (11)

Od tej chwili można pogdlądać ruch sieciowy w Fiddlerze zarówno z przeglądarki jak i z apek mobilnych. 🕵️‍♀️📱🔍😎

android

Android – podstawowe pojęcia

APK – Android Package Kit – odmiana formatu JAR. Format APK używany jest do dystrybucji i instalacji pakietów na system operacyjny Android. Plik .apk można otworzyć używając programów do dekompresji, np. 7-Zip, WinZip, WinRAR.

JAR – Java archive – archiwum w formacie ZIP używane do kompresji plików klas języka Java oraz powiązanych z nimi metadanych.

JDK – Java Development Kit – darmowe oprogramowanie udostępniające środowisko niezbędne do programowania w języka Java. Dostępne dla różnych systemów operacyjnych, m.in. Microsoft Windows, Linux. Zawartość: Javac – kompilator, Jar – archiwizator, javadoc – generator dokumentacji, javah – generator plików nagłówkowych, javap – deasembler, jdb – debugger.

SDK – Software Development Kit – zestaw narzędzi niezbędny przy tworzeniu aplikacji korzystającej z danej biblioteki pod dany system, sprzęt itp. Na SDK najczęściej składają się: dokumentacja, pliki nagłówkowe dla danego języka programowania, przykładowe kody źródłowe, skompilowane biblioteki (w przypadki SDK dla jakiejś biblioteki), kod źródłowy biblioteki (w zależności od licencji i typu SDK).

ADB – Android Debug Bridge – interfejs do komunikacji z urządzeniem. ADB ułatwia wykonywania różnych akcji na urządzeniu takich jak: instalowanie i debugowanie aplikacji. Zapewnia dostęp do powłoki unixowej, której można używać do wykonywania poleceń na urządzeniu.

DEX – Davlik Executable – pliki, które używane są do inicjowania oraz uruchamiania aplikacji dla platformy Android. Pliki .dex mogą być tworzone ręcznie bądź automatycznie poprzez tłumaczenie skompilowanych aplikacji napisanych w języku java. Wiele plików .dex jest spakowanych w jeden pakiet .apk, który służy jako finalny plik aplikacji Android.

 

Bezpieczeństwo

Inżynieria Wsteczna – co to takiego?

Inżynieria wsteczna, odwrotna, programowanie zwrotne – co to takiego?

Jest to proces badania aplikacji w celu ustalenia jej działania, a w konsekwencji stworzenia odpowiednika. Jest to jedna z technik wykorzystywana podczas przeprowadzania audytu bezpieczeństwa aplikacji.

Jedną z technik inżynierii wstecznej jest dekompilacja czyli przekształcanie kodu maszynowego do języka wyższego poziomu. Warto jednak zaznaczyć, że dekompilacja nie odtwarza kodu źródłowego sprzed jego kompilacji. Odtwarza pewną postać źródłową programu w języku wyższego rzędu.

Jak się zabezpieczyć?

Aby zabezpieczyć naszą aplikację przed potencjalnym atakiem poprzez jej modyfikację powinniśmy jakoś tę czynność utrudnić ewentualnemu „napastnikowi”.

Jedną z technik ochrony przed stosowaniem inżynierii wstecznej jest obfuskacja kodu.

Obfuskacja czyli zaciemnianie kodu jest to technika przekształcania programów tak aby utrudnić ich zrozumienie zachowując przy tym semantykę. Wyróżniamy kilka typów obfuskacji: transformacja wyglądu, transformacja danych, transformacja kontroli.

Transformacja wyglądu – zmiana nazw zmiennych i funkcji, zmiana formatowania, usuwanie komentarzy.

Transformacja danych – rozdzielanie zmiennych, konwersja statycznych danych do procedury, zmiana kodowania, zmiana długości życia zmiennej, łączenie zmiennych skalarnych, zmiana realizacji dziedziczenia, rozłam/łączenie tablic, zmiana porządku instancji zmiennych / metod / tablic.

Transformacja kontroli – zmiana przebiegu, rozszerzenie warunków pętli,  zmiana kolejności komend / pętli / wyrażeń, metody inline, ogólnikowe wyrażenia, klonowanie metod.

Obfuskacja a minifikacja

No właśnie. Gdzie właściwie tkwi różnica? Czytając definicje obfuskacji i minifikacji można mieć wrażenie, że właściwie to to samo. I właściwie tak jest. Efekt obfuskacji i minifikacji często jest podobny jednak różnica pomiędzy tymi pojęciami tkwi w celu. Celem obfuskacji jest zaciemnienie kodu i utrudnienie jego czytania. Celem minifikacji jest zmniejszenie rozmiaru aplikacji.

Przykładowe narzędzia do obfuskacji kodu:

  • Java: ProGuard, JODE, JavaGuard, DexGuard
  • .NET: Obfuscar
  • JS: javascript-obfuscator, grunt-javascript-obfuscator
  • PHP: php-obfuscator, php-packer
ios, Narzędzia

Jak podglądać ruch sieciowy na iPhone – ZAP

Witajcie,

Jakiś czas temu, podczas testów apki mobilnej na ios miałam potrzebę podglądnięcia requestów wysyłanych przez apkę do API. No i zaczęłam szukać i rozkminiać jak to zrobić. No i rozkminiłam. Dlatego chciałabym się tym dzisiaj z Wami podzielić 🙂

Ten tutorial jest aktualny dla iOS 12.2 (dla innych wersji może to wyglądać nieco inaczej)

Po pierwsze zainstalowałam jeden z bardziej znanych snifferów – ZAP (Zed Attack Proxy).

Odpaliłam ZAPa i sprawdziłam dane mojego proxy lokalnego.

Kolejnym krokiem jest wygenerowanie certyfikatu w ZAPie.

Potem zainstalowałam wygenerowany certyfikat na iphone. Należy go wrzucić na telefon, np. wysłać sobie mailem. Następnie pobrałam certyfikat i zainstalowałam. Aby to zrobić należy wejść w Ustawienia – > Ogólne – > Profile.

Tak wygląda poprawnie zainstalowany certyfikat (musi być zweryfikowany):

Image from iOS (6)

Następnie wchodzimy w Ustawienia – > Ogólne – > To urządzenie – > Ustawienie zaufania certfikatu. Tam aktywujemy interesujący nas certyfikat jak na poniższym obrazku:

Image from iOS (7)

I ostatni krok. W ustawieniach sieci wifi zaznaczyłam opcję PROXY HTTP i wpisałam odpowiednie dane:

Image from iOS (8)

 

Teraz w ZAPie można podglądać ruch sieciowy z telefonu. Zarówno można podejrzeć ruch z apek jak i z przeglądarki.

 

Jeśli macie jakieś pytania to śmiało piszcie w komentarzach 🙂

 

Dobre praktyki

Kilka dobrych praktyk w automatyzacji testów funkcjonalnych

Hej 🙂

Często zdarza się, że podczas pisania testów automatycznych napotykamy na masę problemów. Testy bywają trudne w utrzymaniu, a pisanie ich jest czasochłonne. Dlatego dzisiaj kilka słów o dobrych praktykach w automatyzacji testów, które pomogą uniknąć wielu problemów:

  1. Testy niezależne od siebie – Test nie powinien zależeć od zmian wprowadzonych przez inny test. W przeciwnym wypadku gdy test się nie powiedzie, to kolejne zależne od niego również się nie powiodą. Niezależność pozwala na uruchamianie różnych testów równolegle (np. gdy chcemy odpalać testy na różnych urządzeniach – ma to szczególne znaczenie w przypadku aplikacji mobilnych).
  2. Lokalizowanie elementów po id lub po dedykowanym atrybucie – Lokalizowanie elementów po najmniej zmiennych atrybutach i takich, które jednoznacznie określają ten element. Dobrą, sprawdzoną praktyką jest dodanie dedykowanego atrybutu pod testy. Dzięki temu programiści wiedzą, że dany atrybut służy tylko do testów i nie będą go ruszać.
  3. Używanie sprawdzonych wzorców – Page object pattern – Jest to wzorzec który zakłada, że każda strona / ekran aplikacji jest osobnym obiektem. Ułatwia to nawigowanie i wykonywanie akcji na poszczególnych stronach. Ponadto redukuje duplikację kodu, sprawia, że testy są czytelne i łatwe w utrzymaniu.
  4. Odpalanie testów wyzwalane zmianami w kodzie – Odpalanie testów po stworzeniu merge  / pull requesta. Dzięki temu wiadomo czy nowy kod nadaje się do mergowania.

Jeśli znacie jakieś inne dobre praktyki dotyczące automatyzacji testów aplikacji webowych czy mobilnych to koniecznie napiszcie w komentarzu :).

Dobre praktyki

Testy aplikacji mobilnych – Na co zwracać uwagę?

Coraz więcej aplikacji webowych ma swoje odpowiedniki w postaci apek mobilnych. Branża aplikacji mobilnych rośnie w siłę. Telefony dają coraz więcej możliwości i coraz więcej osób korzysta z różnych serwisów właśnie na telefonie. Dlatego dzisiaj chciałabym Wam przekazać kilka przydanych wskazówek na co zwracać uwagę podczas testów aplikacji mobilnych:

  1. Różne platformy – testy na różnych urządzeniach, z różną wersją systemu operacyjnego – tutaj z pomocą przychodzą emulatory, które może nie odzwierciedlają w 100% telefonów, ale dają możliwość sprawdzenia aplikacji na różnych wersjach systemu operacyjnego, czy przy różnych rozdzielczościach ekranu.
  2. Różne prędkości łącza lub brak internetu – sprawdzenie jak nasza aplikacja zachowuje się gdy jesteśmy offline oraz przy wolniejszym internecie. Takie testy można z łatwością przeprowadzić używając emulatora, lub zmieniając preferowany typ sieci w swoim telefonie.
  3. Połączenie przychodzące lub sms – warto też przetestować co się stanie gdy podczas korzystania z naszej apki ktoś do naz zadzwoni, wyśle smsa lub gdy zadzwoni budzik. Połączenie przychodzące i smsy można łatwo zasymulować na emulatorze.
  4. Zrzucenie apki do tła – przełączanie między różnymi aplikacjami – zwrócenie uwagi na zachowanie apki po zrzuceniu jej do tła i ponownym aktywowaniu. Warto też sprawdzić przełączanie się między różnymi aplikacjami.
  5. Widok pionowy i poziomy – testowanie apki zarówno w widoku pionowym jak i poziomym.
  6. Usługi zewnętrzne – sprawdzenie jak apka współgra z zewnętrznymi usługami (np. camera, gps). Gdy nasza apka korzysta z aparatu powinniśmy też sprawdzić co się stanie gdy apka chce odpalić aparat, który jest już aktywny w tle.
  7. Zużycie baterii – sprawdzenie czy apka nie zjada zbyt szybko zasobów baterii. Zużycie baterii można łatwo zasymulować na emulatorach.
  8. Różne rozmiary ekranu – sprawdzenie jak apka wygląda na małym ekranie, czy teksty się mieszczą i czy widok się nie „rozjeżdża”.