Jsem student, který se zajímá o zabezpečení systému Android. Snažil jsem se upravit soubor APK pomocí baksmali a smali. Přebalenou aplikaci však nemohu spustit v mobilu. Když kliknu na ikonu s nápisem „Bohužel test byl zastaven“ a existuje. (I ikona aplikace se změnila, nyní se mi místo staré skutečné barevné ikony aplikace zobrazuje výchozí ikona systému Android.)
Co by mohlo být důvodem? Vlastně jsem ještě nezměnil kód souboru apk. Právě jsem rozbalil apk, abych získal soubor dex, pak jsem jej převedl na smali pomocí baksmali.jar
a pak zpět do dex pomocí smali.jar
. Nakonec zazipováno a podepsáno.
Co jsem udělal podrobně:
-
Dekomprimujte soubor apk
$ Unzip test.apk
-
Převést 1classes.dex1 na smali
$ baksmali -x classes.dex -o smaliClasses
-
Převede třídy zpět na
classes.dex
(nahradil staréclasses.dex
, ve skutečnosti jsem do souboru smali nepřidal žádný nový kód . Chtěl jsem vědět, zda to funguje jako první.)$ smali smaliClasses -o classes.dex
-
Zipujte všechny soubory do
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
Přejmenovat
test.zip
natest.apk
$ mv test.zip test.apk
Nyní se domnívám, že musím soubor APK znovu podepsat. Pokud se mýlím, opravte mě zde.
Upraveno
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
Pokusil jsem se nainstalovat nový přebalený soubor APK. Používání prostředí adb. Adb shell ukázal, že byl úspěšně nainstalován. Přebalenou aplikaci však nemohu spustit v mobilu. Aplikace klepne, když na ni kliknu. Říká „Bohužel test byl zastaven“.
Proč přebalená aplikace nefunguje? Nerozumím tomu, co mi zde chybí?
Upraveno :
Zkoušel jsem přebalit stejnou aplikaci pomocí apktool. Extrahoval jsem pomocí něj soubory smali a přebalil. Ale proč přebalování nefunguje s baksmali, smali, zip a signapk. Je v tomto postupu skutečný problém se zipem? Vidím, že velikost aplikace se drasticky sníží, když ji zazipuji a přejmenuji na .apk ve srovnání s původním souborem apk: |
Komentáře
Odpověď
Pro tento účel používám apktool
a krátký pár párů skriptů pro dekompilaci a překompilování APK:
-
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
Použití apktool
má tu výhodu, že je možné zobrazit a upravit také všechny zdroje jako dekódovaný soubor manifestu.
Komentáře
- Tato jediná metoda, která pro mě funguje. ‚ jsem vyzkoušel desítky, žádný nefungoval. Mnohokrát děkuji.
Odpovědět
Po hraní se smali / baksmali jsem začal fungovat. Myslím, že jste při zipování nepoužili rekurzivní příznak . To způsobilo, že složka res byla prázdná, což způsobilo selhání. Také jsem spustit zipalign po podepsání apk.
Kroky:
- Rozbalte
$ 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
- zisk 🙂
odpověď
Nemohu komentovat kvůli reputace, takže ji sem zveřejním.
Jelikož je práce s použitím apktoolu prováděna správně, zdá se mi, že se při procesu zip něco děje.
Poté přebalení aplikace, můžete ověřit, že obsah nového APK je totožný (pokud jde o názvy a strukturu souborů) s obsahem původního?
EDIT: také, protože soubor je soubor .dex, nemyslím si, že v baksmali potřebujete volbu -x.
EDIT2: Při přebalování nemusíte do souboru zip zahrnovat adresář META-INF. bude vytvořeno při podpisu t soubor.
Odpověď
Použití možnosti deodex „-x“ není nutné, protože neprovádíte baksmali na odex. Stačí spustit baksmali na soubor dex. Můžete také použít apktool k vybalení / zabalení všeho, což je podle mě snazší.
Odpověď
-
Proč se zmenšila velikost souboru?
Protože
apktool
jej optimalizoval při překompilování. -
Proč se zhroutil?
Možné důvody selhání:
-
Nelze provést všechny kroky ve správném pořadí.
-
Aplikace může mít CRC zkontroluje velikost souboru.
-
Nástroj Plně automatizovaný s grafickým uživatelským rozhraním .. Je aktualizován nedávným rámcem systému Android, takže nedochází k chybě dekompilace zdrojů a lepší zacházení.
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
A tento malý papír, který zahrnuje výukové programy pro reverzní aplikace pro Android a všechny základní informace týkající se úpravy / zpracování apk.
Odpověď
Pokud vás zajímají Anroid aplikace RE, najdete lepší nástroje, které budete pravidelně používat.
No, jedním z nástrojů je Android Cracker Kit (který jsem vyvinul), který vám poskytne vše, co potřebujete: Android Cracker Kit (ACK):
Komentáře
- Nefunkční odkaz. opravte to.
- tady to máte: forum.exetools.com/showthread.php?t=16538
- @raypixar: link was not broken, just slow.
Answer
K úpravám používám APK Editor Pro Soubory APK přímo z mého zařízení Android!
https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
Komentáře
- Skvělý tip. Vygenerovaný apk se nenainstaluje správně s výše uvedeným (de) kompilačním skriptem (proč?), Ale nahradil ho classes.dex.
Odpovědět
Krok 4. Zapomněli jste to udělat rekurzivně. Při zipování soubory nebude zkopírováno do / res. Přidejte volbu -r.
zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
Krok 6. Nemusíte to podepisovat znovu, protože jste to již znovu zabalili do adresáře META-INF do svého apk. Podepisovací údaje jsou uvnitř META-INF.
baksmali -x option
) záměrně? Zdá se, že vzhledem k tomu, že provádíte tuto možnost, aniž byste poskytli “ bootclasspath “ vy ‚ získáme nějaký podivný kód smali, který nemusí být schopen převést zpět na soubor dex. Stačí pouze odstranit složku META-INF před zipováním a pokusem ozip -r unsigned.apk *
v adresáři se vším obsahem. Pokud to stále selže, zkuste odeslat výstup logcat