Sunt un student interesat de Android Security. Încercam să modific un fișier APK folosind baksmali și smali. Cu toate acestea, nu pot rula aplicația reambalată pe mobil. Când dau clic pe pictogramă, scrie „Din păcate, testul s-a oprit” și există. (Chiar și pictograma aplicației s-a schimbat, acum văd pictograma Android implicită în loc de pictograma veche și colorată a aplicației)
Care ar putea fi motivul? De fapt, nu am modificat nici măcar codul fișierului apk. Tocmai am dezarhivat apk-ul pentru a obține fișierul dex, apoi l-am convertit în smali folosind baksmali.jar
și apoi înapoi la dex folosind smali.jar
. În cele din urmă fermoar și semnat.
Ce am făcut în detaliu:
-
Decomprimați fișierul apk
$ Unzip test.apk
-
Convertiți 1classes.dex1 în smali
$ baksmali -x classes.dex -o smaliClasses
-
A convertit clasele înapoi în
classes.dex
(înlocuitclasses.dex
vechi, de fapt nu am adăugat niciun cod nou în fișierul smali . Am vrut să știu dacă acest lucru funcționează mai întâi).$ smali smaliClasses -o classes.dex
-
Zip toate fișierele la
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
Redenumiți
test.zip
latest.apk
$ mv test.zip test.apk
Acum cred că trebuie să semnez din nou APK-ul, vă rog să mă corectați dacă greșesc aici.
Editat
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
Am încercat să instalez noul APK reambalat. Folosind adb shell. Adb shell a arătat că a fost instalat cu succes. Cu toate acestea, nu pot rula aplicația reambalată pe mobil. Aplicația se blochează când fac clic pe ea. Se spune „Din păcate, testul s-a oprit”.
De ce nu rulează aplicația reambalată? Nu înțeleg ce îmi lipsește aici?
Editat :
Am încercat să reambalez aceeași aplicație folosind apktool. Am extras fișierele smali folosindu-le și am reambalat. Dar de ce reambalarea nu funcționează cu baksmali, smali, zip și signapk. Este fermitatea problemei reale în această procedură? Văd că dimensiunea aplicației este redusă drastic când o zipez și o redenumesc în .apk comparativ cu fișierul apk original: |
Comentarii
Răspuns
Folosesc apktool
în acest scop și o mică pereche scurtă de scripturi shell pentru decompilarea și recompilarea APK-urilor:
-
decompile-apk
#!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done."
-
compile-apk
#!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build
Utilizarea apktool
are avantajul de a putea vizualiza și edita și toate resursele ca fișier manifest decodat.
Comentarii
- Aceasta este singura metodă care funcționează pentru mine. Am ‘ am încercat zeci, niciunul nu a funcționat. Mulțumesc mult.
Răspuns
După ce m-am jucat cu smali / baksmali, am reușit. Cred că nu ați folosit „div divizorul recursiv când ați închis . Acest lucru a făcut ca folderul res să fie gol, ceea ce a provocat blocarea. De asemenea, rulez zipalign după semnarea apk-ului.
Pași:
- Unzip
$ unzip test.apk
- Baksmali
$ baksmali classes.dex -o smaliClasses
- Smali
$ smali smaliClasses -o classes.dex
- Zip -r
$ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
- Jarsign
$ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
- Zipalign
$ zipalign -v 4 test-patched.apk final-apk.apk
- Profit 🙂
Răspunde
Nu pot să comentez din cauza reputație, așa că o voi posta aici.
Întrucât treaba se face corect cu utilizarea apktoolului, mi se pare că ceva nu merge bine cu procesul zip.
După reambalând aplicația, puteți verifica dacă conținutul noului APK este identic (în ceea ce privește numele și structura fișierelor) cu conținutul celei originale?
EDIT: de asemenea, deoarece fișierul este un fișier .dex, nu cred că aveți nevoie de opțiunea -x în baksmali.
EDIT2: La reambalare, nu trebuie să includeți directorul META-INF în fișierul zip. va fi creat la semnarea t fișierul.
Răspuns
Utilizarea opțiunii deodex „-x” nu este necesară deoarece nu efectuați baksmali pe un odex. Pur și simplu rulați baksmali pe fișierul dex. De asemenea, puteți utiliza apktool pentru a despacheta / împacheta totul, ceea ce cred că este mai ușor.
Răspuns
-
De ce s-a redus dimensiunea fișierului?
Deoarece
apktool
l-a optimizat în timp ce a fost recompilat. -
De ce s-a blocat?
Motive posibile pentru blocare:
-
Nu puteți efectua toți pașii în ordinea corectă.
-
Aplicația poate avea o Verificare CRC pentru dimensiunea fișierului.
-
Instrument Complet automatizat cu GUI .. Este actualizat cu un cadru Android recent, astfel încât nu există erori de decompilare a resurselor și o mai bună manipulare.
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
Și această mică hârtie care include opțiuni de inversare a aplicațiilor Android și toate informațiile de bază referitoare la modificarea / gestionarea apk.
Răspuns
Dacă sunteți interesat de aplicațiile Anroid RE, veți găsi instrumente mai bune de utilizat în mod regulat.
Ei bine, unul dintre instrumente este Android Cracker Kit (pe care l-am dezvoltat), vă oferă tot ce aveți nevoie: Android Cracker Kit (ACK):
Comentarii
- Link rupt. vă rugăm să remediați problema.
- iată: forum.exetools.com/showthread.php?t=16538
- @raypixar: linkul nu a fost rupt, doar lent.
Răspuns
Folosesc APK Editor Pro pentru a edita APK-uri direct de pe dispozitivul meu Android!
https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
Comentarii
- Sfat extraordinar. APK-ul generat nu se instalează corect cu scriptul de (de) compilare de mai sus (de ce?), Dar înlocuirea classes.dex a făcut-o.
Răspuns
Pasul 4. Ați uitat să o faceți recursiv. Nu va fi copiat fișierele în / res când îl arhivați. Opțiunea Adăugați -r.
zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
Pasul 6. Nu este necesar să îl semnați din nou, deoarece l-ați reambalat din nou cu directorul META-INF în apk-ul dvs. Informațiile de semnare se află în META-INF.
baksmali -x option
) intenționat? Sunteți, se pare că, din moment ce efectuați această opțiune, fără a furniza un ” bootclasspath ” ‘ veți obține un cod smali ciudat care s-ar putea să nu poată fi reconvertit într-un fișier dex. De asemenea, trebuie doar să eliminați folderul META-INF înainte de a închide și a încerca să facețizip -r unsigned.apk *
în directorul cu tot conținutul. Dacă acest lucru se blochează, încercați să postați ieșirea logcat