Smali - Decompiling/[Modifying]/Compiling
Soms is dit interessant om die toepassingskode te wysig om toegang te verkry tot verborge inligting vir jou (miskien goed verduisterde wagwoorde of vlae). Dan kan dit interessant wees om die apk te ontkompileer, die kode te wysig en dit weer te kompileer.
Opcodes verwysing: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Vinnige Metode
Met behulp van Visual Studio Code en die APKLab uitbreiding, kan jy die toepassing outomaties ontkompileer, wysig, kompileer, onderteken & installeer sonder om enige bevel uit te voer.
'n Ander skripsie wat hierdie taak baie vergemaklik, is https://github.com/ax/apk.sh
Ontkompileer die APK
Met behulp van APKTool kan jy toegang kry tot die smali-kode en hulpbronne:
As apktool jou enige fout gee, probeer om die nuutste weergawe te installeer.
Sommige interessante lêers waarop jy moet let is:
res/values/strings.xml (en alle xml's binne res/values/*)
AndroidManifest.xml
Enige lêer met die uitbreiding .sqlite of .db
As apktool
probleme ondervind met die dekodeer van die toepassing, kyk na https://ibotpeaches.github.io/Apktool/documentation/#framework-files of probeer om die argument -r
te gebruik (Dekodeer nie hulpbronne nie). As die probleem in 'n hulpbron was en nie in die bronkode nie, sal jy nie die probleem hê nie (jy sal ook nie die hulpbronne dekodeer nie).
Verander smali-kode
Jy kan instruksies verander, die waarde van sommige veranderlikes verander of nuwe instruksies byvoeg. Ek verander die Smali-kode met behulp van VS Code, jy installeer dan die smalise-uitbreiding en die redakteur sal jou vertel of enige instruksie onjuis is. Sommige voorbeelde kan hier gevind word:
Of jy kan hieronder 'n paar Smali-veranderinge wat verduidelik word, nagaan.
Kompileer die APK weer
Nadat jy die kode verander het, kan jy die kode kompileer deur gebruik te maak van:
Dit sal die nuwe APK kompileer binne die dist vouer.
As apktool 'n fout gooi, probeer die nuutste weergawe installeer
Onderteken die nuwe APK
Dan moet jy 'n sleutel genereer (jy sal gevra word vir 'n wagwoord en vir sommige inligting wat jy lukraak kan invul):
Uiteindelik, teken die nuwe APK:
Optimeer nuwe aansoek
zipalign is 'n argief-uitlyningstool wat belangrike optimalisering aan Android-aansoek (APK) lêers bied. Meer inligting hier.
Onderteken die nuwe APK (weer?)
As jy verkies om apksigner te gebruik in plaas van jarsigner, moet jy die apk onderteken nadat jy die optimalisering met zipalign toegepas het. MAAR LET OP DAT JY DIE AANSOEK SLEGS EEN KEER MOET ONDERTEKEN MET jarsigner (voor zipalign) OF MET apksigner (na zipalign).
Wysiging van Smali
Vir die volgende Hello World Java-kode:
Die Smali-kode sal wees:
Die Smali instruksie stel is beskikbaar hier.
Ligte Veranderinge
Wysig aanvanklike waardes van 'n veranderlike binne 'n funksie
Sommige veranderlikes word aan die begin van die funksie gedefinieer deur die opcode const, jy kan sy waardes wysig, of jy kan nuwe een definieer:
Basiese Operasies
Smali-lêers wysig
Smali-lêers is die mensleesbare weergawe van die Android Dalvik Bytecode. Dit kan gewysig word om die gedrag van 'n Android-toepassing te verander. Hier is 'n paar basiese operasies wat jy kan uitvoer op Smali-lêers:
1. Instruksies toevoeg
Jy kan nuwe instruksies byvoeg om die funksionaliteit van die toepassing te verander. Byvoorbeeld, jy kan 'n nuwe funksie implementeer deur die nodige Smali-instruksies by te voeg.
2. Instruksies verwyder
As jy 'n spesifieke funksie of gedrag wil uitskakel, kan jy die relevante Smali-instruksies verwyder. Dit sal verhoed dat die toepassing daardie spesifieke funksie uitvoer.
3. Instruksies wysig
Jy kan bestaande Smali-instruksies wysig om die funksionaliteit van die toepassing aan te pas. Byvoorbeeld, jy kan 'n waarde verander wat deur 'n instruksie gebruik word, of jy kan 'n voorwaardelike instruksie verander om 'n ander pad te volg.
4. Metodes vervang
Jy kan bestaande metodes in die Smali-lêer vervang met jou eie implementasie. Dit gee jou die vermoë om die funksionaliteit van die toepassing te verander sonder om nuwe instruksies by te voeg.
5. Klasstruktuur wysig
Jy kan die klasstruktuur van die Smali-lêer wysig deur klasse te verwyder, nuwe klasse by te voeg of bestaande klasse te wysig. Hierdie operasie kan die gedrag van die toepassing drasties verander.
6. Hulpbronne wysig
Smali-lêers bevat ook verwysings na hulpbronne soos teks, beelde en klanklêers. Jy kan hierdie hulpbronne wysig om die visuele of klankaspekte van die toepassing te verander.
7. Manifestlêer wysig
Die manifestlêer bevat belangrike inligting oor die toepassing, soos die toestemmings wat dit vereis en die komponente wat dit bevat. Jy kan die manifestlêer wysig om die toepassing se gedrag te beïnvloed.
8. Smali-lêers saamvoeg
As jy 'n nuwe funksie wil toevoeg wat afhanklik is van bestaande Smali-kode, kan jy die lêers saamvoeg om die funksionaliteit te bereik.
9. Smali-lêers opsplit
As jy slegs 'n deel van die Smali-kode wil wysig, kan jy die lêers opsplit en slegs die relevante deel wysig.
10. Smali-lêers onderteken
Nadat jy die Smali-lêers gewysig het, moet jy dit onderteken om te verseker dat die toepassing korrek uitgevoer word.
Groter Veranderinge
Logging
Aanbevelings:
As jy verklaarde veranderlikes binne die funksie gaan gebruik (verklaarde v0,v1,v2...), plaas hierdie lyne tussen die .local <nommer> en die verklarings van die veranderlikes (const v0, 0x1)
As jy die logkode in die middel van die funksie se kode wil plaas:
Voeg 2 by die aantal verklaarde veranderlikes: Byvoorbeeld: vanaf .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 logfunksie en gebruik v10 en v11 in plaas van v5 en v1.
Rooster
Onthou om 3 by die aantal .locals aan die begin van die funksie te voeg.
Hierdie kode is gereed 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, dit na 'n String omskep en dan 'n rooster maak met sy waarde.
Last updated