Smali - Decompiling/[Modifying]/Compiling
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Soms is dit interessant om die toepassingskode te wysig om toegang te verkry tot verborge inligting vir jou (miskien goed obfuskeerde wagwoorde of vlae). Dan kan dit interessant wees om die apk te decompileer, die kode te wysig en dit weer te compileer.
Opcodes verwysing: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Met Visual Studio Code en die APKLab uitbreiding, kan jy outomaties decompileer, wysig, hercompileer, teken & installeer die toepassing sonder om enige opdrag uit te voer.
Nog 'n script wat hierdie taak baie vergemaklik, is https://github.com/ax/apk.sh
Met APKTool kan jy toegang verkry tot die smali kode en hulpbronne:
If apktool gee vir jou enige fout, probeer om die nuutste weergawe te installeer.
Sommige interessante lêers wat jy moet kyk is:
res/values/strings.xml (en alle xmls binne res/values/*)
AndroidManifest.xml
Enige lêer met die uitbreiding .sqlite of .db
As apktool
probleme het om die toepassing te dekodeer, kyk na https://ibotpeaches.github.io/Apktool/documentation/#framework-files of probeer om die argument -r
te gebruik (Moet nie hulpbronne dekodeer nie). Dan, as die probleem in 'n hulpbron was en nie in die bronnekode nie, sal jy nie die probleem hê nie (jy sal ook nie die hulpbronne dekompileer nie).
Jy kan verander instruksies, die waarde van sommige veranderlikes verander of voeg nuwe instruksies by. Ek verander die Smali kode met behulp van VS Code, jy installeer dan die smalise uitbreiding en die redigeerder sal jou vertel of enige instruksie verkeerd is. Sommige voorbeelde kan hier gevind word:
Of jy kan onderaan kyk na sommige Smali veranderinge verduidelik.
Na die aanpassing van die kode kan jy die kode hernoem met:
Dit sal kompiler die nuwe APK binne die dist gids.
As apktool 'n fout gooi, probeer om die nuutste weergawe te installeer
Dan moet jy 'n sleutel genereer (jy sal gevra word vir 'n wagwoord en vir 'n paar inligting wat jy lukraak kan invul):
Uiteindelik, teken die nuwe APK:
zipalign is 'n argiefuitlijningsinstrument wat belangrike optimalisering aan Android-toepassing (APK) lêers bied. Meer inligting hier.
As jy voorkeur gee aan apksigner in plaas van jarsigner, moet jy die apk teken nadat jy die optimalisering met zipalign toegepas het. MAAR LET OP DAT JY SLEGS DIE AANSOEK EEN KEER MOET TEKEN MET jarsigner (voor zipalign) OF MET aspsigner (na zipalign).
Vir die volgende Hello World Java kode:
Die Smali-kode sou wees:
Die Smali instruksieset is beskikbaar hier.
Sommige veranderlikes word aan die begin van die funksie gedefinieer met die opcode const, jy kan sy waardes verander, of jy kan nuwe eenhede definieer:
Recommendations:
As jy verklaarde veranderlikes binne die funksie gaan gebruik (verklaarde v0,v1,v2...) plaas hierdie lyne tussen die .local <number> en die verklarings van die veranderlikes (const v0, 0x1)
As jy die logging kode in die middel van die kode van 'n funksie wil plaas:
Voeg 2 by die aantal verklaarde veranderlikes: Byvoorbeeld: van .locals 10 na .locals 12
Die nuwe veranderlikes moet die volgende nommers van die reeds verklaarde veranderlikes wees (in hierdie voorbeeld moet dit v10 en v11 wees, onthou dat dit begin by v0).
Verander die kode van die logging funksie en gebruik v10 en v11 in plaas van v5 en v1.
Onthou om 3 by die aantal .locals aan die begin van die funksie te voeg.
Hierdie kode is voorberei om in die middel van 'n funksie ingevoeg te word (verander die nommer van die veranderlikes soos nodig). Dit sal die waarde van this.o neem, transformeer dit na String en dan 'n toast maak met sy waarde.
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)