<div id="single_top"></div> <p><strong>odex</strong> 是经过优化的dex文件,且独立存在于apk文件。odex 多用于系统预制应用或服务。通过将apk中的dex文件进行 odex,可以加载 apk 的启动速度,同时减小空间的占用。请参考ODEX关于 odex 的说明。</p>
讯享网
在反编译 odex 文件的过程中,我们需要使用到以下工具
- smali/baksmali
- dex2jar
- JD Compiler, jar反编译工具
smali/baksmali是odex与dex文件格式互相转换的两个工具,dex2jar则是将dex文件转为java的jar文件,JD Compiler用于反编译jar文件。也就是说,经过以上一系列的操作,我们最终可以从一个odex文件得到一个可读的java文件。(事实上,也不是完全可读,与源码上还是有差别,有时候部分代码还无法反编译过来,只能以jdk虚拟机指令的方式存在了)。
首先,一个 odex 文件的生成过程是:java -> class -> dex -> odex,那么反编译的就是上面过程的逆操作了:odex -> dex -> class -> java。
我的测试环境:
- Android 4.1.2
- Samsung Galaxy II
以Android系统中的 uiautomator.odex 文件为例,目标是反编译其源码(其实它的源码grepcode).
创建一个临时目录test,将 smali/baksmali 相关的工具都放入其中。
首先,将目标 odex 文件拿出来。
在合成 odex 文件过程中,还需要用到很多依赖文件,它们同样也是 odex 格式的。因此在合成时,我们需要根据情况反复从手机中抽取相关的依赖包。
关于命令的使用,直接执行 可以得到相关的使用说明。这里要用到的参数主要是:
- : Android API等级,Android 4.1.2是16
- : 操作,反编译
- : 依赖包的目录,我们用当前目录.
开始反编译,执行以下命令:
以上的异常表明,反编译的过程缺少依赖包,那就从系统中提取。
反编译 uiautomator.odex 总共需要使用到以下依赖包:
baksmali 执行成功后,会产生一个 目录,里面放的是中间文件。这时,可以使用这些中间文件来生成文件:
classes-dex2jar.jar 便是我们要得到java jar包。通过JD Compiler打开这个jar可以看到反编译后的java内容。
之所以反编译 uiautomator,是因为Android SDK中给出的 uiautomator.jar 包中很多API都没有包含其中,也没有在其官方文档中给予说明。通过阅读 uiautomator 的源码,发现它有很多可以扩展的地方。
- android apk 文件反编译
最近,自己坑逼的把一个android 项目修改版本的代码删除了.这个项目居然还没上传到源代码管理器.幸好还有apk文件,修改的代码也不多可以反编译一下. 1.下载 dex2jar 获取源码工具 地 ...
- Android dex ,xml 文件反编译方法
Dex 文件是Android上运行于delvik的java二进制文件,如果你对其中的内容感兴趣而开发人员没有公布源代码,你可以用如下方法反编译dex文件: 1 解压system.img 用xyaffs ...
- Android测试(三)——APK文件反编译
APK文件反编译: 在进行反编译操作前,先简单介绍下smali文件: smali是一种文件格式,语法和Jasmine的语言类似,这些smali文件包含开发应用程序时编写的java类的代码. 工具:ja ...
- 转: android apk 防止反编译技术(1~5连载)
转: android apk 防止反编译技术 做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习. ...
- android apk 防止反编译技术第一篇-加壳技术
做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成 ...
- Android混淆、反编译以及反激活成功教程的简单回顾
=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...
- android apk 防止反编译技术第二篇-运行时修改字节码
上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u//blog/.接下来我们将介绍另一种防止a ...
- android apk 防止反编译技术第三篇-加密
上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u//blog/.接下来我们将介绍另一种防止a ...
- android apk 防止反编译技术第二篇-运行时修改Dalvik指令
上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u//blog/.接下来我们将介绍另一种防止a ...
讯享网 <li>[stm32] 中断 <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">#include "stm32f10x.h" #include "stm32f10x_tim.h" #include "misc.h" #i ...</p> </li> <li>为什么心跳包(HeartBeat)是必须的? <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">几乎所有的网游服务端都有心跳包(HeartBeat或Ping)的设计,在最近开发手游服务端时,也用到了心跳包.思考思考,心跳包是必须的吗?为什么需要心跳包?TCP没有提供断线检测的方法吗?TCP提供的 ...</p> </li> <li>nginx upstream模块--负载均衡 <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">Module ngx_http_upstream_module英文文档 upstream模块相关说明1.upstream模块应放于nginx.conf配置的http{}标签内2.upstream模块默 ...</p> </li> <li>Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ...</p> </li> <li>Atitit.可视化编程jbpm6 的环境and 使用总结... <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">Atitit.可视化编程jbpm6 的环境and 使用总结... 1. Jbpm的意义 1 2. Jbpm6环境配置 2 2.1. Down 2 2.2. Install eclipse jbpm p ...</p> </li> <li>Leetcode 27 Remove Element STL <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">和remove zero类似的方法完成该题 class Solution { public: int removeElement(vector<int>& nums, int va ...</p> </li> <li>window.history.pushState与ajax实现无刷新更新页面url <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">ajax能无刷新更新数据,但是不能更新url HTML5的新API: window.history.pushState, window.history.replaceState 用户操作history ...</p> </li> <li>深入理解Openstack自动化部署 <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">前言 说实话,看到自己在博客园的排名感到惭愧,因为自己最近两年没有持续地在博客园上写技术博客了,有人私下问我是不是荒废了?翻翻15年和16年的博客,真的是少的可怜.一方面的确由于岗位的变化,导致了工作 ...</p> </li> <li>关于 MySQL 的 boolean 和 tinyint(1) <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),MySQL里有四个常量:true,false,TRUE, ...</p> </li> <li>latextools cite 自动补全 <p style="color: rgba(0, 0, 0, 0.32);margin-bottom: 8px;">最近在用latex写毕业论文,编辑环境用的是Sublime Text 2 加 latextools 插件,在使用latextools的cite命令来引用参考文献时,我们希望输入cite{ 后自动弹 ...</p> </li> </ol>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/191421.html