Ale wróciłem, nadszedł czas CTF, więc wyciągnąłem moją czarną bluzę z kapturem i przyjrzymy się
temu bardzo trudnemu wyzwaniu inżynierii odwrotnej.
Możesz to znaleźć tutaj i gorąco zachęcam do zarejestrowania się na tej stronie, a także do zapoznania
się z innymi wyzwaniami, być może po tym kursie, ponieważ wtedy uzbroiłem cię we wszystkie umiejętności
i wiedzę, jak je rozwiązać.
W moim przypadku zrobiłem to już chyba dwa lata temu.
I to nie jest flex.
Tego można się po mnie spodziewać, prawda?
Absolutnie.
I cieszę się, że cię nie zawiodłem.
Wyzwaniem, które zamierzamy rozwiązać za pomocą wykresu przepływu, jest wyzwanie UPS.
Jest to również wyzwanie z największą liczbą punktów i najmniejszą liczbą rozwiązujących.
To zdecydowanie najtrudniejsze wyzwanie w całym pudełku.
Ale co sprawia, że to wyzwanie jest tak trudne?
Wszystko zaczyna się od samego APK.
Moja pierwsza próba była w porządku, spróbujmy zdekompilować tę aplikację i wydobyć z niej źródła Java.
Otworzyłem terminal i ani ADC, ani text to job nie były w stanie skompilować lub DE skompilować tych klas lub plików
tekstowych.
Dlatego nie miałem tam kodu źródłowego Java.
I to był czas, w którym szukałem innego kompilatora dni niż, powiedzmy, indeks IDC do wykresu.
Znalazłem jedną z nich w narzędziu Android Guard.
I w końcu, Andrew, Bóg był w stanie skompilować tę aplikację, a ja pomyślałem: świetnie, może to jest najtrudniejsza
część tego wyzwania, aby zdekompilować tę aplikację i odzyskać te źródła.
Cóż, całkowicie się myliłem, ponieważ po skompilowaniu tej aplikacji skończyłem z kilkoma
metodami, których nie było tak wiele, chyba trzy lub cztery, ale jedna metoda była naprawdę ogromna.
I ta metoda wyglądała tak pomnożona przez 20 razy.
Metoda ta była więc pełna instrukcji rozgałęzień.
Otrzymujemy dane wejściowe, przekazujemy je do funkcji, a następnie otrzymujemy mnóstwo instrukcji rozgałęzień.
I musisz o tym pomyśleć.
Jeden prowadzi do tego i jeden prowadzi do tego, a potem mamy to, a potem nad tym i to pomnożone
przez 20.
I w końcu, pomiędzy tymi wszystkimi instrukcjami rozgałęzień, jest jedno, jedyne rozwiązanie, do którego
musimy dotrzeć.
Ale było tam kilka małych, podstępnych instrukcji.
To nie tak.
Zawsze prawdziwa ścieżka jest tą właściwą.
Czasami sprawdzano, czy ta flaga zawiera następującą wartość?
Na przykład, zatrzymałeś się i pomyślałeś: Och, w porządku, może twój post musi znajdować się w obrębie naszych danych wejściowych i postępujesz
zgodnie z właściwą instrukcją rozgałęzienia.
Ale został pozostawiony na domyślnych ustawieniach, instrukcjach rozgałęzień i tym podobnych rzeczach.
Wydaje mi się, że było tam też kilka mechanizmów przeciwnych Deepakowi.
Jeśli podłączyłeś Friedę i spróbowałeś przeprowadzić analizę runtime, aplikacja zachowywała się w inny sposób.
Więc to było śmieszne, trudne.
Po przyjrzeniu się temu kodowi źródłowemu Java, pomyślałem, że nie jest możliwe, abym rozwiązał to wyzwanie, patrząc
na ten kod źródłowy Java i dowiedział się, która instrukcja rozgałęzienia prowadzi do ostatecznego rozwiązania.
Nawiasem mówiąc, samo rozwiązanie nie było trudne do zidentyfikowania, ponieważ był to naprawdę długi hash
i tak, twoje dane wejściowe są modyfikowane podczas tych wszystkich instrukcji rozgałęzienia.
Następnie dane wejściowe są hashowane i te dwie wartości są porównywane.
Więc to, dokąd musimy się udać, było całkiem jasne.
Ale jak się tam dostać?
Absolutnie nie.
I dlatego doszedłem do wniosku, że w porządku.
Dla mnie jedynym sposobem na rozwiązanie tego problemu jest stworzenie wykresu przepływu, a jeśli to zrobisz, zobaczysz
korzyści.
I tak, możemy wtedy wyeliminować wszystkie te podstępne i błędne instrukcje rozgałęzień, a następnie otrzymamy
czystą drogę.
Nie jest to takie łatwe przy tej ciszy, ponieważ wymaga to czasu.
Wydaje mi się, że wyeliminowanie wszystkich błędnych instrukcji rozgałęzień zajęło ponad godzinę, ale są to dwa
główne klucze cierpliwości i czasu, jeśli chodzi o inżynierię wsteczną aplikacji na Androida.
W porządku.
Ostatnią rzeczą, o której chcę wspomnieć, jest to, że wykres przepływu zawiera tylko instrukcje z emotikonami.
Tak więc nie otrzymujemy naszego kodu źródłowego java na tym wykresie przepływu.
Dostajemy tam nasz kod źródłowy emotikonów.
Dla mnie w tym czasie nie stanowiło to problemu, ponieważ byłem dobrze zaznajomiony z emotikonami.
Ale jeśli chcesz rozwiązać to wyzwanie później, być może będziesz musiał poczekać, aż ukończymy następny
rozdział, w którym się uczymy.
SMILEY Jeśli nie jesteś zaznajomiony z tym, oczywiście, jeśli już znasz Smiley,
to nie krępuj się i spróbuj rozwiązać to wyzwanie i daj mi o tym znać.
Gdybyś mógł rozwiązać to za pomocą wykresu przepływu, ale proszę, nie pytaj o rozwiązanie.
Nie zamierzam podawać rozwiązania tego problemu.
W porządku?
Ostatnią zabawną rzeczą związaną z tym wyzwaniem było to, że po jego rozwiązaniu rozmawiałem o tym
z autorem i wspomniał on również, że nie spodziewał się, że kompilator jest w stanie zdekompilować wszystkie
te źródła Java.
Ale nawet mając te źródła Java, nie odniosłem z tego żadnej korzyści, ponieważ sam wykres przepływu,
który był dla mnie główną koncepcją rozwiązania tego wyzwania, został napisany lub ma tę instrukcję
w Smiley.
Więc nawet jeśli zdekompilowałem tę aplikację, nie uzyskałem żadnej korzyści.
Było to dla mnie dość absurdalne, ale bardzo miło jest zobaczyć, że różne kompilatory dają różne
wyniki.
Jeśli więc zmagasz się z kompilatorem, wypróbuj inne narzędzia, na przykład tekstowe, a teraz także
Android.
Może jeden z nich jest w stanie go rozwiązać, a może jeden robi to lepiej niż drugi.
Więc tak, wypróbuj różne narzędzia.
Może jeden z nich jest w stanie rozwiązać to zadanie.
W porządku.
Następnie przyjrzymy się temu wyzwaniu.
Zamierzamy go pobrać, zainstalować, a następnie zdemontować, ale tylko do momentu, w którym
utworzymy ten wykres przepływu, ponieważ nie chcę tego dalej psuć.
Dobrze.
Jesteśmy teraz na naszej maszynie wirtualnej Ubuntu.
Jeśli chcesz pobrać to wyzwanie, przejdź na tę stronę.
To jest strona internetowa autora, a te wyzwania można znaleźć tutaj.
Przy okazji, autor umieścił również kilka niesamowitych slajdów, które można znaleźć tutaj.
Więc zdecydowanie zajrzyj również do tego, jeśli interesuje Cię określony temat, który jest super
miły od autora.
Dobrze.
Wyzwania można znaleźć tutaj.
Następnie musisz zarejestrować się na tej stronie za pomocą konta e-mail, a następnie możesz pobrać
ten plik APK.
Nie jestem w stanie dostarczyć ci bezpośrednio tego epickiego pliku, ponieważ ominąłbym cały
mechanizm zamówienia, a tego nie chcę robić.
Autor włożył wiele pracy w te wyzwania i byłoby całkowicie uczciwe, gdybyśmy przynajmniej zostawili
tutaj rejestrację jego strony internetowej.
W porządku.
Dobrze.
Możesz wstrzymać ten film, zarejestrować tam swoje konto i pobrać ten opublikowany plik APK, a następnie
przejść do filmu, w którym wyjaśniam, jak stworzyć wszystkie rzeczy, lub możesz po prostu oprzeć się
i obserwować, jak to robię.
Zamierzam więc zamknąć ten temat.
I tak, już pobrałem ten plik, znajduje się on w katalogu pobierania i tutaj go mamy.
Kopiuję, wklejam i tworzymy nowy katalog tutaj i nadajemy mu nazwę you post challenge very hard.
W porządku.
Zacznijmy od skompilowania tej aplikacji na Androida z naszym podejściem do wykresów tekstowych.
Zobaczymy, jak dobrze to pójdzie.
Nie, nie chcę teraz aktualizować.
Dlatego musimy rozpakować to, aby pobrać te klasy do pliku tekstowego.
Oto one.
Musimy.
Zakładam więc, że nasz interesujący kod źródłowy znajduje się tutaj w klasach two dot x i to char.
I tutaj mamy nasze klasy, aby chronić kanał.
Jeśli pracujesz w cieniu, gooey.
Widzimy, że mamy tutaj kod.
Rozgryźmy to.
Tak.
Texas nadal nie jest w stanie zdekompilować wszystkich tych metod, jak widzimy tutaj.
Tak więc ta jest czeską metodą flagową i widzimy, że mamy tutaj tylko ten kod bajtowy Java.
Nie możemy więc teraz nic z tym zrobić.
Może nie.
Dobrze, ale nie mamy wyboru.
W porządku, spróbujmy powiedzieć Dicka Cheneya na temat tych UFO, którymi się stałem.
I.
Tak.
Wygląda na to, że nie jest w stanie niczego zdekompilować, ale jest to błąd związany z używaniem niewłaściwej
wersji Javy.
Tak więc w ostatnim filmie zmieniliśmy wersję Java.
Sprawdźmy to naprawdę szybko.
Tak.
Java w wersji ósmej jest już zainstalowana lub nie jest zainstalowana.
Musimy wrócić do java 11, jeśli chcemy korzystać z stadia exclusive.
W porządku.
Więc sudo.
Alternatywy aktualizacji.
Dash dash config java.
Tak.
A następnie B wybieram wersję zero, aby użyć Java 11.
Musimy to również powtórzyć dla kompilatora Java.
A także zero.
Dobrze.
Teraz wszystko powinno być w porządku.
Tak.
Teraz wróciliśmy do wersji Java 11.
Spróbujmy jeszcze raz.
Tak.
To jest okienko, które powinniśmy przynajmniej zdobyć.
Jeśli więc pojawi się tam puste okno, oznacza to, że jest to związane z nieaktualną wersją Javy.
Wiem, że to irytujące, ale niestety musimy sobie z tym radzić.
Dobrze.
Zobaczmy, czy Taye Diggs to robi.
Widzimy więc, że trade X nie jest w stanie zdekompilować tego kodu.
W porządku, wypróbujmy to.
Strażnik Androida.
Dash.
Dash, pomocy.
I tutaj mamy tego dekompilującego się androida.
Bóg.
Dekompilacja, kreska, kreska.
Pomoc.
Tak.
I tutaj mamy teraz opcje Androida.
Kompilują się.
Widzimy na przykład, że możemy zdefiniować katalog wyjściowy, który zawiera nasz kod źródłowy Java.
Tak więc Android kompiluje te klasy, tekst za pomocą kompilatora D&D, który jest również wspomniany
tutaj i tworzy te pojedyncze pliki klas Java w tym katalogu wyjściowym.
A temu przyjrzymy się bliżej.
Tak.
Za kilka sekund, ponieważ jest to teraz wykres przepływu, który możemy utworzyć razem z dekompilowanym kodem.
Dobrze.
Ale na razie spróbujmy tylko skompilować tę aplikację i wylogować się z dekompilacji, a następnie wstrzymać i musimy
podać katalog wyjściowy.
Po prostu wymieniam to, ponieważ nie jest dostępne tutaj.
Więc nie utworzyliśmy jeszcze tego katalogu.
Ale jeśli podamy go jako parametr, android utworzy go i zapisze w nim wszystkie te
funkcje i skompilowany kod.
W porządku.
Może to teraz zająć trochę czasu, ponieważ tak, dzieje się tam wiele rzeczy.
I wrócę, gdy proces rozkładu zostanie zakończony.
Teraz proces dekompensacji został zakończony.
Zastanówmy się, co tu mamy.
Dobrze.
Otworzę to w przeglądarce plików.
Wtedy łatwiej to zauważyć.
Wydaje się, że są to nasze główne nazwy pakietów.
Mamy android, android, x i com.
Zakładam więc, że nasz kod znajduje się w com, ponieważ brzmi to jak ścieżka programisty.
Filmy takie jak ty zatrzymują się i tam idziemy.
Przechwytujemy walki, ale nie wiemy, jak dobre są one teraz.
Mamy również ten katalog i tutaj mamy kilka plików HD.
Przyjrzymy się temu później.
Dobrze.
Tutaj mamy teraz plik podróży elektrycznej.
Spróbujmy to otworzyć.
Otwieram to w terminalu tutaj.
Następnie jesteśmy w tym katalogu i używam, a ona dodaje, na przykład, f fc fc Java.
I tutaj widzimy, że wygląda to tak, to jest kod Java.
Nieźle.
Android jest więc w stanie zdekompilować ten plik.
Mamy tutaj tę metodę flagi kontrolnej i jest to teraz cały kod Java i możesz już zobaczyć wszystkie te
instrukcje rozgałęzień i podstępne pułapki.
Tak więc nasze dane wejściowe mogą zacząć się od większej liczby sekwencji lub mogą nie być znane.
W tej chwili trzeba przejść przez całą króliczą norę i widać, że dzieje się wiele rzeczy.
Jeśli przewiniemy wszystkie te instrukcje i tutaj zobaczymy, że jest to ostateczny hash, z którym
nasze dane wejściowe są następnie hashowane i porównywane.
Ale to jeszcze nie koniec.
Więc myślę, że tak, pod tym kryje się wiele rzeczy.
Są więc instrukcje siekania w górę i tego typu rzeczy.
Możesz spróbować rozwiązać to za pomocą tego kodu źródłowego Java, ale całkowicie byś oszalał.
Dlatego zamierzamy utworzyć wykres przepływu.
Ale najpierw zainstalujmy i uruchommy tę aplikację i spójrzmy, jak to wygląda.
Sam widok jest dość czysty i łatwy, ale dobrze o tym wiedzieć.
Z czym musimy sobie poradzić.
Dlatego przechodząc przez nasze obręcze, wchodzimy do naszego katalogu aplikacji UCAS challenge i zamierzamy nawiązać
połączenie przez ADB.
W porządku, więc robimy instalację adb, którą publikujesz w apk, a także otrzymamy tutaj ekran.
Tutaj.
Mamy tę aplikację UCAS.
Zacznę od tego.
I tak, jak już wspomniano, musimy podać tę flagę tutaj, a następnie musimy sprawdzić
tę flagę.
Dobrze.
Zamierzam zamknąć tę sprawę i szybko ją posprzątać.
Dobrze.
Teraz chcemy utworzyć wykres przepływu dla tej aplikacji.
Zajrzyjmy więc do oficjalnej dokumentacji Androida, ponieważ nie wiemy, jak to zrobić
w tej chwili.
Dlatego przechodzimy do wybranej przeglądarki internetowej i projektu Decompile i przyglądamy się tej dokumentacji,
ponieważ w poleceniu Decompile widzieliśmy tę opcję kreski dodatkowe wykresy przepływu sterowania
dla każdej metody.
Format to PNG, JPEG lub raw, co oznacza plik punktowy.
W porządku.
Jeśli przewiniemy trochę w dół, zobaczymy przykłady, a tam mamy folder wyjściowy Android
Decompile dash all.
Jest to dla nas całkowicie znajome.
Następnie mamy opcję F, która oznacza, w porządku, zapisz ten wykres przepływu sterowania w pliku S&P i g.
Musimy dostarczyć nasze APK.
Jest też fajny parametr, którym jest limit.
W ostatniej sekcji widzieliśmy, że mamy około 25 000 metod w naszym APK.
A jeśli zamierzasz teraz utworzyć wykres przepływu sterowania dla każdej metody, która jest wyjściem jak
na obrazku, zajmie to nawet godzinę.
Dlatego możemy ograniczyć dane wyjściowe tylko do niektórych nazw klas, których nie musimy dekompilować
i dostarczać obrazów dla każdej metody w tej aplikacji już teraz.
A to jest wyrażenie regularne.
Możemy więc zdefiniować początek nazwy naszej klasy.
Pokażę ci, jak to wygląda w naszym przypadku.
Więc jeśli przejdziemy do Z2 plus challenge z powrotem i możemy również użyć Chidgey, aby otworzyć te klasy, aby wysłać
tekst do Char, ponieważ nie potrzebujemy nazwy metody, musimy tylko znać nazwę klasy.
I tutaj widzimy, że mamy ten pakiet Androida, którym nie jesteśmy zainteresowani.
Mamy pakiet Android X, którym nie jesteśmy zainteresowani.
A potem mamy ten wspólny podstawowy post i chcemy tylko filtrować lub dostarczać te wykresy kodu
dla tych funkcji tutaj.
Dlatego udostępniamy nasz filtr dla tej nazwy pakietu.
Tim, musisz regulować ekspresję w tym zakresie.
Pierwsze dziecko musi być tym dużym L, co w języku somalijskim oznacza typ D.
Na razie istnieje nazwa klasy.
W naszym przypadku nie jest to elita.
To com slash bardziej podstawowy slash.
Możemy również udostępnić post w naszym przypadku, ale bardziej podstawowe byłoby tylko zdekompilowanie i dostarczenie
tych kontrolowanych wykresów przepływu dla tych klas w tym pakiecie.
W porządku.
Widzimy również, że musimy zainstalować dwie dodatkowe zależności roczne.
Musimy mieć zainstalowaną szerokość wykresu i kropkę.
Zróbmy to naprawdę szybko.
Uruchamiamy więc sudo apt get inside craft z.
Tak.
A jeśli chodzi o Pythona, trzymamy się naszej wersji Pythona trzy, ponieważ Android wymaga
Pythona trzy i dlatego używamy również pip trzy PIP trzy install upgrade dose packages pilot.
Oba OC zostały już zainstalowane.
Możemy teraz utworzyć nasz pierwszy wykres przepływu.
W związku z tym przechodzimy do EPS.
Istnieje wyzwanie UPS i.
Tak.
Hmm.
Można powiedzieć, że tworzymy nowy katalog.
Tak, tworzymy nowy katalog.
Mówimy więc i uwzględniamy dekompilację myślnika, myślnika, głowy.
A teraz mówimy, Andrew.
Boże, Decompile.
Zobaczmy.
Naszym nowym katalogiem jest teraz post podkreślenie c g dla wykresu kontrolnego.
O nie, to wykres przepływu.
Dlatego f g.
Następnie dostarczamy nasz format, który jest niejednolity i chcemy ograniczyć go do początku.
Jest to coś w rodzaju bardziej podstawowego.
W porządku, to powinno zadziałać.
Zobaczmy.
Podaj jeden plik do zdekodowania.
Zgadza się.
Musimy dostarczyć nasze APK.
Oczywiście powinno to działać już teraz.
Dobrze.
Zaczyna się lista kompilacji.
Nawet w przypadku najmniejszej liczby metod może to trochę potrwać.
Wrócę więc, jeśli proces ten zostanie zakończony.
W porządku.
W końcu ten proces się zakończył i przeszedł wiele metod.
Teraz wyobraźmy sobie, że zdekompilowaliśmy całą aplikację i utworzyliśmy wykres przepływu dla wszystkich metod.
Zajmie to sporo czasu, przypuszczam, że do godziny.
Zobaczmy więc, co tu mamy.
Otwieram to w przeglądarce plików.
A ten tutaj post underscore efg mamy teraz com mobi seq you pos i tutaj mamy teraz
jeszcze te pliki.
Pokażę ci, jak one wyglądają.
Zobaczmy.
Na przykład.
Jeśli więc mamy tylko skompilowane dane wyjściowe, na przykład jeśli zrobiliśmy to za pomocą zrzutu tekstu, jest to tylko dane wyjściowe,
które są tam przechowywane.
To bardzo pomocne, jeśli chcesz przez to przejść.
Ale tak, chyba nie jesteśmy jeszcze na to gotowi.
Dowiemy się, jak to zrobić, ale jeszcze nie teraz.
Okej, oprócz tego, mamy teraz te zdjęcia tutaj.
Sprawdźmy, gdzie znajduje się nasza flaga.
Dobrze.
Na początku mamy nazwę klasy, a następnie nazwę metody.
Rzućmy więc okiem wstecz.
Możemy również użyć tego, którego nie udało się zdekompilować.
Powinniśmy mieć nazwę pliku FC z metodą flagi kontrolnej.
Więc powinien być tutaj.
Zobaczmy.
Tutaj mamy dwa.
Więc jeśli szukamy czeku, łatwiej go znaleźć.
Nie widziałem tego tutaj.
Dobrze.
A teraz możemy to otworzyć.
Zalecam otwarcie tego za pomocą --, ponieważ ten plik jest naprawdę duży.
Można to zobaczyć.
To jest 32 i być dużym, co jest śmieszne dla obrazu takiego jak ten.
I tak, najlepszym sposobem na otwarcie tego jest użycie - ponieważ w przeciwnym razie możesz napotkać kłopoty.
Więc otwieramy nowy terminal tutaj, a następnie mówimy - i używamy F, C i naciskam górny przycisk wiele razy, a teraz
musimy go ponownie przeszukać.
Jest na początku.
Być może dlatego go nie widziałem.
Teraz otwieramy ten plik i widzimy, że ładuje się powoli.
Zobaczmy, co otrzymamy na wyjściu.
Mamy teraz wreszcie dane wyjściowe tego pliku.
Przy powiększeniu można pomyśleć: "Och, to wygląda jak bałagan, te wszystkie linie
tutaj".
Ale możesz też zobaczyć całą instrukcję oddziału i tak, jak śmieszne jest to wyzwanie.
Więc jeśli przewiniesz w dół, cóż, nie będzie jeszcze lepiej.
I tak, widzimy, że wygląda to absolutnie jak bałagan, ale imponujące jest to, jak dobrze radzisz sobie
z tym plikiem.
Jeśli przewiniemy trochę w dół, wydaje się, że jest jeszcze gorzej.
A tam mamy ogromne plop.
Zastanówmy się więc, co to jest.
To wszystko są wyjątki Java.
Więc jeśli skończymy tutaj, możemy się zdecydowanie mylić.
I tak, to dobry punkt wyjścia, ponieważ wiemy, że jeśli dojdziemy do tego poziomu, jeśli dojdziemy do jednego z
nich, jesteśmy w błędzie.
Dlatego musimy.
Dlatego możemy już wykluczyć wszystkie z nich.
Ale zastanówmy się, gdzie jest nasze rozwiązanie?
I już tutaj znaleźliśmy to.
Oto nasze rozwiązanie.
Musimy dotrzeć do tego punktu.
I naprawdę nie jest to trudne do znalezienia, ponieważ trzeba spojrzeć na koniec tego pliku i nie ma
tam zbyt wielu bloków.
Musisz więc przejść od prawej do lewej, a potem ty.
Tak.
W końcu udało mi się go odzyskać.
Może to być również ten lub ten, ale to wszystko.
Nie jest zakopany między tymi tutaj, ponieważ wtedy dotarłbyś do tego bloku znacznie wcześniej.
W porządku, ładnie.
Teraz wiemy, gdzie musimy się udać.
I tak, to jest Smiley i nie rozumiemy teraz Smileya, ale widzimy, że mamy zieloną i czerwoną
linię i mamy to.
Jeśli nie wiemy, że dowolny zestaw oznacza nie równe zero.
Więc po prostu wiemy, że istnieje instrukcja if, a zielona to właściwa ścieżka, a czerwona to
zła ścieżka.
Ale w tym momencie nie ma to nawet znaczenia dla tych dwóch, ponieważ jeśli dotrzemy do tego punktu tutaj,
mamy już naszą flagę porównaną z tą wartością.
W tym momencie wiemy, czy nasza flaga jest poprawna, czy nie.
Dlatego możemy zignorować wszystko, co znajduje się pod nią i możemy to zilustrować graficznie, tworząc nową
warstwę.
Klikamy więc nową warstwę.
I możesz zobaczyć ten plik jako absolutny, ogromny, duży.
Dlatego warto zwiększyć pamięć RAM maszyny wirtualnej, aby móc to wyświetlić.
Okej, teraz mamy naszą warstwę i teraz możemy przeciągnąć nasz ołówek do tego ołówka.
Przepraszam, wybieram żółty, ponieważ zielony, czerwony i niebieski są już wybrane.
Blues, nawiasem mówiąc, pojedyncza ścieżka.
Więc jeśli mamy gałąź z true lub false, mamy zielony, czerwony i niebieski niebieski, pojedynczą instrukcję i pojedynczego
mistrza.
Przepraszam.
W ten sposób.
Dobrze.
Więc teraz możemy powiedzieć.
Dobra, ten tutaj, musimy się tu dostać.
Tam można dostosować rozmiar pędzla.
Więc zobaczmy, zróbmy to trochę mniejsze, może osiem.
Dlatego możemy zignorować to i to, a także możemy zignorować wszystkie te wyjątki Java na dole.
Oznacza to, że musimy iść do tego.
Zobaczmy więc, na czym skończymy.
Mamy błędne stwierdzenie.
To błędne stwierdzenie prowadzi do tego, a to prowadzi do naszych wyjątków tutaj.
Możemy to całkowicie wyeliminować.
Tam również mamy wyjątek.
I tutaj również mamy wyjątek.
A tutaj mamy prawdziwe oświadczenie.
I ten.
Przepraszam.
Tym musimy się zająć.
Interesujące.
Ten tutaj.
Posprzątam to bardzo szybko.
Hmm.
Ten?
Tak.
A ten tutaj ma połączenie z torbą.
Tak więc ten blok ma możliwość cofania się w ten sposób, aż dotrzemy do naszego bloku.
Dobrze.
Więc być może będziemy musieli na to uważać.
ZABLOKUJ błędne stwierdzenie.
Również.
Musimy więc uważać na błędne stwierdzenie, ponieważ błędne stwierdzenie może obalić to prawdziwe
stwierdzenie, a wtedy możemy wrócić do tego.
W porządku.
Tak więc ten blog jest dla nas ważny i ten blok jest również ważny dla nas.
Będziesz musiał wybrać, jak sądzę, inne kolory dla innych, aby wyeliminować rzeczy i je zaakceptować.
Przeczytajmy więc, jak je wyeliminować.
To chyba lepsze podejście.
Dobrze.
Teraz już to wiemy.
Zastanówmy się, dokąd zmierzamy.
Więc tutaj możemy się dostać.
Dlatego ponownie wybieram żółtą ścieżkę.
Ten blok jest ważny i kończy się tutaj, czyli tutaj.
To również jest ważne.
To nie jest ważne.
Nie.
Na pierwszy rzut oka wydaje się to mało istotne, ale możemy zaznaczyć to inaczej, aby później
przyjrzeć się temu bliżej.
W ten sposób dochodzimy do ostatecznego rozwiązania.
A śledząc to wstecz, zajmuje to trochę czasu.
Ale tutaj, w tym bloku, można już zobaczyć korzyści z tego płynące.
Zobaczmy.
Mamy więc ten tutaj.
Ten.
Dlatego ważne jest tutaj prawdziwe stwierdzenie.
A to oznacza, że można go wyeliminować.
To nie jest istotne.
To jedno domyślne stwierdzenie nie jest istotne.
Musimy więc przejść do tego ekranu.
Następnie musimy przejść do tego bloku, a potem do tego.
W tym bloku zdecydowanie wiemy, że czwarta gałąź jest niewłaściwą gałęzią.
I tak, więc możemy prześledzić to wstecz i widać, że nie zrobiliśmy tak dużego postępu lub jest w porządku.
Zakładam, że czeka nas jeszcze sporo pracy, ale tak, to możliwe.
Lub w moim przypadku jedynym rozwiązaniem jest zrobienie tego w ten sposób.
Ponieważ jeśli pozostaniesz w kodzie źródłowym Java i zobaczysz wszystkie te nawiasy klamrowe, to jest to super bałagan,
jak to zrobić.
Wygląda to również niechlujnie, ale jeśli spróbujesz tego wyzwania z tym podejściem, na pewno będziesz w stanie
je rozwiązać.
W porządku.
To wszystko na temat wykresu kodu.
Nie zamierzam teraz zdradzać dalszego rozwiązania.
Jeśli masz jakieś pytania na ten temat, napisz do mnie wiadomość.
Będę bardzo zadowolony, jeśli otrzymam opinie na ten temat i tak, w przeciwnym razie mamy ostatnią sekcję, dopóki
nie przejdziemy do tego dużego rozdziału w naszym kursie, części z emotikonami, a potem.
Wtedy będziemy w stanie zrozumieć, co się tam dzieje, co oznaczają wszystkie te instrukcje, co
jest super śmieszne, miłe i daje nieograniczoną moc w hakowaniu aplikacji na Androida.
Więc do zobaczenia.