android逆向之多dex(multiDex)文件apk的逆向

Android逆向学习(一)vscode进行android逆向修改并重新打包 其实我不知道这个文章能不能写下去,其实我已经开了很多坑但是都没填上,现在专利也发出去了,就开始填坑了,本坑的主要内容是关于android逆向,主要的教程来源来自52破解论坛的大佬课程,但是那是windows版,为喜欢用linux,所以这是一个有比较大改动的学习教程,不过我确信你在windows上也可以运行,let’s go. 阅读详情

0x00 Who is Multidex

很多大厂的Android App因为业务量大,引用库多导致其apk包的中的类于方法剧增.这样就有可能出现因为方法数过多导致编译失败的情况.产生这个问题的主因是dex文件格式的限制.一个DEX文件中method个数采用使用原生类型short来索引文件中的方法,也就是4个字节共计最多表达65536个method,field/class的个数也均有此限制。对于DEX文件,则是将工程所需全部class文件合并且压缩到一个DEX文件期间,也就是Android打包的DEX过程中,单个DEX文件可被引用的方法总数被限制为65536.

为解决这个问题,谷歌推出了Multidex技术,简单来说就是将一个apk中的dex文件拆分成多个分主次先后加载,当然在这之前业界已经开始使用插件化来弱化此类问题.现在市面上也有很多Multidex和插件化两种方案都使用的app.

Multidex会给逆向工程师带来如下麻烦:

1.常见工具静态分析的类和方法不全

2.静态分析工具因为交叉引用的问题导致反编译失败或崩溃

3.动态调试中无法下断点

4.hook的时候找不到制定的类和方法

0x01 merge multidex

在逆向apk中经常会遇到一些类丢失,反编译崩溃的情况.如果这时候去观察apk压缩包会发现其中有超过一个dex,上图中就有两个dex.那么这个app分析起来就不会很轻松了,因为这个叫dex分包的技术直接意味着你要面对超过65536个java方法.而这篇文章主要就是讲解笔者在遇到这种情况的时候一些应对手法.

如果你的dex2jar版本为v2.1之前的版本,那么dex2jar就会默认转化第一个dex文件而忽略其他dex文件. 52f26c6 2.1版本开始支持multidex,直接执行

d2j-dex2jar.sh the-apk-witch-mutidex.apk

就可以转化所有dex文件到一个jar包中.

在dex2jar更新v2.1之前笔者是用的一个比较”耿直”的方法解决这个问题,因为dex的method数量有限但是jar包对method是没有特别限制的,所以我写了一个脚本将apk中多个dex先转化为jar文件之后解压缩最后合并打包压缩,同样可以得到完全的反编译文件.

Android逆向中出镜率较高的jeb在早期版本v1.x也同样有类似尴尬的问题,只默认反编译第一个dex文件.但是到v2.2也开始支持multidex采用merge的方式解决多个dex的反编译问题.也就是在jeb2.2之后就可以无障碍的在multidex中使用交叉引用功能了.

在很长一段时间使用jeb1.5的时候解决这个问题的办法同样也也merge多个dex的smali代码,因为要回编译至dex所以就无法突然65K方法数的限制,那么就要想办法对multidex进行瘦身.大数据情况下我们只关心其自有代码,对其依赖库往往是带过的(大多数情况是和配置文件中application或者入口Activity同路径的代码).这里就需要选择一个较小的dex去识别去除一些依赖库和第三方sdk比如android support / google gson,然后抽取另外的dex的主包smali代码合并到较小的dex中.最后回编译至dex拖入jeb1.5中就可以正常分析了.

0x02 attach multidex 

在multidex的测试过程中还会出现一种情况,就是使用xposed hook其方法的时候,如果方法位于默认dex中是可以的正常hook,但是如果方法位于dex分包中xposed就会报错提示所要hook的方法所在类无法找到.

要分析这个问题的原因以及解决办法,就要先了解multidex的载入过程以及xposed的hook时机.

dex分包加载大致流程如下,可以得出分包是滞后主包不少时间加载的:

1.检测是否有分包需要安装,系统是否支持multidex

2.从apk中解压出分包

3.通过反射将分包注入到当前classloader

而xposed为了能让module及时载入执行所以得尽快调用handleLoadPackage(),所以此时获取的context的classloader中只要默认dex主的包的类.

因此我们得想法得到完整的上下文context,比较明显的获取完整context的hook时机有如下两处:

MultiDex.install()

MultiDexApplication.attachBaseContext()

而xposed的作者建议是选择android.app.Application.attach(),因为attachBaseContext是有概率被重写的不稳定.所以选择方法内调用了attachBaseContext的Application.attach().

示例代码如下

分析到这里就可以想到一些加壳后的app无法正常hook也可能是类似原因可以用同样的方法解决(这里前提当然是能脱壳看到代码且壳没对hook做对抗,如果有对抗还是脱了之后回打包比较稳妥.).下图这个壳同样也佐证了attachBaseContext被重写的可能,直接hook被重写的attachBaseContext也是可行的.

0x03refer

https://developer.android.com/studio/build/multidex.html#about

http://souly.cn/%E6%8A%80%E6%9C%AF%E5%8D%9A%E6%96%87/2016/02/25/android%E5%88%86%E5%8C%85%E5%8E%9F%E7%90%86/

http://bbs.pediy.com/showthread.php?t=212332

https://github.com/pxb1988/dex2jar

https://github.com/rovo89/XposedBridge/issues/30#issuecomment-68488797

http://tech.meituan.com/mt-android-auto-split-dex.html

https://android.googlesource.com/platform/frameworks/multidex/+/master/library/src/android/support/multidex

 

 

来自:http://drops.wiki/index.php/2016/10/26/android-multidex/

Android逆向分析入门:使用dex2jar与反编译器从APK提取Java源码 在Android应用开发与安全研究领域,反编译是一项基础且关键的技术,它允许开发者或研究人员将已编译的APK文件还原为可读的Java源代码。其核心原理在于解析Android特有的Dalvik Executable(.dex)字节码格式,并将其转换为标准的Java字节码(.class)文件。这项技术的价值不仅在于代码审计、安全漏洞排查和学习优秀应用架构,更是理解应用打包、混淆与加固机制的重要途径。通过工具链(如dex2jar配合JD-GUI或FernFlower)将.dex文件转换为.jar文件,再经反编译器 阅读详情

相关推荐

Android 的65535放法数超限问题解决方案-AS方式、apk解析合并多dex、smali文件问题

Android 的65535放法数超限问题解决方案-AS方式、apk解析合并多dex、smali文件问题

qq_19942717的博客 2456

dex2jar反编译多个dex的apk方法以及常见错误(包括OutOfMemoryError: Java heap space)

工作中常用到反编译apk,但是apk下面不仅仅只有一个dex文件,需求大的情况下会有很多个dex文件,一个个用dex2jar来反编译,再打开代码分析,很麻烦,所以把全部dex文件一次性反编译出来,很有必要。 1,分成多个dex文件的原因 dex文件,是将项目所需全部的class文件合并且压缩到里面,但是单个dex文件引用的方法总数不能超过65536,所以为了解决这个问题,谷歌推出了multidex技术,将一个apk文件中的dex拆分成多个分主次的dex文件来加载。 为什么是65536?因为一个dex文件中的

u011623002的博客 1万+

安卓apk反编译教程

JDK7以及之前可以使用 JD-GUI,如果版本>=1.8 各种问题。

S_ZaiJiangHu的博客 3613

反编译中dex文件转换jar文件借助第三方安卓应用,下载速度快

dex转换jar另一种,不用电脑的方式

piaoliuxiaozhou的博客 469

安卓逆向核心:DEX文件格式解析与实战逆向工具链指南

在安卓应用安全分析与逆向工程领域,理解应用的底层执行逻辑是关键。这通常从分析其核心载体——DEX文件开始。DEX是Dalvik Executable的缩写,是一种专为安卓运行时设计的压缩字节码格式,它承载了应用所有Java/Kotlin代码逻辑。其文件结构严谨,包含文件头、索引区和数据区,理解这一结构是进行静态分析和动态调试的基础。在逆向实战中,工程师常使用Jadx、JEB等工具进行反编译,并借助Frida进行动态Hook以穿透代码混淆。面对常见的名称混淆、控制流平坦化等保护手段,掌握动静结合的分析方法至关

weixin_34393428的博客 575

安卓逆向核心:DEX文件结构解析与实战逆向工具链指南

在移动应用开发与安全分析领域,理解应用的底层执行逻辑至关重要。安卓应用的核心可执行代码并非直接以Java源码形式存在,而是被编译为Dalvik字节码,并封装在DEX(Dalvik Executable)文件中。DEX文件作为Android Runtime(ART)或Dalvik虚拟机执行的基石,其结构设计决定了应用的运行机制。从原理上看,一个DEX文件包含严谨的文件头、索引区(如字符串、类型、方法索引)和数据区(类定义、代码项),这种结构不仅承载了程序的执行逻辑,也是实现代码混淆(如ProGuard重命名)

weixin_33922672的博客 431

Android中Apk加固之Dex文件的加密与解密

参考文档:https://developer.android.google.cn/studio/build/multidex.html#keep 1、由文档中可以知道 了解到 在Android5.0之前我们使用的是Dalvik虚拟机,默认情况下,Dalvik 限制应用的每个 APK 只能使用单个classes.dex字节码文件。要想绕过这一限制,您可以使用Dalvik 可执行文件分包支持...

文艺范的博客 9578

Android APK源码查看与反编译实战工具包

htmltable {th, td {th {pre {简介:在Android应用开发中,通过APK源码查看工具进行逆向分析是学习、调试和理解应用内部机制的重要手段。本文介绍以jd-gui.exe和readme.txt为核心的反编译流程,帮助开发者将APK中的DEX文件还原为可读的Java源代码。尽管反编译结果可能受代码混淆影响,但仍可用于分析类结构、方法逻辑和调用关系。

weixin_42602726的博客 1124

如何快速掌握dex2jar:Android开发者必备的DEX与Class文件转换工具完全指南

dex2jar是一款强大的开源工具集,专为Android开发者设计,用于处理`.dex`和Java `.class`文件。无论是将DEX文件转换为JAR格式,还是对Smali代码进行反编译与重新编译,dex2jar都能提供高效解决方案。本文将带你从环境搭建到高级应用,系统掌握这款工具的使用方法与贡献技巧。 ## 📋 核心功能解析:为什么选择dex2jar? dex2jar提供四大核心功能模块

gitblog_01048的博客 1053

Android逆向助手:APK反编译与安全分析实战工具

Android逆向工程是指通过反编译、静态分析、动态调试等手段,从已发布的APK文件中还原出应用的架构设计、核心逻辑与数据交互机制。其技术基础建立在对DEX字节码、资源结构及组件通信模型的深入理解之上,涉及ZIP容器解析、Dalvik/ART执行环境特性、组件生命周期管理等内容。010 Editor是一款专业级十六进制编辑器,支持模板解析(Template),可自动识别DEX、ELF、ZIP等文件结构。

weixin_29840475的博客 2026

安卓APK导出的dex转jar文件

首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar 文件夹。 在命令行下定位到dex2jar.bat所在目录,运行 dex2jar.bat

安卓APK静态脱壳实战:IDA Pro逆向分析加固应用与DEX解密

在移动应用安全与逆向工程领域,理解应用保护机制是分析其内部逻辑的基础。现代安卓应用常采用加固技术对核心代码进行加密或混淆,以对抗逆向分析。其核心原理在于通过外壳程序在运行时动态解密并加载原始代码,这涉及对DEX文件格式、JNI机制以及常见加密算法(如AES)的理解。掌握静态脱壳技术对于安全评估、漏洞挖掘和竞品分析具有重要价值,它能帮助研究人员在不运行应用的情况下,通过逆向工程还原原始代码逻辑。本文以实战案例切入,详细解析如何利用IDA Pro等工具,对采用“DEX加密+SO库解密”方案的APK进行逆向分析,

chutisun0039的博客 394

Android dex文件通用自动脱壳器

标 题: 【原创】Android dex文件通用自动脱壳器 作 者: zyqqyz 时 间: 2015-09-01,13:03:30 链 接: http://bbs.pediy.com/showthread.php?t=203776 之前做了一个Android dex的通用脱壳器,主要思想是以AOP的模式对运行时ART和DVM进行定制,附件中是在HITCON上演讲的ppt。 源码地址:https://github.com/zyq8709/DexHunter 代码较挫,大家可以看看,有兴趣的可以继续在上边改一改:)。 github上有一段demo视频和相关的样本,大家有兴趣也可以试试。 测试了国内主流的6款在线加固服务,可以正常脱下来。有其他的样本的也可以试试,发现问题的话请联系我。 为了方便大家阅读,我把对运行时的关键修改摘了出来。class_linker.txt 是对ART的修改,dalvik_system_DexFile.txt是对DVM的修改。 demo视频下载:http://pan.baidu.com/s/1o6Mjwim 密码:x1ay 因为那个视频是H264编码的MP4,所以可能比较挑播放器,大家可以换着试试,比如kmplayer等。 我传了一份到优酷,视频地址:http://v.youku.com/v_show/id_XMTMyNDc4OTQwMA==.html*转载请注明来自看雪论坛@PEdiy.com

dex2jar 新手完整教程:3 步快速把 DEX 转成 JAR

手上有 APK,想看里面的 Java 代码,解包却只有一堆看不懂的 .dex 文件?DEX 是 Android 上运行的字节码,.class 是 Java 的字节码,dex2jar 就是两者之间的翻译官——它把 .dex 批量转换成 JAR 里的 .class 文件(也就是常说的 DEX 转 JAR),让你能直接分析里面的类与方法。 ## dex2jar 能帮你做什么 围绕"拿到字节码 → 看

gitblog_00839的博客 429

Android APK+Dex文件反编译及回编译工具v2.0.2

《APK+Dex文件反编译及回编译工具》 简称:APKDB 是一款,针对Android OS系统的APK程序,直接反编译修改的工具。 APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具; 正常安装后,它直接在【鼠标右键】创建快捷菜单; 非常方便汉化工作者,对APK或Dex文件进行简易的反编译回编译操作 1.本工具必须先安装JAVA7; 2.如需显示APK自身图标必须先安装.NET Framework4 · 对*.Apk 文件 反编译 及 回编译 用于汉化修改 · 对*.Dex 文件 反编译 及 回编译 或查看详细源代码 · 对*.Apk 文件 批量反编译 及 回编译 · 对*.Apk、*.Zip 文件执行签名 · Windows下直示Apk件自身图标 v2.0.2 正式版 2016.06.05 *.更新,ShakaApktool v2.0.0(2016.06.01) *.更新,Apktool v2.1.1正式版(2016.05.07) *.更新,7-zip压缩工具版本到16.02 *.更新,smali、baksmali v2.1.2(2016.03.28) *.更新,ADB工具 (25.1 rc1版) *.更新,Zipalign优化工具 (23.0.3版) *.更新,合并Odex文件 *.更新,XML编辑器(提升速度,修复bug) *.更新,显示APK自身图标(Apkshellext v2.0.1.5780.2290) *.更新,刷机精灵APK安装器 *.新增,自定义默认签名,可用自己制作的签名包签名 *.新增,Keytool签名包制作工具,推荐使用JAVA8 *.新增,极限压缩优化APK内图片功能 *.新增,PNG图片优化工具OptiPNG v0.7.6 *.新增,设定默认Apktool版本(回车键直接执行) *.新增,ShakaApktool自定义操作 *.新增,选项,不反编译Resources、Classes文件 选择后(可同时使用),再选择使用Apktool工具。 *.新增,反编译jar文件时,自动识别是否含多个dex文件,并使用ShakaApktool反编译 *.新增,反编译JAR文件后,回编译时自动合并并转移到反编译目录内 右键[APK文件]、[RSA文件]、[original]目录、[META-INF]目录 可直接查看签名信息。 *.新增,创建[开始菜单-所有程序-APKDB]目录 *.新增,精简APK语言包功能(仅保留英文、简体中文、繁体中文) *.增强,对繁体系统的兼容 *.增强,右键菜单判别准确率 *.增强,重新调整右键菜单,强制关联所有文件 *.增強,针对不同系統的兼容性 *.修复,XP签名优化出错问题 *.修复,选项按键滞留问题 *.修复,文件名含空格优化失败问题 *.修复,签名遗留旧文件,删除框架文件… *.修复,卸载出错问题 *.修复,APK安装器不关联问题 *.修复,个别APK文件反编译时停顿问题 *.修复,修改AndroidManifest.xml回编译没变化问题 *.修复,各种小问题 *.优化,整体兼容性,增加选项状态提示 *.优化,界面调整 *.优化,安装过程 *.优化,对JAVA路径的判别 *.优化,对64位系统的支持 *.优化,执行脚本 *.优化,编译过程 *.优化,DEX文件夹的的判别 *.删减,旧版APKTOOL(2.0.0以下版本) *.其他,一些微调整

Flotherm XT学习历程

大家好,通过半年的热仿真软件学习使用,最终发现最好用,最好上手的软件就是Flotherm XT,对新手非常友好,但由于软件近几年才发布,网上教程非常少,后面我将在这里持续分析软件使用心得,和大家一起学习。

xiaoredred的博客 6260

Android逆向工程终极指南:高效DEX分析与JAR转换实战

欢迎来到Android逆向工程的完整指南!如果你正在寻找一款强大的工具来分析和转换Android应用,那么**dex2jar**正是你需要的解决方案。这个开源工具集专门用于处理Android的DEX文件和Java的CLASS文件,为安全研究人员、应用开发者和逆向工程爱好者提供了强大的分析能力。🚀 ## 什么是dex2jar?为什么它如此重要? **dex2jar**是一个功能全面的工具集,主

gitblog_00740的博客 1732

分位数回归和stata

分位数回归与stata 找了半天也没找到我想看的那种完整点的stata教程,只好自己写一个了… 参考教材:《用STATA学微观计量经济学》&《高级计量经济学及STATA应用_第2版》 第一部分 纯理论 更加详细的百度吧,很长很长,这里主要是拿来和ols比较。ols是均值回归,求解的方法是残差的平方最小,而这里就是对残差的绝对值用分位数做惩罚。(思想了解一下即可) 第二部分 Stata...

Joycezzz的博客 1万+
上一篇: smali语法手册
下一篇: xposed框架下通过Toast显示任意Application包名
class_brick
博客等级 码龄12年 223粉丝 76原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值