<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Czasami interesujące jest zmodyfikowanie kodu aplikacji, aby uzyskać dostęp do ukrytych informacji (może to być dobrze zaszyfrowane hasła lub flagi). W takim przypadku warto zdekompilować plik apk, zmodyfikować kod i ponownie go skompilować.
Korzystając z **Visual Studio Code** i rozszerzenia [APKLab](https://github.com/APKLab/APKLab), można **automatycznie dekompilować**, modyfikować, **rekompilować**, podpisać i zainstalować aplikację bez wykonywania żadnych poleceń.
Jeśli `apktool`**ma problemy z dekodowaniem aplikacji**, zajrzyj na stronę [https://ibotpeaches.github.io/Apktool/documentation/#framework-files](https://ibotpeaches.github.io/Apktool/documentation/#framework-files) lub spróbuj użyć argumentu **`-r`** (Nie dekoduj zasobów). Wtedy, jeśli problem występował w zasobie, a nie w kodzie źródłowym, nie będziesz mieć tego problemu (nie zdekodujesz również zasobów).
Możesz **zmieniać****instrukcje**, zmieniać **wartość** niektórych zmiennych lub **dodawać** nowe instrukcje. Ja zmieniam kod Smali za pomocą [**VS Code**](https://code.visualstudio.com), następnie instalujesz **rozszerzenie smalise** i edytor powie Ci, czy któraś **instrukcja jest niepoprawna**.\
**zipalign** to narzędzie do wyrównywania archiwów, które zapewnia ważne optymalizacje plików aplikacji Android (APK). [Więcej informacji tutaj](https://developer.android.com/studio/command-line/zipalign).
Jeśli wolisz używać [**apksigner**](https://developer.android.com/studio/command-line/) zamiast jarsigner, **powinieneś podpisać apk** po zastosowaniu optymalizacji za pomocą zipalign. ALE ZWRÓĆ UWAGĘ, ŻE MUSISZ PODPISAĆ APLIKACJĘ TYLKO RAZ Z jarsigner (przed zipalign) LUB Z aspsigner (po zipalign).
Aby utworzyć nową klasę w pliku Smali, należy utworzyć nowy plik o rozszerzeniu `.smali` i umieścić go w odpowiednim katalogu zgodnie z hierarchią pakietów. Następnie należy zdefiniować nazwę klasy, używając dyrektywy `.class` i określić dziedziczenie, jeśli jest to konieczne, za pomocą dyrektywy `.super`.
Przykład:
```smali
.class public Lcom/example/MyClass;
.super Ljava/lang/Object;
```
#### Dodawanie pól
Aby dodać pole do klasy, należy użyć dyrektywy `.field` i określić modyfikatory dostępu, typ pola oraz jego nazwę.
Przykład:
```smali
.field private static myField:I
```
#### Dodawanie metod
Aby dodać metodę do klasy, należy użyć dyrektywy `.method` i określić modyfikatory dostępu, typ zwracany, nazwę metody oraz listę argumentów. Następnie należy zdefiniować ciało metody, używając instrukcji Smali.
Przykład:
```smali
.method public static myMethod(II)I
.registers 3
add-int v0, p0, p1
return v0
.end method
```
#### Dodawanie instrukcji
Aby dodać instrukcję do metody, należy użyć odpowiedniej instrukcji Smali, takiej jak `move`, `add-int`, `invoke-static`, itp. Instrukcje Smali są podobne do instrukcji Javy, ale mają nieco inną składnię.
Przykład:
```smali
add-int v0, p0, p1
```
#### Modyfikowanie istniejących instrukcji
Aby zmodyfikować istniejącą instrukcję w metodzie, należy znaleźć odpowiednią instrukcję w pliku Smali i zmienić jej argumenty lub operacje. Można to zrobić, edytując plik Smali ręcznie lub za pomocą narzędzi do automatycznego modyfikowania plików Smali.
Aby usunąć instrukcję z metody, należy znaleźć odpowiednią instrukcję w pliku Smali i usunąć ją. Można to zrobić, edytując plik Smali ręcznie lub za pomocą narzędzi do automatycznego modyfikowania plików Smali.
* Jeśli zamierzasz używać zadeklarowanych zmiennych wewnątrz funkcji (zadeklarowane v0,v1,v2...), umieść te linie między _.local \<number>_ a deklaracjami zmiennych (_const v0, 0x1_)
* Jeśli chcesz umieścić kod logowania w środku kodu funkcji:
* Dodaj 2 do liczby zadeklarowanych zmiennych: np. z _.locals 10_ na _.locals 12_
* Nowe zmienne powinny mieć kolejne numery po już zadeklarowanych zmiennych (w tym przykładzie powinny to być _v10_ i _v11_, pamiętaj, że zaczynamy od v0).
* Zmień kod funkcji logowania i użyj _v10_ i _v11_ zamiast _v5_ i _v1_.
Ten kod jest przygotowany do wstawienia w **środku funkcji** (**zmień** liczbę **zmiennych** według potrzeb). Będzie on pobierał **wartość this.o**, **przekształcał** ją na **String** i następnie **wyświetlał** tost z jej wartością.
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.