逆向 Framework.jar
Ref:http://www.addictivetips.com/mobile/what-is-odex-and-deodex-in-android-complete-guide/
Ref:http://stackoverflow.com/questions/9593527/what-are-odex-files-in-android
这篇文章主要是之前在适配安卓手机的时候整理的,大家能够參考一下:\
odexed
某些.apk档内有一些预先処理过的odex档。这些odex档是经优化後应用的一部份,这做的好処是为了优化启动过程(BootProcess)及降低占用系统的空间。因其已预先装载程序的一部份内容,而达到优化启动过程的目的。还有一方面,它添加了安全性,由于odex档在运行前被抽出并放入了系统其他位置。
deodexed
而deodexing则是将这些odexed化过的apk档又一次打包,使其成为class.dex档,因此,全部.apk相关的档案又归於系统的一処,避免了程序的某些部份由于分散而导致的冲突。对一个经deodexed流程処理的apk其内的.dex档而言,其具有被Dalvik
Virtual Machine使用的cache档,同一时候它是储存於.apk档内;相对於.dex档来说,一个.odex档,是一个优化(optimized)版本号的.dex档,并存於.apk之外,Android对全部的系统应用预设採用odex技术。当一个Android系统启动的时候,供Dalvik系统运用的Dalvik
cache靠这样odex档所建立,使得操作系统能预先了解到哪些应用将要被装载至系统,因此提高了应用的启动过程。
优缺点:
deodexing的长处是改动的可能性较高。这通常在custom ROMs还有themes广泛的被使用,大部份开发人员建一个custom
ROM的时候,会先选择deodex ROM package,由于这样不仅仅同意它可更改各种apk,也为post-install
theming 留下了空间。
还有一方面,odex档是为了高速建立dalvik
cache而产生,移除它们代表的是添加启动时间。可是这也仅仅是对第一次启动而言,由于在第一次启动经过deodexing之後,cache也会建立。仅仅有在dalvik
cache不存在的情况下,应用的启动才会花较长的时间。
怎样合并odex和apk:
ref:http://blog.csdn.net/linuxer_hy/article/details/8223320
ref:http://blog.csdn.net/xiaoyaovsxin/article/details/8486242
怎样逆向:
ref:http://blog.sina.com.cn/s/blog_7c6cbaf601019604.html
首先,我们须要将 /system/framework/framework.jar 取出的,到 eclipse 的 ddms, 至 File Explorer 可将该档案 pull 出
下下面指令開始用 baksmali 逆向,有些机型会有 framework2.odex,这也是须要逆向的 odex 档:
$java -jarbaksmali-1.4.1.jar -c :core-junit.odex -x framework2.odex
使用baksmali-2.0.2.jar 逆向的过程中,出现例如以下错误讯息:
Error occured whileloading boot class path files. Aborting.
org.jf.util.ExceptionWithContext:Cannot locate boot class path file /system/framework/core.odex
at org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:217)
at org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:161)
at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:59)
at org.jf.baksmali.main.main(main.java:274)
解决的方法:到framework.odex档的folder外,用下面命令
$java -jar baksmali-2.0.2.jar -x -a 18 -d ./system/framework/./system/framework/framework.odex
然後会得到一堆.smali档,於是再下指令将那些.smali打成class.dex档
$java -jar smali-2.0.2.jar ./out-framework -o ./class.dex
再使用dex2jar
$ ./d2j-dex2jar.shclass.dex
最後再使用 jd-gui
$./jd-gui class-dex2jar.jar
系统框架源代码的zip包就产生了,然後就能够開始看这个系统的一些实现细节了。
逆向 Framework.jar的更多相关文章
- Spring Framework jar官方直接下载路径
SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...
- 修改替换/system/framework/framework.jar后重启手机为何没有效果?
自Android 5.0开始android默认使用art(Android4.4开始有实验性质的art),取代原来的Dalvik, art会加载boot.art和boot.oat两个文件(静态编译优化, ...
- Android Studio引用自定义的framework.jar包
1.在app/libs/目录下添加framework.jar包. 2.打开build->Edit Libraries and Dependencies,把libs/framework.jar放到 ...
- 解决 android push framework.jar 不生效的问题
. . . . . 在 Android 采用 ART 虚拟机后,为了提高运行时效率,在编译期间会将 jar 包中的 dex 文件编译为 odex.vdex 等文件.而这些文件并不存放在 framewo ...
- Robot Framework(十七) 扩展RobotFramework框架——扩展Robot Framework Jar
4.4扩展Robot Framework Jar 使用标准JDK安装中包含的jar命令,可以非常简单地向Robot Framework jar添加其他测试库或支持代码.Python代码必须放在jar里 ...
- Description Resource Path Location Type Missing artifact com.********:framework:jar:1.0.2 pom.xml /项目名 line **** Maven Dependency Problem
问题具体描述如下图所示: 对于该问题本人是这么解决的. 在window下[Preferences]目录找到[Maven]下的[usersetting] 查看local repository 里面的路径 ...
- [教程] 【【【【odex教程之jar】】】】/system/framework里面的jar做odex g13
dexopt-wrapper core.jar core.odex dexopt-wrapper ext.jar ext.odex dexopt-wrapper framework.jar frame ...
- spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)
spring官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...
- android源码framework下添加新资源的方法
编译带有资源的jar包,需要更改frameworks层,方法如下: 一.增加png类型的图片资源 1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/re ...
随机推荐
- 为什么要用BitSet
BitSet适用于一类型boolean判断,Java的BitSet在这类型判断中非常高效. 举例说明:在判断前2000万数字中素数个数的程序中,如果使用最基本的素数判断代码: package com; ...
- java.io.EOFException解决
主要错误提演示样例如以下: 严重: IOException while loading persisted sessions: java.io.EOFException 严重: Exception l ...
- <转载>如何解决子级用float浮动父级div高度不能自适应的问题
转载:http://www.kwstu.com/ArticleView/divcss_2013101582430202 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内 ...
- Servlet的学习之Session(4)
在本篇中,我们来使用Session完成一个用户登录的案例,前提声明:这个案例主要用于学习Session技术,是属于比较简单的类型,以后会采用MVC模式来开发登录,那就会比较复杂. 现在大多数网站都提供 ...
- 基于visual Studio2013解决面试题之0302链表中找倒数k项节点
题目
- 细说UI线程和Windows消息队列
在 Windows应用程序中,窗体是由一种称为“ UI线程( User Interface Thread)”的特殊类型的线程创建的. 首先, UI线程是一种“线程”,所以它具有一个线程应该具有的所有特 ...
- 我们熟悉的Textbox
创建只读文本框 方法一: 可用Readonly属性防止用户编辑文本框内容.将Readonly属性设置为True后,用户就可以滚动文本框中的文本并将其突出显示,但不能作任何更改.将Readonly属性设 ...
- 【MongoDB】学习MongoDB推荐三本书
近期学习mongodb,感觉这三本书写得不错.非常大家分享一下:
- SpringMVC: web.xml中声明DispatcherServlet时一定要加入load-on-startup标签
游历SpringMVC源代码后发现,在web.xml中注冊的ContextLoaderListener监听器不过初始化了一个根上下文,只完毕了组件扫描和与容器初始化相关的一些工作,并没有探測到详细每一 ...
- 将Ojective-C代码移植转换为Swift代码
相比于Objective-C,Swift语言更加简练.有时我们需要把原来写的一些Objective-C代码转换成Swift,下面总结了各种常见的情况. 1,构造函数的迁移 Objective-C为: ...