Tutorial Android Log Injection

Paşi de bază pentru Log Injections în APK-urile Android OS

Despre Log Injection

Logging-ul în Android este o modalitate de a înregistra mesajele și evenimentele care au loc în timpul execuției unei aplicații, ceea ce poate ajuta dezvoltatorii să depaneze și să-și monitorizeze aplicațiile. Dezvoltatorii folosesc de obicei instrumentul Logcat pentru a vizualiza aceste jurnale, care pot include informații despre performanța aplicației, erori și evenimente de sistem.

Procesul de injectare a mesajelor de tip log în Android are loc atunci când mesajele sunt puse de un utilizator neautorizat în fișiere jurnalizate (LOG), permițând atacatorilor să creeze intrări de jurnal false sau să injecteze conținut rău intenționat. Acest lucru poate duce la confuzie în datele de jurnal, ceea ce face dificil pentru dezvoltatori să identifice problemele reale sau încălcările de securitate. În ciuda acestei definiții oficiale, aceasta este o metodă bună de a depana sau de a testa și aplicațiile dvs. Aceste metode intruzive sunt aplicate de testări performanți sau aplicații terțe.

De obicei vânăm fișierul MainActivity.java pentru a obține punctul de start al aplicației, dar nu mereu are același nume sau aceeași locație. Pentru a fi sigur că ați obținut fișierul corect, ar trebui să verificați înainte în fișierul AndroidManifest.xml. Aici căutați următoarea porțiune de cod:

<intent-filter>
<action android:name=”android.intent.action.MAIN” />

<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>

Această bucată de cod se află în interiorul unei alte etichete XML tag  <activity>. Acela indică clasa ce pornește activitatea principală pe care o vizați.

Următorul tutorial este realizat în Linux, dar este ușor adaptabil la Windows și macOS.

Avertisment: Făcând acest tutorial, necesită cunoștințe de bază despre Linux, comenzile terminalului și instrumentul Android ADB.

Referințele documentației:

Aplicația țintă pentru acest tutorial: https://play.google.com/store/apps/details?id=com.ideashower.readitlater.pro
Instrumentul de descărcat APK-uri: https://apkcombo.com/downloader
Adresa aplicației în PlayStore: https://apkcombo.com/downloader/#package=com.ideashower.readitlater.pro
Instrumentul principal de compilare si decompilare pentru APK-uri: https://apktool.org/docs/install

Instrumente necesare:
– emulatorAndroid ori un telefon cu Android OS
– ADB
– apktool

OBS: Dacă ai instalat Android Studio deja ai primele 2 instrumente necesare, pentru apktool folosește link-ul de mai sus.

Comenzi necesare de bază:
# apktool d app.apk
# apktool b app.apk

# adb shell log -t my_tag „About to …”
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

Deschidem un terminal Linux (Ctrl + Alt + T)
# Decompilam fișierul descărcat
$ apktool d Pocket_+Save.+Read.+Grow._8.33.0.0_apkcombo.com.apk
# deschidem un emulator pentru teste sau conectezi propriul smartphone cu Android la PC și sari peste urmatoarele 2 comenzi
$ emulator -list-avds
$ emulator -avd Nexus_5X_API_23

# Verificăm ce dispozitiv s-a conectat (apare emulatorul sau smartphone-ul propriu)

$ adb devices

# Cream o cheie de debug pentru semnătura apk-ului
$ keytool -genkey -v -keystore debug.keystore -alias android -keyalg RSA -keysize 2048 -validity 20000
# alias: android
# parola: android

# avem un BUG în apktool, iar urmatorul link explică toată problema din spate https://github.com/iBotPeaches/Apktool/issues/1626
# pentru a evita următorul mesaj când încercăm să facem instalarea INSTALL_FAILED_INVALID_APK: Failed to extract native libraries https://github.com/scala-android/sbt-android/issues/252

# Fixarea bug-ului: am deschis în vi în linia de comanda din linux și am schimbat un parametru ca-n liniile următoare (puteți folosi orice editor aveți la îndemână)

$ vi AndroidManifest.xml
# change android:extractNativeLibs=”false” to „true”

$ vi Pocket_+Save.+Read.+Grow._8.33.0.0_apkcombo.com/smali_classes2/com/pocket/app/MainActivity.smali
# În fișierul de mai sus adaugam cele 3 linii în constructorul principal -> .method static constructor <clinit>()V
const-string v0, „NTLogger”
const-string v1, „Hello Nostalgitech.com”
invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I

# Refacem APK-ul
$ apktool b Pocket_+Save.+Read.+Grow._8.33.0.0_apkcombo.com

# Fișierul o să fie în folderul dist în folderul decompilat al APK-ului original

# Semnăm apk-ul pentru testare
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore Pocket_+Save.+Read.+Grow._8.33.0.0_apkcombo.com/dist/Pocket_+Save.+Read.+Grow._8.33.0.0_apkcombo.com.apk android

# Testare
$ adb install Pocket_+Save.+Read.+Grow._8.33.0.0_apkcombo.com/dist/Pocket_+Save.+Read.+Grow._8.33.0.0_apkcombo.com.apk
# treci de SplashScreen de la prima rulare pe emulator sau dispozitiv, apoi poți rula aplicația de câte ori dorești pentru a vedea mesajul în logcat
$ adb logcat | grep NTLogger

Dacă drești să rulazi mai multe teste, nu uita să dezinstalazi APK-ul înainte de instalarea din nou.

Pentru a scrie și mai multe articole despre astfel de tutoriale și tehnologie veche, mă poți ajuta cu o ☕ CAFEA ☕

Fii primul care comenteaza!

Lasă un comentariu.

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.