精华内容
下载资源
问答
  • dex

    2012-03-05 11:50:15
    在Android中动态载入自定义类 普通的Android程序Dalvik虚拟机都是从一个默认的地方载入程序需要的类文件...dex文件只能包含最多64K的函数引用,对于大型的程序如果超过了该数字,就可以通过把程序打包为多个dex文件来
    
    

    在Android中动态载入自定义类

    普通的Android程序Dalvik虚拟机都是从一个默认的地方载入程序需要的类文件(dex文件),而Dalvik虚拟机还提供了从其他地方载入类的能力(比如从设备的内部存储空间以及互联网).

    这种自定义类加载机制可以使用于一些场景:

    • dex文件只能包含最多64K的函数引用,对于大型的程序如果超过了该数字,就可以通过把程序打包为多个dex文件来实现,在程序运行的时候在加载这些需要的类
    • 一些开发框架可以通过运行时自定义类加载机制来设计出更加可扩展的框架
    • 通过该方式实现更加强壮的程序注册机制,防止被人破解

    Android有个示例项目演示了如何使用, 项目地址

    http://code.google.com/p/android-custom-class-loading-sample/

    要使用该示例,不能使用Eclipse插件ADT来打包必需通过该项目提供的Ant脚本, 另外该Ant脚本需要Android SDK 12版本, 可以通过Android SDK Manager来下载或者到如下地址下载,然后解压到对应的目录中

    https://dl-ssl.google.com/android/repository/tools_r12-windows.zip

    https://dl-ssl.google.com/android/repository/platform-tools_r06-windows.zip

    在示例中有3个类文件:

    • com.example.dex.MainActivity: UI界面,在这个类中动态载入需要的类
    • com.example.dex.LibraryInterface: 动态载入类的接口定义
    • com.example.dex.lib.LibraryProvider: 动态载入类的实现,该类在打包的时候会打包到另外一个dex文件中

    在打包的时候需要修改项目目录下的local.properties文件,把sdk.dir的值修改为对应的android SDK目录.例如:sdk.dir=E:\\google\\android-sdk-windows

    另外不要忘记在default.properties中指定需要的android平台: 例如 target=android-9

    然后就可以执行android install来build并且安装到模拟器或者手机上了.

    载入自定义类的过程

    1. 获取需要载入的自定义类的dex文件,可以是设备本地的文件或者互联网上的文件
    2. 把获取到的自定义类dex文件保存到程序的内部储存空间中:new File(getDir(“dex”, Context.MODE_PRIVATE),SECONDARY_DEX_NAME);
    3. 通过DexClassLoader类加载器来解析优化前面的dex文件
    4. 通过DexClassLoader的loadClass函数来载入类
    5. 通过获得到的类的newInstance函数来生成需要的对象
    6. 开始使用获取到的动态类对象~\(≧▽≦)/~啦啦啦

    Android提供的示例项目中,通过Ant打包后把com.example.dex.lib.LibraryProvider类放入了程序的assets文件夹中,然后从这里读取需要动态载入的类. 为了演示从互联网载入类和使用Eclipse ADT插件来build该示例,我们对该项目做了简单修改,修改后的示例项目地址:

    http://code.google.com/p/goodev-demo 中 的android-custom-class-loading-goodev-demo

    在该示例中删除了com.example.dex.lib.LibraryProvider类,我们把该类打包为dex文件并且放入到了互联网上下载地址: http://goodev.sinaapp.com/and/secondary_dex.jar

    在程序运行的时候先从该地址下载需要的类文件,然后解析.

    详细情况请参考项目中的代码注释

    修改后的项目可以通过Eclipse ADT来build.

    展开全文
  • 安卓反编译apk,重打包apk,签名apk,jar转dexdex转jar,xml转txt,dex转tex,重打包dex,提取dex等等操作工具
  • 一、DEX 加密简介、 二、APK 文件分析、 三、DEX 分割、





    一、DEX 加密简介



    Proguard 混淆弊端 : 之前使用 Proguard 混淆 后的代码 , 虽然降低了代码的可读性 , 但是如果多花点时间和精力 , 还是可以读懂的 , 因此这里继续进行下一个操作 , DEX 加密 , 经过加密后的 DEX 文件 , 就 无法被反编译工具反编译出来了 ;

    DEX 加密 : 经过加密后的 DEX 文件 , 就是被破坏了原有格式的 DEX 文件 , 该 DEX 文件不是标准的 DEX 文件 ;


    Android 启动从 Application 开始 , 然后会查找主 Activity 界面 启动 ;


    DEX 加密的情况下 Android 的工程结构 :

    • 应用主工程 , 该工程中有一个开发者开发的 Application , MyApplication ;

    • 依赖的库 Library , 在该工程中有一个代理 Application , ProxyApplication ;

    主工程中 , 不需要进入加密解密先关的库 , 应用主工程的开发流程不变 ,





    二、APK 文件分析



    Android 安装文件 APK 分析 : APK 文件本质是一个 ZIP 包 , 包含如下内容 ;

    • AndroidManifest.xml : 应用/组件配置文件 ;
    • resource.arsc
    • classes.dex : 封装 Java / Kotlin 代码 ;

    在这里插入图片描述





    三、DEX 分割



    classes.dex 可以进行分割 :

    • 不分割的情况 : 一般情况下 所有代码都在一个 DEX 下 ;

    • 分割的情况 : 该 DEX 可以分割成两部分 , 其中 一个只包含启动 Application , 另一个 DEX 包含其他代码 ;


    DEX 加密解密 :

    • 分割后加密 : 分割后的 DEX , 只包含启动 Application 保持不变 , 另一个 DEX 可以拿去加密 ;

    • 启动时解密 : 启动时 , 主 DEX 执行 Application 时 , 会解密另外一个被加密的 DEX , 并加载到 ClassLoader 中 ;


    DEX 分割的必要性 : 如果在 主 DEX 中的 Application 中 , 引用了很多类 , 此时就必须将引用的类放在主 DEX 中 , 这样就使得加密的类变少了 ;

    上述问题解决方案 : 编写一个额外的代理 Application , 该 Application 专门用于解密 DEX , 将该代理 Application 制作成主 DEX , 其它的所有代码都放在另外一个 DEX 中 , 进行加密 ;

    DEX 加密的优势 : 这样就可以将所有的功能性代码放在加密后的 DEX 中 , 只有代理 Application 暴露在外面 , 反编译该应用 , 只能看到用于解密的 代理 Application 类 , 其它的代码都在加密的 DEX 中 ;

    展开全文
  • 一、不同版本的 DEX 加载、 1、Android 8.0 版本 DEX 加载分析、 2、Android 6.0 版本 DEX 加载分析、 3、Android 5.0 版本 DEX 加载分析





    一、不同版本的 DEX 加载



    不同 Android 版本 DexPathList 中的 Element[] dexElements 成员如何创建 ;



    1、Android 8.0 版本 DEX 加载分析


    Android 8.08.0 版本 DEX 加载分析 :

    在 DexPathList 中 , Element[] dexElements 成员创建是调用 makePathElements 方法 生成上述 DEX 数组 ; makeDexElements 方法有 44 个参数 ;

    8.08.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )

    /*package*/ final class DexPathList {
        /**
         * dex/resource (class path) 元素集合.
         * 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
         */
        private final Element[] dexElements;
        public DexPathList(ClassLoader definingContext, String dexPath,
                String libraryPath, File optimizedDirectory) {
            // save dexPath for BaseDexClassLoader
            this.dexElements = makeDexElements(splitDexPath(dexPath), optimizedDirectory,
                                               suppressedExceptions, definingContext);
    	}
    }
    

    参考源码地址 : 8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java



    2、Android 6.0 版本 DEX 加载分析


    Android 6.06.0 版本 DEX 加载分析 :

    在 DexPathList 中 , Element[] dexElements 成员创建是调用 makePathElements 方法 生成上述 DEX 数组 ;

    6.06.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )

    /*package*/ final class DexPathList {
        /**
         * dex/resource (class path) 元素集合.
         * 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
         */
        private final Element[] dexElements;
        public DexPathList(ClassLoader definingContext, String dexPath,
                String libraryPath, File optimizedDirectory) {
            // save dexPath for BaseDexClassLoader
            this.dexElements = makePathElements(splitDexPath(dexPath), optimizedDirectory,
                                                suppressedExceptions);
    	}
    }
    

    参考源码地址 : 6.0.1_r16/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java



    3、Android 5.0 版本 DEX 加载分析


    Android 5.05.0 版本 DEX 加载分析 :

    在 DexPathList 中 , Element[] dexElements 成员创建是调用 makeDexElements 方法 生成上述 DEX 数组 ; makeDexElements 方法有 33 个参数 ;

    5.05.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )

    /*package*/ final class DexPathList {
        /**
         * dex/resource (class path) 元素集合.
         * 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
         */
        private final Element[] dexElements;
        public DexPathList(ClassLoader definingContext, String dexPath,
                String libraryPath, File optimizedDirectory) {
            this.dexElements = makeDexElements(splitDexPath(dexPath), optimizedDirectory,
                                               suppressedExceptions);
    	}
    }
    

    参考源代码 : 5.1.0_r3/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java



    分析上面 33 个版本的 DEX 加载源码 , 发现每个版本加载方法不同 , 这样在开发多 DEX 加载时 , 就需要做相应的兼容 ;

    展开全文
  • dex2jar-2.0和dex2jar-2.1

    2018-04-02 11:09:12
    dex2jar用来反编译android的classes.dex 文件实现源码文件获取,版本为dex2jar-2.0和dex2jar-2.1两个版本
  • classes.dex.dex2jar

    热门讨论 2012-03-28 02:11:51
    classes.dex.dex2jar
  • disassemble dex to smali files and assemble dex from smali files. different implementation to smali/baksmali, same syntax, but we support escape in type desc "Lcom/dex2jar\t\u1234;" other tools: d2j-...
  • dex文件格式

    千次下载 热门讨论 2015-09-13 11:33:07
    对Android中的Dex文件格式进行详细分析,通过一个简单的例子可以更好的分析Dex的格式。
  • dex转jar工具,2.1最新版,现在0.9.15甚至2.0版都不能反编译某些dex了,最新2.1版可以将多个dex文件转换成jar,亲测可用!
  • dex2jar(dex转为jar工具)

    2016-01-11 14:05:21
    dex2jar: dex转为jar工具 转成smali并且回编译
  • 把classes.dex文件,放入dex2jar文件夹,然后打开终端,输入命令进行去壳操作: cd dex2jar文件夹 sh dex2jar.sh classes.dex
  • $ helm upgrade --install --namespace dex-server-ns --values dex-server.yaml dex-server-helm charts/dex Release "dex-server-helm" does not exist. Installing it now. NAME: dex-server-helm LAST ...
  • [2012-04-12 22:13:14 - Dex Loader] Unable to execute dex: com.android.dx.dex.file.DexFile [2012-04-12 22:13:14 - MyTab] Conversion to Dalvik format failed: Unable to execute dex: com.android.dx....

    [2012-04-12 22:13:14 - Dex Loader] Unable to execute dex: com.android.dx.dex.file.DexFile

    [2012-04-12 22:13:14 - MyTab] Conversion to Dalvik format failed: Unable to execute dex: com.android.dx.dex.file.DexFile

    [2012-04-12 22:13:34 - Dex Loader] Unable to execute dex: com/android/dx/dex/file/DexFile

    [2012-04-12 22:13:34 - MyTab] Conversion to Dalvik format failed: Unable to execute dex: com/android/dx/dex/file/DexFile

    [2012-04-12 23:03:12 - Dex Loader] Unable to execute dex: com/android/dx/dex/file/DexFile

    [2012-04-12 23:03:12 - MyTab] Conversion to Dalvik format failed: Unable to execute dex: com/android/dx/dex/file/DexFile

    之前是因为dx.jar缺失,我从别的地方拷过来后,编译工程就报错了,后来发现 重启下eclipse就好了

    转载于:https://www.cnblogs.com/Microkaiser/archive/2012/04/13/2445063.html

    展开全文
  • 软件介绍: 最新版本的smali转dex工具以及dex转smali .jar工具包,版本号V2.2.5baksmali-2.2.5.jar smali-2.2.5.jar是APK Android反编译工具,具体使用方法可参照网上相关教程进行。
  • Unable to execute dex: Multiple dex files

    万次阅读 2016-10-20 11:02:00
    Eclipse 编译的时候报错: Unable to execute dex: Multiple dex files define Lcn/vn/glass/R$attr; Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcn/vnc/glass/R$...
  • 最近在做sdk接入的时候,添加依赖库,发现出现下面这个错误:详细的异常信息:[2018-06-21 10:58:44 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/app/yjy/game/OneNineGame$1;[2018-06-21...
  • dex转jar工具

    2018-05-16 14:55:12
    可将.dex转化成jar文件。将classes.dex文件复制到该工具解压后d2j-dex2jar.bat文件所在目录下。打开命令提示符定位到该目录下,键入命令“d2j-dex2jar.bat classes.dex”得到classes-dex2jar.jar文件。该源码文件...
  • dex2jar.zip

    2020-04-23 11:35:22
    使用方法: ...第三,运行命令d2j-dex2jar.bat classes.dex,获得classes-dex2jar.jar文件 第四,下载jd-gui;将下载jd-gui文件加载到jd.gui中,查看源码,源码中的类名,方法名,变量名是否已经改变
  • dex反编译工具

    2017-10-25 10:31:22
    反编译android dex文件得到jar,查看源代码,下载后在dex2jar-0.0.9.9目录把dex文件拖到dex2jar.bat脚本即可得到jar文件,然后使用jd-gui.exe即可查看源代码
  • dex2jar-2.0

    2019-03-21 15:50:11
    Android开发过程中,有很多时候需要将dex文件转为jar文件,方便查看代码,dex2jar-2.0 就是一款方便将dex转为jar的工具。 操作步骤:将dex文件(如classes.dex)放到解压后 dex2jar-2.0 目录下,打开终端,切换到dex...
  • https://blog.csdn.net/micotale/article/details/90202814对应博客,从根源上主dex撑爆问题。
  • No original dex files found for dex location

    千次阅读 2019-06-21 10:41:43
    在使用DexClassLoader加载一个jar包是,出现No original dex files found for dex location错误。在网上搜索并没有找到好的解决办法,后来猜测生成的jar包中的类需要变成dex格式,然后使用build-tools中的dx命令,...
  • dexjar用法

    2020-07-01 01:42:04
    dex文件转换成jar文件: 直接将dex文件拖进d2j-dex2jar.bat 或者 用cmd进行转换 将jar文件转换成dex文件: 直接将jar文件拖进d2j-jar2dex.bat 或者 用cmd进行转换
  • dex文件结构

    2016-12-10 23:05:58
    上文分析了class文件的结构,这里我们分析dex的文件结构通过如下命令把上文的.class文件生成dex文件 dx --dex --output Test33.dex .\Test2.class首先我们来看下dex文件整体的一个结构DEX文件的基本结构如下图...
  • fart主动调用脱壳之后,有些重要的dex会被加固厂商抹头,修复方法很简单. 需准备 010Editor Jadx 抹头dex导入之后是没有方法体的 导入010Editor之后是这样的 实际前面6位都是00 这很简单 随便导入一个正常的dex 把...
  • dex2jar最新版

    2018-07-29 11:18:59
    dex2jar最新版,将apk解压后拿到.dex文件 放到dex2jar跟目录后打开cmd,定位到dex2jar目录后在此时的命令窗口中输入:d2j-dex2jar classes.dex 然后回车(注意:d2j-dex2jar和classes.dex之间在输入的时候有空格),...
  • Android dex反编译工具

    2018-12-28 17:45:23
    dex2jar 是一个能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合,包含以下几个功能 dex-reader/writer: 用于读写 Dalvik Executable (.dex) 文件格式. 包含一个简单的API(与ASM相似) d2j-dex2jar...
  • 解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录 运行 dex2jar.bat classes.dex 生成 classes.dex.dex2jar.jar 打开jd-gui.exe打开classes.dex.dex2jar.jar
  • 问题:[ Dex Loader] Unable to execute dex: Multiple dex files define Landroid/support/v13/app/FragmentCompat$FragmentCompatImpl; Conversion to Dalvik format failed: Unable to execute dex: Multiple ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,827
精华内容 7,130
关键字:

dex