如何在 android 设备中执行 baksmali.jar
how to execute the baksmali.jar in an android device
为了在 Android 上开发反恶意软件,我需要具有 APK 的 smali
表示。
我正在尝试直接在设备上执行 baksmali.jar
。问了工具的作者GitHub: Executing baksmali on an Android device。
我按照post的步骤操作
Stack overflow: How to execute the dex file in android with command?
- 我下载了v2.2b4版本
dx --dex --output=classes.dex baksmali.jar
我使用了 dx
来自 android/Sdk/build-tools/25.0.2
的工具
zip baksmali.zip classes.dex
adb push baksmali.zip /sdcard/
我正在使用 genymotion 模拟器 custom phone-4.4.4 API 19
adb shell mkdir /sdcard/dalvik-cache
adb shell ANDROID_DATA=/sdcard dalvikvm -cp /sdcard/baksmali.zip org.jf.baksmali.Main
之后,我收到此错误消息 Unable to locate class 'org/jf/baksmali/Main'
准确地说
Unable to locate class 'org/jf/baksmali/Main'
java.lang.NoClassDefFoundError: org/jf/baksmali/Main
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jf.baksmali.Main" on path: DexPathList[[zip file "/sdcard/baksmali.zip"],nativeLibraryDirectories=[/system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
... 1 more
Suppressed: java.io.IOException: unable to open DEX file
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:296)
at dalvik.system.DexFile.<init>(DexFile.java:80)
at dalvik.system.DexFile.<init>(DexFile.java:59)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:263)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:230)
at dalvik.system.DexPathList.<init>(DexPathList.java:112)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)
at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:38)
at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:116)
at java.lang.ClassLoader.access[=12=]0(ClassLoader.java:65)
at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81)
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
... 1 more
我不明白这个错误,类路径是正确的。
我该如何解决这个问题?
提前致谢。
转来转去,终于找到了以下问题的解决方案:
" 在 android 设备中执行 baksmali.jar
,理想情况下,执行由针对另一个应用程序的应用程序启动。"
所以,假设我们要开发一个能够 "baksmali"(反汇编)另一个应用程序的应用程序,而不需要任何特殊许可。
这些是完成工作的步骤:
- 下载
baksmali.jar v1.2.3
- 将
jar
添加到android工作室项目的app/libs
目录
- 右键单击
jar
和 select 选项 "Add it as a Library"
(使用"Project->project"视图可以看到libs
目录,在"Project->android"视图中可能看不到)
- 您可以通过使用
String[]
将 CLI
参数传递给该方法来使用 org.jf.baksmali.main.main
方法
这是一个 helloWorld 应用程序,说明了使用情况:
启动应用程序后,您应该会在 /data/data/com.example.bartman.baksmalihelloworld/<name_of_baksmali_output>
中看到文件夹
为了在 Android 上开发反恶意软件,我需要具有 APK 的 smali
表示。
我正在尝试直接在设备上执行 baksmali.jar
。问了工具的作者GitHub: Executing baksmali on an Android device。
我按照post的步骤操作 Stack overflow: How to execute the dex file in android with command?
- 我下载了v2.2b4版本
dx --dex --output=classes.dex baksmali.jar
我使用了dx
来自android/Sdk/build-tools/25.0.2
的工具
zip baksmali.zip classes.dex
adb push baksmali.zip /sdcard/
我正在使用 genymotion 模拟器custom phone-4.4.4 API 19
adb shell mkdir /sdcard/dalvik-cache
adb shell ANDROID_DATA=/sdcard dalvikvm -cp /sdcard/baksmali.zip org.jf.baksmali.Main
之后,我收到此错误消息 Unable to locate class 'org/jf/baksmali/Main'
准确地说
Unable to locate class 'org/jf/baksmali/Main'
java.lang.NoClassDefFoundError: org/jf/baksmali/Main
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jf.baksmali.Main" on path: DexPathList[[zip file "/sdcard/baksmali.zip"],nativeLibraryDirectories=[/system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
... 1 more
Suppressed: java.io.IOException: unable to open DEX file
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:296)
at dalvik.system.DexFile.<init>(DexFile.java:80)
at dalvik.system.DexFile.<init>(DexFile.java:59)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:263)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:230)
at dalvik.system.DexPathList.<init>(DexPathList.java:112)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:48)
at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:38)
at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:116)
at java.lang.ClassLoader.access[=12=]0(ClassLoader.java:65)
at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81)
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
... 1 more
我不明白这个错误,类路径是正确的。
我该如何解决这个问题?
提前致谢。
转来转去,终于找到了以下问题的解决方案:
" 在 android 设备中执行 baksmali.jar
,理想情况下,执行由针对另一个应用程序的应用程序启动。"
所以,假设我们要开发一个能够 "baksmali"(反汇编)另一个应用程序的应用程序,而不需要任何特殊许可。
这些是完成工作的步骤:
- 下载
baksmali.jar v1.2.3
- 将
jar
添加到android工作室项目的app/libs
目录 - 右键单击
jar
和 select 选项 "Add it as a Library" (使用"Project->project"视图可以看到libs
目录,在"Project->android"视图中可能看不到) - 您可以通过使用
String[]
将
CLI
参数传递给该方法来使用 org.jf.baksmali.main.main
方法
这是一个 helloWorld 应用程序,说明了使用情况:
启动应用程序后,您应该会在 /data/data/com.example.bartman.baksmalihelloworld/<name_of_baksmali_output>