安卓反编译教程.docx
《安卓反编译教程.docx》由会员分享,可在线阅读,更多相关《安卓反编译教程.docx(31页珍藏版)》请在冰豆网上搜索。
安卓反编译教程
2.手把手教你配置java环境变量
难度系数:
1
失败概率:
3
危险系数:
0
(满分为5)
本帖隐藏的内容
这一步比较简单,基本度娘可以帮你解决一切,但是要求细心。
新手配置的时候很可能会失败的,所以失败概率为3。
至于java环境配置的意义,我想也不用多说了。
安卓是基于java语言的,因此apk需要在java环境里头进行编译跟反编译。
所以,配置好java环境变量是所有工作的第一步。
配置步骤(win7,32位为例):
第一步,下载jdk1.7,我网盘里头提供下载。
第二步,然后安装,建议默认目录,当然也可以自己选择,安装后要记住安装的路径。
第三步,安装成功之后可以进行配置,右键我的计算机-属性-高级系统选项,如图:
2011-6-1714:
51上传
下载附件(67.32KB)
第四步,点开环境变量选项卡
新建变量
1.变量名:
JAVA_HOME值:
C:
\ProgramFiles\Java\jdk1.7.0(以你安装目录为准,确认里面有bin和lib,jre等多个文件夹)
2011-6-1714:
51上传
下载附件(14.4KB)
2.变量名:
CLASSPATH值:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;(千万别漏了开头的小点)
如果变量目录下没有PATH这个变量,还需要新建一个
3.变量名:
PATH值:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
如果已经存在PATH,就在值前面加上面的一段路径就可以了,末尾有;隔开。
用表格表示可能会比较清晰...
变量名称
值
JAVA_HOME
C:
\ProgramFiles\Java\jdk1.7.0(即安装目录)
CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;
PATH
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
JAVA环境变量到此配置完成,结果只有两个,成功,与失败。
下面是检验方法:
打开开始菜单,输入cmd,输入javac
如果出现以下中文提示,恭喜你,你成功了。
如果你失败了,从新检查环境变量的值。
很容易错的。
2011-6-1714:
58上传
下载附件(99.52KB)
第一章到此完结。
第二章:
从解包说起
本帖隐藏的内容
一、解包sbf详解
大家一直用sbf刷底包,相信对sbf也不会太陌生。
其实sbf就是一个经过签名的压缩文件而已。
让我们把它拆开看看。
a.下载我提供的解包工具并解压,得到三个文件,其中MotoAndroidDepacker就是专门解包sbf的文件。
打开看到全英的界面:
2011-6-1719:
52上传
下载附件(41.04KB)
点击openFromFile打开固件,为方便起见,建议把sbf放在同一目录下。
并改一个比较短的名字,否则容易出错。
打开固件后按splittofolder自动解压,直到提示splited解包成功。
得到如下文件夹。
2011-6-1719:
52上传
下载附件(8.79KB)
下面是两个重要文件的说明。
其中CG35是内核文件,CG39是系统文件。
2011-6-1719:
52上传
下载附件(73.81KB)
打开explore2fs,选择CG39文件打开,又看到我们熟悉的系统文件夹的结构。
2011-6-1719:
52上传
下载附件(49.61KB)
这一步可以直接提取你需要的文件,按文件夹或者文件右键就可以解压了。
b.提取内核
进入刚才解包所得的文件夹,把以CG开头的文件删除,只留下CG35即内核文件。
再次打开MotoAndroidDepacker,按OpenFiles选取所得文件夹。
2011-6-1719:
52上传
下载附件(92.63KB)
点击compilefile即打包内核。
最后得到一个firmware.sbf的文件,可以直接用RSD刷入。
这就是所谓的替换内核了。
本小节结束。
二、DIY自己的ROM(以修改V大的ROM为例)
本帖隐藏的内容
众多rom中,V大的rom最为简单,结构简明易懂,下面以新中欧179纯净版1.0为例进行讲解。
打开zip文件看到结构如下:
2011-6-1720:
36上传
下载附件(40.94KB)
a.打开脚本文件夹看到update-script文件
2011-6-1720:
36上传
下载附件(12.55KB)
并把update-script用notepad++打开
代码如下:
1.show_progress0.10
2.copy_dirPACKAGE:
systemSYSTEM:
3.run_programPACKAGE:
tasks.sh
4.show_progress0.20
5.
6.
7.
复制代码
如果你懂一点点英文的,其实很简单。
第二行开始,每一行的意思是
2.复制system文件夹并合并
3.运行外置脚本tasks.sh
两个意思...
这个copy_dirPACKAGE:
systemSYSTEM:
是覆盖的意思,在我们打补丁的时候经常用到。
同样办法,拆开我出的美化包,提取升级脚本,得到代码如下:
1.show_progress0.10
2.delete_recursiveSYSTEM:
app
3.delete_recursiveSYSTEM:
framework
4.copy_dirPACKAGE:
systemSYSTEM:
5.show_progress0.20
6.
7.
8.
复制代码
其中多了一句代码delete_recursiveSYSTEM:
app这就是删除的意思了。
一般rom的制作,只需要用到这两句命令,覆盖跟删除。
不过删除要用得谨慎。
因为这是一个文件夹删除的。
b.懂了升级脚本之后,再看外置脚本,tasks.sh
1.#!
/sbin/sh
2.
3.
4.rm/system/app/AmazonKindle.apk
5.rm/system/app/CardioTrainer.apk
6.rm/system/app/esmusica_2_0_0012_embed_Signed_2010-04-13_11-05-17.apk
7.rm/system/app/Facebook.apk
8.rm/system/app/GenieWidget.apk
9.rm/system/app/GOTV_Altitude.apk
10.rm/system/app/GreekIME.apk
11.rm/system/app/hiphopofficial_2_0_0012_embed_Signed_2010-04-13_11-08-31.apk
12.rm/system/app/LatinIME.apk
13.rm/system/app/MySpace.apk
14.rm/system/app/Quickoffice_BasicViewer_2.0.61.apk
15.rm/system/app/revolver_2_0_0012_embed_Signed_2010-04-13_11-07-08.apk
16.rm/system/app/ScreenReader.apk
17.rm/system/app/Swype.apk
18.rm/system/app/truecountry_2_0_0012_embed_Signed_2010-04-13_11-06-12.apk
19.rm/system/app/YouTube.apk
20.rm/system/app/ZoomService.apk
21.rm/system/lib/libSwypeCore.so
22.
复制代码
显然,这是一个精简的脚本,rm就是删除的意思...大家可以参考这个脚本,制作出自己需要的精简脚本...
最新发现,sh脚本是支持支持通配符*的!
!
!
大家可以试一试...精简需谨慎!
c.最后再看系统文件夹~
2011-6-1720:
36上传
下载附件(28.87KB)
如同上一节所讲的system结构一模一样,不再累述,同样可以提取跟精简app文件夹已达到精简的目的...还可以把apk复制到app这个文件夹,达到绑定应用程序的目的...
学会以上,你已经是一个Rom的修改者了!
!
3.amend与edify
本帖隐藏的内容
上一节说到,V大的包包结构,是rom中最简单的,为amend脚本。
然而最近新出的recovery都只支持edify脚本,而CM7以及O大的包包都是edify脚本。
有什么办法让所有recovery支持你的rom呢?
这一节将会向你讲述amend与edify异同以及一键转化的方法。
首先是学会鉴别两种脚本,如果你打开脚本文件夹发现update-binary文件,证明这个脚本是edify,否则为amend。
学会简单判别之后,看上一节所说的amend脚本
1.show_progress0.10
2.delete_recursiveSYSTEM:
app
3.delete_recursiveSYSTEM:
framework
4.copy_dirPACKAGE:
systemSYSTEM:
5.show_progress0.20
复制代码
只有几行,把它转化为edify之后
1.ui_print("Scriptgeneratedbyamend2edifyv1.0.1.0.");
2.ui_print("***********************************************");
3.ui_print("PerformingUpdate...");
4.ui_print("Mountingmountpoints...");
5.run_program("/sbin/mount","/dev/block/stl9","/system");
6.run_program("/sbin/mount","/dev/block/stl10","/data");
7.run_program("/sbin/mount","/dev/block/stl11","/cache");
8.show_progress(0.1,0);
9.delete_recursive("/system/app");
10.delete_recursive("/system/framework");
11.package_extract_dir("system","/system");
12.show_progress(0.2,0);
13.ui_print("Unmountingmountpoints...");
14.run_program("/sbin/umount","/system");
15.run_program("/sbin/umount","/data");
16.run_program("/sbin/umount","/cache");
17.ui_print("UpdateComplete.");
复制代码
其中ui_print部分只是控制屏幕输出,可以忽略,甚至可以删除。
就这段脚本而言,其实就分别添加了加载,和卸载分区两段命令。
显然edify结构要比amend复杂,但是子要你细心比对,就能把他们联系上。
不过这一贴的重点,不是讲述他们的异同,教大家转化脚本。
这里要感谢XDA的大神做出了一键转化的工具,我搬运到此并以此牟利。
。
。
嘿嘿。
。
。
3个金币。
。
。
让所有recovery支持V大的包包。
亲测可行。
但并不对此造成的后果负责。
amend2edify_v1.0.1.0.zip(877.06KB,下载次数:
1261,售价:
3金币)
2011-6-1818:
51上传
点击文件名下载附件
售价:
3金币[记录][购买]
下载积分:
金币-2
这个软件的使用方法非常简单。
2011-6-1818:
53上传
下载附件(22.79KB)
打开文件之后可以直接转化,按save即将完成自动转化,然后你可以用最新的recovery升级V大的包包了~
注意!
!
!
如果点上签名选项可以直接制作升级包。
假设转换之后的包包不能修改了...提示压缩包损坏的话...先把所有文件解压出来,重新打包成zip文件,然后用本软件的签名功能签名...之后就随意修改了...(签名后脚本文件处会多出个updater-script文件)
谢谢大家!
撒花~!
第3章deodex
第1节deodex的一般步骤
本帖隐藏的内容
这一章内容还是比较简单,但是操作需要谨慎。
如果手贱,变砖是很容易的。
例子就不举了,怕真有人手贱。
本章内容大多数取自eric8810大大的deodex教程,写在这里只是想形成一个完整的知识体系。
另外有若干个小提醒小经验是本人总结的。
注意这些细节会让你事半功倍!
进入正题,deodex大家应该都不陌生了,一部分apk是odex样式的,odex是整个apk的核心部分,负责功能实现,deodex就是把odex文件以classes.dex的形式和apk整合成一个文件。
以方便编译与反编译。
jar的deodex原理也一样。
下面章节教的所有美化知识,都要在deodex的条件下完成,因此,这一步是所有美化的初步。
如何deodex,这本来应该是个繁琐的工作,但只要工具要到位了,就变得很简单。
下载第一章提供的xultimate,并解压到一个相对简单的目录里面,方便使用。
以下是deodex的一般步骤:
1.root手机,打开usb调试并连接usb...
2.打开工具目录中的main.exe得到如下界面,升级选no。
2011-6-2315:
22上传
下载附件(39.46KB)
3.进入到程序主界面
2011-6-2315:
22上传
下载附件(88.62KB)
解释一下上面各个选项:
1.把手机中的system/app目录复制到该目录下并保存为origi_app2.复制framework目录并保存为origi_frame目录3.deodexorigi_app目录中的所有文件并保存为done_app4.deodexorigi_frame目录中的所有文件并保存为done_frame5.1-4依次完成1次
一般而言,选5没问题,遇到特殊情况下面会讲述如何处理。
4.点5后,或者点deodex的选项后会出现如下界面,这期间你基本不用想做什么了,乖乖等吧。
logo自动弹出
2011-6-2315:
22上传
下载附件(72.32KB)
5.如果平安无事,就会出现成功的提示
2011-6-2315:
22上传
下载附件(11.27KB)
6.但是也会出现失败的情况,如图
2011-6-2315:
22上传
下载附件(67.97KB)
遇到这种情况,把其他deodex完回来单独deodex,如果还是不行,唯有从其他包包中提取该文件。
7.假设如果已经完全deodex无意外,你会得到以done开头的两个文件夹,把它们复制到sd卡根目录处。
分别是done_app与done_frame。
8.然后打开cmd输入如下命令:
2011-6-2315:
22上传
下载附件(56.07KB)
如图,根据注解进入adbshell之后依次输入以下命令:
1.su
2.stop
3.mount-orw,remount-text3/dev/block/mmcblk1p21/system
4.cp/sdcard/done_app/*/system/app/
5.cp/sdcard/done_frame/*/system/framework/
6.rm/system/app/*.odex
7.rm/system/framework/*.odex
8.mount-oro,remount-text3/dev/block/mmcblk1p21/system
9.reboot
复制代码
第一条输入后,手机端会提示root权限获取,点允许才可以继续。
stop是冻结屏幕,之后就不能对屏幕进行任何操作了。
倒数第二步经常会提示没有回响,直接跳到reboot,没有任何影响。
reboot之后你的手机已经成功deodex了,第一次启动需要很长很长很长的时间。
请耐心等候。
如果上面那步出现了错误,会造成无限重启。
如果出现这种情况,建议重刷底包了。
可以用bootmenu解决,但是难度貌似比较大。
不适合菜鸟折腾。
重要提示:
A.一定要确保你deodex之后的文件是齐全的,不然很可能卡M。
具体只要中途不提示错误,就不会有问题了。
一定不要忘了把两个done文件夹(done_app与done_frame)复制到sd卡根目录
B.遇到错误时可以把错误的文件单独保存好,另外把已经deodex的apk/jar文件也存到另外的地方,因为再次deodex会清空done文件夹。
C.再次deodex的时候可以把已经deodex的文件删除,这样可以加快速度,当然,上述B步骤要做好。
D.常见会deodex失败的文件有MyPhonebook和SyncMLTmo,当然不排除有特例。
比方说,刚才deodex的UK177的gallery3D就deodex失败了。
这时候需要到其他相近的包包里面提取,再deodex。
祝你好运!
第一小节更新完毕。
第2节免刷底包deodex技巧
本帖隐藏的内容
这一小节几行字就能完事儿了,按照以上deodex的步骤,你需要先刷入底包,再刷入汉化包,然后提取文件才能deodex。
最后还要覆盖。
这样会耗费你很多的时间。
通过第二章的学习,你懂得了zip升级包的升级原理,就是覆盖。
你同时懂的了解包sbf,那么,你完全可以不刷底包,直接从底包里面提取app和framework目录,然后用zip里面相应的文件夹对其进行覆盖。
然后连接手机,把上述两个已经覆盖好的文件夹放到xultimate的目录下,并命名为origi_app,和origi_frame,依次选3,和4两个选项,分别进行deodex。
这步完成之后,你甚至可以把你deodex的文件覆盖到sbf解包而来的目录下,手工删除odex文件,然后复制到zip文件夹进行升级。
联系第二章的知识,你可以不用刷入底包,也可以制作属于自己的deodex包包了。
甚至可以对其进行美化,修改与精简。
第三章更新完毕!
第四章反编译教程
第1节反编译的目的
本帖隐藏的内容
为什么要反编译apk呢?
我们从上面说了deodex的概念,其实apk(已经deodex的)是一个压缩包。
里面包含若干个文件,其中有些文件可以直接解压得到,然而有些重要的文件却不能解压得到。
至少不能再windows用rar解压得到。
为了得到,并修改这些文件,我们需要反编译。
先解开一个apk来看,我把北欧1.26fix的framework-res.apk作为示例,并命名为sample.apk。
首先把apk文件重命名为zip文件。
用rar打开看其结构如下
2011-6-2316:
18上传
下载附件(89.43KB)
然后把它解压你会发现打开res文件夹结构如下:
2011-6-2316:
18上传
下载附件(26.32KB)
纠错:
AndroidManifest.xml这个不是签名文件,这个文件定义了一个程序的大部分信息,比如程序的包名:
com.tencetn.qq,这个是QQ的包名,还有其他一些参数,activity,软件的图标等等,而并不是签名文件
不要以为很多,当我们反编译成功之后,res文件夹的结构如下:
2011-6-2316:
18上传
下载附件(220.42KB)
很多吧。
。
。
==但是resource文件在反编译之后已经不见了,分散到各个文件夹中去。
其中,xml文件反编译前后的表示方式也会不一样。
反编译后xml文件可以直接被我们读懂还有修改。
举个例子。
下面是反编译后的battery.xml文件
1.
xmlversion="1.0"encoding="utf-8"?
>
2.3.xmlns:
android="
4.drawable="@drawable/stat_sys_battery_0"android:
maxLevel="2"/>
5.drawable="@drawable/stat_sys_battery_5"android:
maxLevel="7"/>
6.drawable="@drawable/stat_sys_battery_15"android:
maxLevel="15"/>
7.drawable="@drawable/stat_sys_battery_20"android:
maxLevel="25"/>
8.drawable="@drawable/stat_sys_battery_30"android:
maxLevel="35"/>
9.drawable="@drawable/stat_sys_battery_40"android:
maxLevel="45"/>
10.drawable="@drawable/stat_sys_battery_50"android:
maxLevel="55"/>
11.drawable="@drawable/stat_sys_battery_60"android:
maxLevel="65"/>
12.drawable="@drawable/stat_sys_battery_70"android:
maxLevel="75"/>
13.drawable="@drawabl