作者博客
http://www.jianshu.com/u/abc8086489c7
文章目录
前言
基础知识
-
dex
odex
smali
rom层应用分析
-
odex与apk
框架文件
逆向工具箱
-
baksmali
dex2jar
apktools
gd-gui
SVADeodexerForArt
apkDB
当前Activity
实战逆向MIUI系统设置WIFI
-
需求
思路
寻找切入点
下载固件
拆包与合并资源
翻源码
反射API
后记
0
前言
为什么要逆向rom层?
Android的碎片化不用我说大家都懂的,五花八门。时常应用层开发者痛不欲生,明明在我这里开发时运行没有问题,tm的一上线就出问题。
为什么?这个机型rom被改动了呀。真好烦哦。这种说bug又不是bug,但确实又是bug的问题还得你修。特别是某些小公司条件限制没能力买齐全主流的机型供开发人员工作使用。
想要猪儿肥又壮,光吃草,还不给喂饱!!!
而你还得默默的给适配好,怎么办?办法也不是没有,业界内我在网上资料查找少又公开这个思路,不过我觉得如果能逆向一把厂商的rom,(估计大厂的爱paipai适配应该也会这样做,因为我没有在大厂待过呀。所以只能估计了。)看看rom厂商的实现怎么写的,难道还不能适配好了嘛!所以就有了下文。
为了能保证后面看文章的同学能够顺利跟着本文去实践,我清空了电脑上已有所有反编译工具环境,从头来过一遍,(其实就是从头再踩一遍坑啦。经验告诉我们,第一次做这种事情,从来就不会那么顺利。(┬_┬)哭~)尽量保证本章在写作的过程中不会出现疏漏而导致的大家掉坑里了,但是不可避免还是可能会疏忽笔误之类的,那么大家可以给我留言,可能回复慢一点,但是一定会认真回答的。
这篇文章拖了很久,大纲我是一个月前写好的,一直没来得及填充内容。罪过,醉过!~ 工作上实在抽不出时间了,一回家倒床就迷迷糊糊睡着了。后面有同学问我说:"你咋还没发布?那个逆向适配的,我等着打赏一波呢。”听完这句话,我又忍不住我的麒麟臂。乘着周末,来,快扶老夫起来,开整。
感谢白手、追风917、imesong 提供的帮助,谢谢 。还有林学森大大的一本书推荐《深入理解 Android 内核设计思想》,对本篇文章提供了学习参考。
1
基础知识
基础这部分特别重要,如果不是很扎实同学一定要认真学习噢。熟悉的同学就往后跳着看吧,为了照顾大多数同学,这部分就不能丢了。
dex
dex大家应该不会陌生,我们平时写的类都会被转换成class然后打包成dex。你可以尝试解压缩你的apk文件查看。
也可以下面的方式转换java类直接转换成dex,步骤如下:
javac xxx.java (得到>>> xxx.class文件)
配置环境变量 Android SDK开发包下的dx工具 (路径:/build-tools/编译版本/dx )
dx --dex --output=xxx.dex xxx.class (得到>>> xxx.dex文件)
这样得到的dex是可以直接用Android虚拟机执行的,可以使用adb shell进入并输入# dalvikvm -cp /sdcard/name.dex name 可直接运行。
odex
odex???,没毛病。用百度百科原话说:
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个dex文件单独存放。
如果经常刷机的朋友肯定不会陌生,经常有民间rom作者说已优化odex。那么其实他就是把apk包中的dex提取出来转成odex。这个过程为什么说是优化呢?因为在 4.4ART虚拟机之前,DVM虚拟机每次打开一个应用程序前都需要先解压缩包,然后杀鸡取卵的拿到dex再读到虚拟机内。这个过程中解压是要花时间的。为了让开机和启动应用速度加快。将apk中的dex提前取出来就省去了解压的耗时。第二一个以前很