首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏韩曙亮的移动开发专栏

    【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )

    文章目录 一、DEX 加密简介 二、APK 文件分析 三、DEX 分割 一、DEX 加密简介 ---- Proguard 混淆弊端 : 之前使用 Proguard 混淆 后的代码 , 虽然降低了代码的可读性 , 但是如果多花点时间和精力 , 还是可以读懂的 , 因此这里继续进行下一个操作 , DEX 加密 , 经过加密后的 DEX 文件 , 就 无法被反编译工具反编译出来了 ; DEX 加密 : 经过加密后的 DEX 文件 , 就是被破坏了原有格式的 DEX 文件 , 该 DEX 文件不是标准的 DEX 文件 ; Android 启动从 Application 开始 , 然后会查找主 Activity 界面 : 封装 Java / Kotlin 代码 ; 三、DEX 分割 ---- classes.dex 可以进行分割 : 不分割的情况 : 一般情况下 所有代码都在一个 DEX 下 ; 分割的情况 : 该 DEX 可以分割成两部分 , 其中 一个只包含启动 Application , 另一个 DEX 包含其他代码 ; DEX 加密解密 : 分割后加密 : 分割后的 DEX , 只包含启动

    1.9K00编辑于 2023-03-28
  • 来自专栏全栈程序员必看

    dex文件详解

    1、基本概念 能被DVM虚拟机识别,加载并执行的文件格式 2、生成dex文件 1、通过IDE自动帮我们build 生成 2、手动通过dx命令去生成dex文件 3、在手机上手动运行dex文件 3、 使用dx命令来生成dex文件 首先得要先配置dx环境变量,这个环境变量怎么配呢? 文件,首先得通过adb命令来登陆到手机中,进入手机的控制台,最后通过dalvikvm来执行dex文件 ! 源文件都放在一个dex中(不考虑android multidex) ! 文件和class文件的异同 1、本质上他们都是一样的,dex是通过class文件演变而来 2、class文件存在许多冗余的信息,dex去冗余,并整合 发布者:全栈程序员栈长,转载请注明出处:https:

    1.1K20编辑于 2022-09-14
  • 来自专栏全栈程序员必看

    打开DEX文件

    下载dex2jar软件 解压下载的文件 将 APK解压出来的文件夹下的 classes.dex 文件复制到 解压下的dex2jar文件下. 在dex2jar文件夹目录处输入cmd 复制“d2j-dex2jar.bat classes.dex” 右键粘贴 会生成一个.jar文件 下载jd-gui软件 解压后打开软件 拖入.jar文件 手机端下载MT管理器app 左上角三条杠——-安装包提取——-定位 然后点击安装包——查看—–classes.dex———dex++编辑器打开 http://q2.qlogo.cn/headimg_dl

    8.1K20编辑于 2022-09-14
  • 来自专栏全栈程序员必看

    android加载dex方法,android Dex文件的加载

    上篇文章讲到了apk的分包,通过multidex构建出包含多个dex文件的apk,从而解决65536的方法数限制问题《Android Dex分包》。 在dalvik虚拟机上,应用启动时只会加载主dex文件,而从dex需要我们手动去加载,那么问题来了,如何手动加载一个dex文件? file.getName(); if (name.endsWith(DEX_SUFFIX)) { // Raw dex file (not inside a zip/jar). try { dex [elements.size()]); } files为dex文件的file对象list,判断是dex文件之后调用loadDexFile方法加载dex文件,返回DexFile对象。 所以之前在dex分包的时候,我们通过PathClassLoader获取已加载的保存在pathList中的dex信息,然后利用DexClassLoadder加载我们指定的从dex文件,将dex信息合并到pathList

    2.8K20编辑于 2022-09-07
  • 来自专栏全栈程序员必看

    dex文件打开

    其中fileName是输入要打开的dex文件名称,当然它是包括文件路径的;pArchive是打开这个文件后用来表达dex文件内容的对象。 由上面分析可知,dex文件是压缩成zip文件,这样可以减少占用空间。dex文件在系统里是怎么样打开的过程呢? /* * Try to open it directly as a DEX. , &pRawDexFile, false) == 0) { LOGV(“Opening DEX file ‘%s'(DEX)\n”, sourceName); pDexOrJar = (DexOrJar Dex文件,然后打开这个文件。

    4.6K10编辑于 2022-09-14
  • 来自专栏向治洪

    dex分包方案

    Android2.3及以前版本用来执行dexopt(用于优化dex文件)的内存只分配了5M 2. 一个dex文件最多只支持65536个方法。 简单来说,其原理是将编译好的class文件拆分打包成两个dex,绕过dex方法数量的限制以及安装时的检查,在运行时再动态加载第二个dex文件中。 文中说得比较简单,我们来完善一下该方案:除了第一个dex文件(即正常apk包唯一包含的Dex文件),其它dex文件都以资源的方式放在安装包中,并在Application的onCreate回调中被注入到系统的 分好包之后就要开始生成dex文件,首先打包第一个dex文件:  ? 由这里将${classes}(该文件夹下都是要打包到第一个dex的文件)打包生成第一个dex。 由于第二个dex包是在Application的onCreate中动态注入的,如果dex包过大,会使app的启动速度变慢,因此,在dex分包过程中一定要注意,第二个dex包不宜过大。 2.

    1.3K50发布于 2018-02-01
  • 来自专栏韩曙亮的移动开发专栏

    【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 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 加载分析 */ final class DexPathList { /** * dex/resource (class path) 元素集合 { /** * dex/resource (class path) 元素集合 加载源码 , 发现每个版本加载方法不同 , 这样在开发多 DEX 加载时 , 就需要做相应的兼容 ;

    1.3K00编辑于 2023-03-28
  • 来自专栏全栈程序员必看

    dex文件介绍

    文章目录 1, 什么是dex文件 2, 如何生成一个dex文件 3, dex文件的作用 4, dex文件格式详解 5, 与class对比 1, 什么是dex文件 能被 dvm识别, 加载并执行的文件格式 生成class文件 – dx --dx --output Hello.dex Hello.class 生成dex文件 手机中手动运行dex文件 – adb push Hello.dex /sdcard push到手机sd卡目录下 – adb shell 进入手机shell – dalvikvm -cp /sdcard/Hello.dex Hello 执行dex文件 3, dex文件的作用 记录整个工程中所有类文件的信息 4, dex文件格式详解 是一种8位字节的二进制流文件 各个数据按顺序紧密的排列, 无间隙 整个应用中所有class源文件都放在一个dex文件中 dex文件结构图: dex文件头: dex_string_ids: 记录整个应用中的字符串 struct type_id_list dex_type_ids: 类型索引 struct proto_id_list dex_proto_ids

    1.3K30编辑于 2022-09-07
  • 来自专栏全栈程序员必看

    dex文件格式

    dex文件格式 Android 4.0源码Dalvik/docs目录下文档dex-format.html有详细介绍dex文件格式 1.dex文件中的数据结构 dex文件使用到的数据类型 u1~u8表示 dex文件由多个结构体组合而成。 – dex header:dex文件头,它指定了dex文件的一些属性,并记录了其它6部分数据结构在dex文件中的物理偏移 – string_ids到class_def结构为“索引结构区”,真实的数据存放在 文件,值固定为64 65 78 0a 30 33 35 00,转换为字符串为dex.035 checksum段为dex文件的校验和,通过它来判断dex文件是否被损坏或篡改。 3.dex文件结构分析 Dalvik虚拟机解析dex文件的内容,最终将其映射成DexMapList数据结构。

    2.2K30编辑于 2022-09-13
  • 来自专栏全栈程序员必看

    java打开dex文件_dex文件反编译工具(Dedexer)

    dedexer是Android DEX文件反汇编工具,目前网上唯一一个反编译dex文件的反编译工具。如果你用过ant编译java程序,那么编译Dedexer是一件非常简单的工作。 二,把dex文件按照java源代码package的目录结构建好了目录,每个class文件对应一个ddx文件。不像dexdump那样把所有的结果都放在一起。 -o – 指定生成日志文件(dex.log). 运行结果,出现一个使用帮助.仔细阅读后试了下: java -jar ddx.jar -o -D -d java -jar ddx1.5.jar -o -D -d c:\dex\gen c:\dex\classes.dex 示例: D:\WINDOWS\system32> java -jar ddx1.5.jar -o -D -d c:\dex\gen c:\dex\classes.dex Processing com/

    2.1K30编辑于 2022-09-14
  • 来自专栏全栈程序员必看

    android之Unable to execute dex: Multiple dex files define「建议收藏」

    出现了异常Dex Loader:Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice

    28310编辑于 2022-07-20
  • 来自专栏移动开发专栏

    Cause: com.android.dex.DexException: Multiple dex files define Lcom

    jar包 解决: 检查项目,删除重复的jar包即可 stackoverflow:http://stackoverflow.com/questions/7870265/unable-to-execute-dex-multiple-dex-files-define-lcom-myapp-rarray

    41630编辑于 2022-06-10
  • 来自专栏韩曙亮的移动开发专栏

    【Android 安全】DEX 加密 ( 支持多 DEX 的 Android 工程结构 )

    文章目录 一、支持多 DEX 的 Android 工程结构 一、支持多 DEX 的 Android 工程结构 ---- 在 支持多 DEX 的 Android 工程 中 , 有 3 个 Module , 如下图 , app 是主应用 , 其 Module 类型是 “Phone & Tablet Module” , multiple-dex-core 是 Android 依赖库 , 其作用是解密并加载多 DEX 文件 , 其 Module 类型是 “Android Library” , multiple-dex-tools 是 Java 依赖库 , 其类型是 “Java or Kotlin Library ” , 其作用是用于生成主 DEX ( 主 DEX 的作用就是用于解密与加载多 DEX ) , 并且还要为修改后的 APK 进行签名 ;

    55600编辑于 2023-03-28
  • 来自专栏韩曙亮的移动开发专栏

    【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )

    文章目录 一、修复包 Dex 文件准备 二、Odex 优化 三、Dex 文件拷贝 四、 源码资源 一、修复包 Dex 文件准备 ---- 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃 文件 ) 二、 将 Java 字节码文件打包到 Dex 文件 章节流程 , 将更新后的 kim.hsl.hotfix.HotFixTest 类打包成 dex 文件 ; 进入到 " HotFix\app " 文件 ; ( 可以参考 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 ) 博客内容) 将编译好的 update.dex 放置到 SD 卡根目录中 , 下一步开始使用该 dex 文件进行热修复 ; 二、Odex 优化 ---- 修复包就是一个 Dex 文件 , 热修复框架虽然给生成了一个 .patch 文件 , 其本质还是将 Dex 文件进行了优化 , 将 Dex 文件转为 Odex 文件 , 系统查找类时 , 加载 Dex 速度很慢 , 将 Dex 优化为 Odex , 从 Odex 中取 Class 字节码速度要更快一些 ;

    1.2K10编辑于 2023-03-29
  • 来自专栏全栈程序员必看

    class, classloder, dex 详解

    dex文件的作用 dex文件的作用是记录整个工程(通常是一个Android工程)的所有类文件的信息。 dex文件的结构 8位字节的二进制流文件 各个数据紧密排列,无间隙,减少了文件体积,加快加载速度 整个工程的类信息都存放在一个dex文件中(不考虑dex分包的情况下) class文件与dex文件的比较 本质上都是一样的,都是二进制流文件格式,dex文件是从class文件演变而来的 class文件存在冗余信息,dex文件则去掉了冗余,并且整合了整个工程的类信息。 DexClassLoader:与Java中的Customer ClassLoader类似,主要加载自定义路径下的APK或者JAR中的字节码文件(Android中主要是指dex文件,即classes.dex = element.dexFile; if (dex !

    68810编辑于 2022-07-20
  • 来自专栏用户6296428的专栏

    浅谈 Android Dex 文件

    结尾,称为 Dex 文件。 解析 dex 文件的工具 这里推荐一个可以解析 dex 文件的工具 010 Editor。它可以通过预置的模板让我们更清晰的了解 dex 文件的格式。 ? Tinker 热修复的主要原理就是通过对比旧 APK 的 dex 文件与新 APK 的 dex 文件,生成补丁包,然后在 APP 中通过补丁包与旧 APK 的 dex 文件合成新的 dex 文件。 它基于 Dex 文件格式的特性,具有补丁包小,消耗内存小等优点。在 DexDiff 算法中,会根据 Dex 文件的格式,将 Dex 文件划分为不同的区块类,如下图: ? 补丁的合成 客户端收到补丁文件后,会使用相同的读取方式,将旧 Dex 文件转换为相关的数据结构,然后使用补丁包中的操作指令,对旧 Dex 数据进行修改,生成新 Dex 数据,最后数据写入文件,生成新 Dex

    94220发布于 2020-08-25
  • 来自专栏全栈程序员必看

    android .dex文件探究

    所以dex文件中包含了所有的app代码,可利用反编译工具获取java代码。 即dex文件就是Android Dalvik虚拟机运行的程序。 为了能够加深印象,我们先构造一个dex文件。 dex = new DEX(); String sayNumber = String.valueOf(dex.getNumber(c,d)); System.out.println \dx –dex –output=DEX.java DEX.class 这样就会生成DEX.dex文件,如果出现does not match path 的错误,就,这样执行: D:\SDK\build-tools \27.0.1\dx --dex --output=DEX.dex com\example\asus1\rexiufu\DEX.class 然后我们使用010 Editor来打开这个DEX.dex文件 目前,dex的魔数固定为dex.035 然后第二个,checksum,它是dex文件的校验和,通过它可以判断dex文件是否被损坏或者被篡改。

    81040编辑于 2022-09-14
  • 来自专栏ppjun专栏

    Dex热修复原理

    今天我们主要介绍dex这种。 热修复包括两个部分 从远程端下载修复好bug的补丁包 客户端安装补丁包,加载补丁包的类。 使用android�类加载器,在类没被加载到模拟器前(一般在application热修复,如果类已加载,再去记载相同的类就无效了)然后先加载补丁dex,再去加载原来的app里面的dex,因为加载过的类 /包名里面的dex) DexClassLoader 可以加载任意目录下的dex/jar/apk/zip. 最后在DexPathList的findclass方法,将Element的数组每个Element对象的dex加载成class。 所以我们在什么时候插入补丁包的dex呢,就在Dexpatchlist类的findclass方法里面。将补丁的Elements数组加上原来的Elements数组,一起循环获取dex返回class。

    1.4K20发布于 2018-09-05
  • 来自专栏刘晓杰

    dex文件字节码解析

    这一篇解析dex文件.还是由上一篇文章MainActivity生成的dex文件.dex文件比较大,我就不贴16进制代码了,大致讲一下具体怎么操作.由于手工解析太困难了,所以我就借助代码和两篇参考文章来解析的 Android逆向之旅---解析编译之后的Dex文件格式 Android dex文件解析 接下来开始解析. 1.头文件 头文件格式包含magic, checksum,file_size等信息,但是要注意他们都是小端数据 System.out.println("magic:0x" + Utils.bytesToString(content, 0, 8, false));// 默认0x6465780a30333500=dex 文件比class文件要复杂得多.一方面是小端排列,另一方面需要寻址.最重要的一点是,class文件的类索引里面所有的信息都是直接排进去的,但是dex文件里面的类都是存的索引,dex文件更为紧凑.也就是意味着 ,如果需要修改dex文件,那么他的成本会比修改class文件难得多

    89110发布于 2020-06-02
  • 来自专栏移动开发专栏

    Error:Error converting bytecode to dex: Cause: com.android.dex.DexIndexOverflowException,解决65536

    项目中的方法数太多,包括自己的、第三方等,超过65536就会报这个错,无法生成apk文件。 官方解决方案:https://developer.android.com/intl/zh-cn/tools/building/multidex.html 解决办法: 1.app:build.gradle apply plugin: 'com.android.application' android { defaultConfig { ... multiDexEnabled

    45330编辑于 2022-06-10
领券