Hoe te decompileren en Android-APK's te onderwerpen
Heb je ooit een Android-app geopend en hield je niet van het kleurenthema dat het gebruikte? Wat als u bijvoorbeeld een witte achtergrond in een app in zwart wilde veranderen? Vandaag laat ik je zien hoe je een .APK-bestand decompileert, zodat je de bestanden erin kunt bewerken, vervolgens opnieuw kunt compileren en op je Android-telefoon kunt installeren.
Opmerking: sommige apps zijn moeilijker te thematiseren dan andere. Facebook Messenger bijvoorbeeld is notoir moeilijk te thematiseren. Ik zal je deze gids helpen met behulp van de Dropbox-app als een voorbeeld, omdat dit een van de gemakkelijkst te bewerken is.
Vereisten
- notepad ++
- APKTool + laatste AAPT
- APKMulti Tool Script
- Een fotoredacteur zoals Photoshop / GIMP
- [Optioneel] Dropbox .apk (voor het volgen van deze handleiding)
Download alle vereiste hulpmiddelen en installeer ze op uw pc, inclusief het hierboven verstrekte test.apk. Dropbox is een van de eenvoudigere apps om te thematiseren, dus we zullen het voor deze zelfstudie gebruiken.
U moet ook framework-res.apk van uw telefoon naar uw pc overbrengen, deze bevindt zich in / system / framework / op uw interne opslag.
Plaats de APKTool en de AAPT in de map Other in de hoofdmap van de APK Multi Tool.
Sleep de test.apk naar de map Place-apk-here-for-modding in de map APK Multi Tool en je wordt begroet met een opdrachtterminal.
Druk op een willekeurige toets om door te gaan en je ziet een terminalmenu met een heleboel opties. Kies optie 24.
U keert terug naar het hoofdterminalscherm, maar test.app wordt uw project. Dus druk op 9 om de APK te decompileren en druk vervolgens op 12 om een test-build uit te voeren. Dit is een goede oefening om te zien of iets verkeerd is opgezet. Als de app correct is opgebouwd, drukt u op 2 en minimaliseert u het script dat verschijnt.
Aangezien de testopbouw is uitgecheckt, gaan we dieper in op het bewerken van de XML-code van de APK. Volg alsjeblieft zorgvuldig.
Ga in de uitgepakte map .apk naar de map Resource en open AndroidManifest.xml met Notepad ++. Druk nu op CTRL + F om de volgende tekenreeks te vinden:
android: background
Gebruik de optie Alles zoeken en er moeten ongeveer 190 tekenreeksen zijn gevonden. Dus nu moet je elke gemarkeerde string doorlopen, om er zeker van te zijn dat je niets mist als we de achtergrondkleur van de app veranderen.
Blader door tot je Camera_upload_grid.xml vindt met de tekenreeks android: background = @ * android: color / white. Kopieer die hele reeks en druk op CTRL + H zodat het dialoogvenster Vervangen verschijnt. Plak de tekenreeks in de bovenste en onderste regel, maar we moeten deze wijzigen.
Ga in de gedecompileerde map .apk naar /res/values/colors.xml en open deze in Notepad ++. Zoek naar de regel abs__background_holo_dark, wat zeker een achtergrond is. Kopieer nu die reeks en ga terug naar het eerste XML-bestand dat we hadden geopend, met het vakje Vervangen nog geopend en plak in de onderste regel de reeks die u zojuist hebt gekopieerd. U zou nu dus in de onderste regel van het dialoogvenster Vervangen moeten hebben:
android: background = @ kleur / abs__background_holo_dark
Klik nu op Alles vervangen en het verandert alle @android: color / white's om in plaats daarvan de background_holo_dark te gebruiken. Blader nu verder door de hele .xml en zoek naar android: achtergrondstrings die een hexadecimale waarde gebruiken (#fffffff) of iets anders dan wat we zojuist hebben vervangen. Voor degene die je vindt, verander je de snaren om de nieuwe te gebruiken (abs__background_holo_dark).
Dus we hebben de achtergrond veranderd, nu gaan we de tekstkleur veranderen. Dus volg dezelfde procedure die we net hebben gedaan, maar doe dit keer een CTRL + F voor android: textColor. Je krijgt ongeveer 166 lijnen gevonden.
Je ziet dingen als Android: textColor = # ffbbbbbb, enzovoort. Kijk dus opnieuw in de Colors.xml en we moeten uitzoeken welke regels we moeten vervangen voor de tekstkleur.
Je kunt de Android zien: textColor = # ffbbbbbb, #ffffffff, # ff717171, en #ffcccccc in de screenshot en in je zoekresultaten in Note ++. Open nu uw Colors.xml opnieuw om te vinden welke regel we voor de tekstkleur willen gebruiken.
Ga dus terug naar de eerste .xml en voer nogmaals CTRL + H uit voor het dialoogvenster Vervangen. Kopieer nu de reeks android: textColor = # ffbbbbbb naar de boven- en onderkant en verander de onderste regel naar android: textColor = @ color / text.
Zoek nu opnieuw door alle android: textColor-regels en verander alles met een hex-waarde in de string. Eindelijk wanneer je bij het styles.xml-bestand komt, wil je de inverse van een paar regels verwijderen, beginnend bij regel 260 en een paar regels verder naar beneden. Dus verwijder de omgekeerde van die reeksen.
Vervolgens ziet u enkele hexadecimale waarden rond op regels 527, 536, 573, 579, 585, 601 en enkele andere. Vervang de van (#ffffffff) in (@ kleur / tekst).
Druk op CTRL + F om te zoeken in Notepad ++ voor cacheColorHint, divider, @ * android: color /, en Inverse .
De cacheColorHint is de schuifachtergrond, dus we moeten ervoor zorgen dat ze onze achtergrondkleur gebruiken. De verdelers spreken voor zich en we kunnen hun hex-waarden wijzigen als u dat wilt. Het enige is dat je niets mag aanraken dat naar @drawable verwijst. Dat zijn meestal afbeeldingen die als .png-bestanden elders in de .apk-map zijn opgeslagen.
Wanneer u naar invers zoekt, worden verwijzingen naar textAppearanceInverse weergegeven. U moet op elk van deze dubbelklikken en de omgekeerde van die reeksen verwijderen.
Ten slotte zal de zoekopdracht naar @ * android: color / alleen controleren of we eventuele framework-bewerkingen hebben gemist. Als je iets vindt dat android zegt: popupBackground> @ * android: color / white, moet je dit wijzigen in android: popupBackground> @ color / abs__background_holo_dark. Dit omvat regel 911, wat verwarrend kan zijn omdat het al naar Android verwijst: kleur / zwart.
Vervolgens openen we res / values / colors.xml en veranderen deze om er zo uit te zien:
Volgende res / values / styles.xml en scrol omlaag naar regel 328. Verander het zo:
PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken() moet worden gewijzigd in ()
Doe hetzelfde voor regel 479, verander het licht in zwart .
Ga nu naar res / values-v11 / styles.xml en verwijder het licht waar het Holo.Light zegt.
Vervolgens open je res / values-v14 / styles nu, die veel strings bevat. Dus op de eerste 46 regels wil je alle Licht- en inverse verwijzingen verwijderen en dan de ouders op regels 53 en 54 veranderen in @ * android: style / Theme.Holo.
Verwijder op regel 69, aan de rechterzijde van de ouder, het licht uit de @ * android: style / Theme.Holo.Light.Dialog bovenliggende.
Dit is veel werk, toch? Misschien zul je vanaf nu meer waardering hebben voor app-thema's en -huiden!
Vervolgens gaan we naar de map res / colour . Er zijn een aantal tekstbestanden die naar zwart wijzen. Open res / colors / action_mode_item_text_color_state_list.xml
Dat is hoe het eruit ziet op voorraad. Hieronder ziet u hoe u het moet maken.
U moet die wijzigingen aanbrengen in de volgende xml-bestanden in de map / res / colors: Bottom_button.xml, Button_update.xml, Filelist_text_name.xml, Filelist_text_small.xml, Link_button.xml, Local_filelist_text_name.xml, Local_filelist_text_small.xml, ss_bottom_bottom_text_color_dark. xml, ss_bottom_bottom_text_color_light.xml, tab_text_foreground.xml.
Als je daarmee klaar bent, open / res / drawable en er zijn xmls die achtergrondkleur regelen. Dus ga door ze heen en laat ze er zo uitzien:
Pas dezelfde wijzigingen toe op alle andere drawable.xml-bestanden.
Open nu de test.apk en druk op CTRL + linkermuisknop om smali en AndroidManifest te markeren, klik vervolgens met de rechtermuisknop en Bewerken met Notepad ++ opnieuw. Ga akkoord met alle smali-bestanden van 1999. Wanneer het wordt geladen, voert u een CTRL + F-zoekopdracht uit voor -0x100 (zwart)
Je krijgt ongeveer 8 hits, en degene die je wilt is smali / com / dropbox / android / activity / TextEditActivity.smali, op regel 599. Dubbelklik op die regel.
Regel 599 bevat -0x100 erin en regel 601 heeft SetTextColor. Er is ook een variabele die overeenkomt met regel 599. Dus om kort uit te leggen, -0x100, -0x1000000 en zelfs 0x0 betekent zwart, -0x1000000 is ook zwart en zelfs 0x0. Verander regel 599 door de twee 0's van de 100 te verwijderen en verwijder de / high16 als volgt:
Vervolgens gaan we op zoek naar @ * android: style, maar in smali. De xml bevat een extra 0 na de x, maar in smali gebruiken we deze niet. Het moet 0x103004f zijn in plaats van 0x0103004f.
Doe een zoekopdracht in Notepad ++ voor @ * android: style / die 0x103 bevat.
De tweede hit is const v7, 0x1030073. Zoek dat opnieuw in uw public.xml vanuit framework-res.apk. Je zult zien dat dit het ID is voor Theme.Holo.Light.Dialog. U moet dit wijzigen in de openbare id van de tegenovergestelde themastijl.
Aangezien dit een Theme.Holo.Light.Dialog is, wil je het Theme.Holo.Dialog maken. Theme.Holo.Dialog heeft een id van 0x103006f. Hierdoor wordt een waarschuwingsvenster voor een pop-upvenster gewijzigd in een donker Holo-thema in plaats van een lichter op Holo.Light gebaseerd thema.
De volgende die we moeten wijzigen is 0x103006e, het is Theme.Holo.Light. Dus ga je gang en maak het de tegenovergestelde themastijl. In uw public.xml van framework-res.apk ziet u de ID voor Theme.Holo is 0x0103006b. dus laten we die regel veranderen om er zo uit te zien:
Er zijn er nog 2 meer om door te nemen. De volgende is 0x103000c, wat is voor Theme.Light in public.xml. Het tegenovergestelde daarvan is Theme.Black, niet ThemeHolo. Dus in de public.xml ziet u de ID voor Theme.Black is 0x01030008 - verander het om er zo uit te zien:
In andere apps zijn er nog andere dingen die u kunt bewerken en wijzigen en met voldoende oefening kunt u bijna alles opnieuw bekijken. Maar voor nu zijn we klaar met alle codebits ( eindelijk!) .
Dus nu kun je het script openen vanuit de Apk Multi Tool en druk op 12 om de app te compileren. Als er fouten worden weergegeven, kunt u in het foutenlogboek proberen te kijken wat er mis is gegaan, maar het is zeer waarschijnlijk dat u tijdens het bewerken van de code een typefout of een andere fout hebt gemaakt.
Wanneer de build is voltooid, drukt u op 2 en vervolgens op 13 om de app opnieuw te ondertekenen.
De stock-app bevat een map met de naam Sjablonen - u moet die naar uw niet-ondertekende apk slepen met zoiets als 7zip. Kopieer de unsigned.apk naar de place-apk-here-for-signing map binnen Apk Multi Tool. Druk nu op 18 in het terminalscript om de apps in die map batch te ondertekenen. Als het klaar is, wordt het script automatisch afgesloten. Je kunt nu de .apk op je apparaat laden!
PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken