2017-03-11 17 views
0

Android에서 맬웨어 방지 프로그램을 개발하려면 smali APK 표현이 필요합니다.안드로이드 장치에서 baksmali.jar을 실행하는 방법

기기에서 직접 baksmali.jar을 실행하려고합니다. 도구 GitHub: Executing baksmali on an Android device의 작성자에게 질문했습니다.

나는 내가 사용하고
  • dx --dex --output=classes.dex baksmali.jar
  • 내가 android/Sdk/build-tools/25.0.2
  • zip baksmali.zip classes.dex
  • adb push baksmali.zip /sdcard/에서 dx 도구를 사용 v2.2b4 버전을 다운로드 Stack overflow: How to execute the dex file in android with command?

    1. 포스트에 따라 단계를 따라 인공 지능 에뮬레이터 custom phone-4.4.4 API 19
    2. adb shell mkdir /sdcard/dalvik-cache
    3. 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 
    

    내가이 오류를 이해하지 못하는이 오류 메시지가지고있어, 클라쎄 경로가 정확한지 확인하십시오.

    어떻게 해결할 수 있습니까?

    미리 감사드립니다.

  • +0

    [bitbucket] (https://bitbucket.org/JesusFreke/smali/downloads/)에서'v2.2b4 jar'을 다운로드했습니다. – MassyB

    +0

    을 사용해보십시오. classes.dex를 압축하는 대신 직접적으로 사용합니다. 'adb ​​쉘 ANDROID_DATA =/sdcard dalvikvm -cp /sdcard/classes.dex org.jf.baksmali.Main' – JesusFreke

    +0

    항아리의 V2.1.3은'org.jf.baksmali.Main' 대신 작동합니다. org입니다. jf.baksmali.main' – MassyB

    답변

    0

    주변에 이동 한 후, 나는 마침내 다음과 같은 문제에 대한 해결책을 발견 : ". 이상적으로 실행은 다른 응용 프로그램을 대상으로하는 응용 프로그램에 의해 시작되어, 안드로이드 장치에 baksmali.jar을 실행"

    따라서 특별한 허가없이 다른 응용 프로그램을 "baksmali"(분해) 할 수있는 응용 프로그램을 개발하지 않을 것이라고 가정 해보십시오.

    • 이 다운로드 baksmali.jar v1.2.3
    • 바로 jar 클릭 안드로이드 스튜디오 프로젝트의 app/libs 디렉토리에 jar을 추가하고 옵션을 선택

      는 작업을 완수하는 단계입니다 "라이브러리로 추가" ("프로젝트 -> 프로젝트"보기를 사용하여 libs 디렉토리를 볼 수 있지만 "프로젝트 - android"보기에는 표시되지 않음)
    • 당신은 인 helloWorld 앱 사용 CAS 도시되고 여기 String[]

    를 사용하는 방법에 CLI 인수를 전달하여 org.jf.baksmali.main.main 메도를 사용할 수있다 : 사용자가 볼 수 애플리케이션 launchig 후

    GitHub: Baksmali Hello world

    /data/data/com.example.bartman.baksmalihelloworld/<name_of_baksmali_output>