[Soot-list] Android App Manipulation with Soot

Dave Webb Dave.Webb at gmx.de
Sun May 29 09:39:09 EDT 2016


Hi,
I want to use Soot in order to modify Android Apps.
However, I do *not* want to use the Instrumentation API shown in [1], but instead I want to transform an APK to Jimple, then manually manipulate the Jimple code with my own tools and afterwards transform the modified Jimple code back into an APK.

In order to setup this toolchain, I'm currently doing the following:
1. Use soot to transform an APK file into Jimple files
2. Use soot to transform the Jimple files into a DEX file
3. Repack the new DEX file with the original resources/assets/...
4. Sign and zipalign the APK

Although none of these steps produces an error, the final APK is not executable and crashes instantly when launched (see [2]).

My questions are:
1. Is my goal as described above achievable with Soot at all?
2. If so, which of the previously described steps is most likely the culprit?

Any help is highly appreciated!

[1] https://github.com/Sable/soot/wiki/Instrumenting-Android-Apps-with-Soot
[2] adb logcat output:

05-29 15:12:51.841  4274  4274 E dex2oat : Failed to create oat file: /data/dalvik-cache/arm/data at app@com.example.webb.test4-1 at base.apk@classes.dex: Permission denied
05-29 15:12:51.841  4274  4274 I dex2oat : dex2oat took 854.492us (threads: 4) 
05-29 15:12:51.844  4255  4255 W art     : Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --compiler-filter=speed --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/com.example.webb.test4-1/base.apk --oat-file=/data/dalvik-cache/arm/data at app@com.example.webb.test4-1 at base.apk@classes.dex) because non-0 exit status
05-29 15:12:51.962  4255  4255 W art     : Failure to verify dex file '/data/app/com.example.webb.test4-1/base.apk': Invalid type descriptor: 'Ljava/lang/'annotation'/Annotation;'
05-29 15:12:51.963  4255  4255 W System  : ClassLoader referenced unknown path: /data/app/com.example.webb.test4-1/lib/arm
05-29 15:12:51.966  4255  4255 D AndroidRuntime: Shutting down VM
05-29 15:12:51.968  4255  4255 E AndroidRuntime: FATAL EXCEPTION: main
05-29 15:12:51.968  4255  4255 E AndroidRuntime: Process: com.example.webb.test4, PID: 4255
05-29 15:12:51.968  4255  4255 E AndroidRuntime: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.webb.test4/com.example.webb.test4.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.webb.test4.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.webb.test4-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.webb.test4-1/lib/arm, /vendor/lib, /system/lib]]
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2361)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.app.ActivityThread.-wrap11(ActivityThread.java)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:102)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:148)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:5466)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.webb.test4.MainActivity" on path: DexPathList[[zip file "/data/app/com.example.webb.test4-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.webb.test4-1/lib/arm, /vendor/lib, /system/lib]]
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	... 9 more
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	Suppressed: java.io.IOException: Failed to open dex files from /data/app/com.example.webb.test4-1/base.apk
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.DexFile.openDexFileNative(Native Method)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.DexFile.openDexFile(DexFile.java:295)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.DexFile.<init>(DexFile.java:80)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.DexFile.<init>(DexFile.java:59)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.DexPathList.loadDexFile(DexPathList.java:279)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.DexPathList.makePathElements(DexPathList.java:248)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.DexPathList.<init>(DexPathList.java:120)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:65)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:58)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at android.app.LoadedApk.getClassLoader(LoadedApk.java:376)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at android.app.LoadedApk.makeApplication(LoadedApk.java:569)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4729)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at android.app.ActivityThread.-wrap1(ActivityThread.java)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1424)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		... 6 more
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	Suppressed: java.lang.ClassNotFoundException: com.example.webb.test4.MainActivity
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at java.lang.Class.classForName(Native Method)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 		... 12 more
05-29 15:12:51.968  4255  4255 E AndroidRuntime: 	Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
05-29 15:12:51.970   721  3302 W ActivityManager:   Force finishing activity com.example.webb.test4/.MainActivity


More information about the Soot-list mailing list