【问题标题】:how to execute the baksmali.jar in an android device如何在 android 设备中执行 baksmali.jar
【发布时间】:2017-08-01 18:12:33
【问题描述】:

为了在 Android 上开发反恶意软件,我需要一个 APK 的 smali 表示。

我正在尝试直接在设备上执行baksmali.jar。我问了工具的作者GitHub: Executing baksmali on an Android device

我按照帖子中的步骤进行操作 Stack overflow: How to execute the dex file in android with command?

  1. 我下载的是v2.2b4版本
  2. dx --dex --output=classes.dex baksmali.jar 我使用了来自 android/Sdk/build-tools/25.0.2dx 工具
  3. zip baksmali.zip classes.dex
  4. adb push baksmali.zip /sdcard/ 我正在使用 genymotion 模拟器 custom phone-4.4.4 API 19
  5. adb shell mkdir /sdcard/dalvik-cache
  6. 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$000(ClassLoader.java:65)
        at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81)
        at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
        ... 1 more

我不明白这个错误,类路径是正确的。

我该如何解决这个问题?

提前谢谢你。

【问题讨论】:

  • 我从bitbucket下载了v2.2b4 jar
  • 尝试直接使用 classes.dex,而不是压缩它。 adb shell ANDROID_DATA=/sdcard dalvikvm -cp /sdcard/classes.dex org.jf.baksmali.Main
  • jar 的 V2.1.3 正在运行,而不是 org.jf.baksmali.Main 它是 org.jf.baksmali.main

标签: android adb dex smali antimalware


【解决方案1】:

转了一圈,终于找到了以下问题的解决方法:

" 在安卓设备中执行baksmali.jar,理想情况下,该执行是由一个针对另一个应用程序的应用程序启动的。"

因此,假设我们不会开发能够“baksmali”(反汇编)另一个应用程序的应用程序,而无需任何特殊许可。

这些是完成工作的步骤:

  • 下载baksmali.jar v1.2.3
  • jar添加到android studio项目的app/libs目录中
  • 右键单击jar 并选择“将其添加为库”选项 (使用“Project->project”视图查看libs目录,在“Project->android”视图可能看不到)
  • 您可以通过使用String[]CLIarguments 传递给该方法来使用org.jf.baksmali.main.main 方法

这是一个说明用例的 helloWorld 应用程序:

GitHub: Baksmali Hello world

启动应用程序后,您应该会在/data/data/com.example.bartman.baksmalihelloworld/&lt;name_of_baksmali_output&gt; 中看到文件夹

【讨论】:

    猜你喜欢
    • 2011-06-03
    • 2015-07-29
    • 1970-01-01
    • 2011-01-15
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多