Az Android Security iránt érdeklődő hallgató vagyok. Egy APK fájlt próbáltam módosítani baksmali és smali használatával. Az újracsomagolt alkalmazást azonban nem tudom futtatni a mobilomon. Amikor rákattintok az ikonra, azt mondja: “Sajnos a teszt leállt”, és létezik. (Még az alkalmazás ikonja is megváltozott, most az alapértelmezett android ikont látom az alkalmazás régi valódi színes ikonja helyett)
Mi lehet ennek az oka? Valójában nem is módosítottam az apk fájl kódját. Csak kibontottam az apk-t, hogy megszerezzem a dex fájlt, majd a baksmali.jar
paranccsal smalivá alakítottam, majd vissza a de id = “99c50bf882”>
. Végül tömörítve és aláírva.
Amit részletesen elvégeztem:
-
Az APK fájl kibontása
$ Unzip test.apk
-
Az 1classes.dex1 konvertálása smálissá
$ baksmali -x classes.dex -o smaliClasses
-
Az osztályokat visszaállította
classes.dex
-re (lecserélte a régiclasses.dex
-et, valójában nem adtam hozzá új kódot a smali fájlhoz . Azt akartam tudni, hogy ez működik-e először).$ smali smaliClasses -o classes.dex
-
Az összes fájlt tömörítse a következőhöz:
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
A
test.zip
átnevezésetest.apk
$ mv test.zip test.apk
Most úgy gondolom, hogy újra alá kell írnom az APK-t, kérlek, javíts ki, ha tévedek itt.
Szerkesztve
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
Megpróbáltam telepíteni az újracsomagolt APK-t. Adb shell használatával. Az Adb shell sikeres telepítését mutatta. Az újracsomagolt alkalmazást azonban nem tudom futtatni mobilon. Az alkalmazás összeomlik, amikor rákattintok. Azt írja: “Sajnos a teszt leállt.”
Miért nem fut az újracsomagolt alkalmazás? Nem értem, mit hiányolok itt?
Szerkesztve :
Ugyanazt az alkalmazást próbáltam újracsomagolni az apktool segítségével. Kibontottam a smali fájlokat ezzel és újracsomagoltam. De miért nem működik az újracsomagolás a baksmalival, a szmálival, a zipszel és a signapkkal. A cipzár az igazi probléma ebben az eljárásban? Úgy látom, hogy az alkalmazás mérete drasztikusan csökken, amikor becsomagolom és átnevezem .apk-ra az eredeti apk fájlhoz képest: |
Megjegyzések
Válasz
Erre a célra apktool
-t használok, és egy rövid kis shell parancsfájlt az APK-k dekompilálásához és újrafordításához:
-
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
A apktool
használatának megvan az az előnye, hogy az összes erőforrást is megtekintheti és szerkesztheti dekódolt jegyzékfájlként.
Megjegyzések
- Ez az egyetlen módszer, ami nekem működik. Tucatokat próbáltam ‘, egyik sem működött. Nagyon köszönöm.
Válasz
A smali / baksmalival való játék után működőképes lettem. Azt hiszem, hogy nem használta a rekurzív zászlót, amikor a csomagolást végezte. Ennek eredményeként a res mappa üres volt, ami összeomlást okozott. Futtatom a zipalign-t is, miután aláírtam az apk-t.
Lépések:
- Csomagolja ki
$ 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 🙂
Válasz
Nem tudok hozzászólni hírnevét, ezért ide teszem fel.
Mivel a munkát az apktool használatával helyesen végezték el, úgy tűnik számomra, hogy valami nem stimmel a zip folyamatban.
Utána az alkalmazás újracsomagolása, ellenőrizheti, hogy az új APK tartalma megegyezik-e (ami a fájlneveket és a szerkezetet illeti) az eredeti tartalmával?
SZERKESZTÉS: szintén, mivel a fájl .dex fájl, nem hiszem, hogy a -x opcióra van szükséged baksmaliban.
EDIT2: Újracsomagoláskor nem kell feltüntetni a META-INF könyvtárat a zip fájlban. t aláírásakor jön létre fájl.
Válasz
A “-x” deodex opció használata nem szükséges, mivel “nem végez baksmalit egy odex. Csak futtassa a baksmali-t a dex fájlon. Az apktool segítségével mindent kicsomagolhat és becsomagolhat, ami szerintem könnyebb.
Válasz
-
Miért csökkentették a fájlméretet?
Mivel
apktool
optimalizálta újrafordítás közben. -
Miért összeomlott?
Az összeomlás lehetséges okai:
-
Az összes lépést nem tudja megfelelő sorrendben végrehajtani.
-
Az alkalmazásnak lehet egy A CRC ellenőrzi a fájlméretet.
-
Az eszköz teljesen automatizált a GUI-val .. Frissítve van a legújabb android keretrendszerrel, így nincs erőforrás dekompilálási hiba és jobb kezelhetőség.
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
És ez a kis papír, amely magában foglalja az androidos alkalmazások visszaváltásával kapcsolatos tudnivalókat, valamint az apk módosításával és kezelésével kapcsolatos összes alapvető információt. a>
Válasz
Ha érdekli az Anroid apps RE, akkor jobb eszközöket kell találnia a rendszeres használatra.
Nos, az egyik eszköz az Android Cracker Kit (amelyet én fejlesztettem ki), minden szükséges segítséget megad: Android Cracker Kit (ACK):
Megjegyzések
- Megszakadt hivatkozás. kérlek, javítsd ki.
- tessék: forum.exetools.com/showthread.php?t=16538
- @raypixar: a link nem volt megszakítva, csak lassan.
Válasz
Az APK Editor Pro-t használom a szerkesztéshez APK-k közvetlenül az Android-eszközömről!
https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
Megjegyzések
- Remek tipp. A generált apk nem települ megfelelően a fenti (de) fordító szkript (miért?), De a class.dex helyettesítése tette.
Válasz
4. lépés. Elfelejtette ezt rekurzívan megtenni. Nem másolja a fájlokat a / res fájlba, amikor becsomagolja. Add hozzá az -r opciót.
zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
6. lépés. Nem kell aláírnia ismét, mivel már újból bepakolta a META-INF könyvtárba az apk-be. Az aláírási információk a META-INF belsejében találhatók.
baksmali -x option
)? Ön úgy tűnik, hogy mivel ezt az opciót hajtja végre, a ” bootclasspath ” megadása nélkül ‘ megkap egy pár furcsa smali kódot, amelyet nem lehet visszaállítani dex fájlba. Ezenkívül egyszerűen távolítsa el a META-INF mappát, mielőtt tömörítené, és megpróbálná az összes tartalommal együtt a könyvtárban azip -r unsigned.apk *
t végrehajtani. Ha ez még mindig összeomlik, próbálja meg feltölteni a logcat kimenetet.