逆向 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 ...
随机推荐
- Java 实现观察者(Observer)模式
1. Java自带的实现 类图 /** * 观察目标 继承自 java.util.Observable * @author stone * */ public class UpdateObservab ...
- iText 文本
iText中用文本块(Chunk).短语(Phrase)和段落(paragraph)处理文本. 文本块(Chunk)是处理文本的最小单位,有一串带格式(包括字体.颜色.大小)的字符串组成.如以下代码就 ...
- ProgressDialog使用汇总
ProgressDialog使用 ProgressDialog 从继承AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口. ProgressDi ...
- ALV编辑行内容有改变时候操作
ALV编辑行内容时,调用方法 check_changed_data返回变量 gf_valid = 'X'的话说明alv行有变化. 以下拿alv维护表程序部分代码做例: DATA: gr_alvgrid ...
- VC,一条会被鼠标移动的直线
对话框中的小红线可以被移动的 一.类名是 CBinarizationDlg 二.定义两个变量BOOL m_flag;int nPos;在构造函数初始化m_flag = false;nPos=256;三 ...
- Shell printf 命令
Shell printf 命令 printf 命令模仿 C 程序库(library)里的 printf() 程序. 标准所定义,因此使用printf的脚本比使用echo移植性好. printf 使用引 ...
- 【Demo 0004】Java基础-类封装性
本章学习要点: 1. Java封装特性; 2. 掌握类的定义: 3. 掌握类的调用方法; 一.封装特性 Java 纯面向对象语言,面向对象语言遵 ...
- 浅析innodb_support_xa与innodb_flush_log_at_trx_commit
很久以前对innodb_support_xa存在一点误解,当初一直认为innodb_support_xa只控制外部xa事务,内部的xa事务是mysql内部进行控制,无法人为干预(这里说的内部xa事务主 ...
- 将Datagridview中的数据导出至Excel中
首先添加一个模块ImportToExcel,并添加引用 然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...
- Abot 爬虫
Abot 爬虫分析-整体结构 1. 引言 在Github 上搜索下Web Crawler 有上千个开源的项目,但是C#的仅仅只有168 个,相比于Java 或者Python 确实少的可怜.如果按照St ...