Android应用程序破解(反编译)
一、apktools进行反编译
1.首先安装需要JAVA环境(JDK和JRE)
设置JAVA环境变量
CLASSPATH %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
JAVA_HOME C:\Program Files\Java\jdk1.8.0_20
Path %JAVA_HOME%\bin;C:\Program Files\Java\jre1.8.0_20\bin
2.下载apktools并解压
(1)下载apktool_2.0.0rc4.jar和apktool-install-windows-r04-brut1.tar.bz2
地址:http://code.google.com/p/android-apktool/downloads/list
(2)把两个文件都解压放在同一个目录,共三个文件
aapt.exe
apktool.bat
apktool.jar
其中,apktool.jar用于解包,apktool.jar和aapt.exe联合用于打包。
(3)点击开始菜单。运行,输入CMD回车,用cd命令转到刚刚解压apktool-install-windows所在的文件夹,输入apktool,出现一些命令说明即成功安装。当然,我们也可以将三个文件直接放在C盘的Windows目录,就可以直接使用apktool。
3.apktools使用方法
(1)反编译与打包命令
反编译命令:usage: apktool d[ecode] [options] <file_apk>
-f,--force Force delete destination directory.
-o,--output <dir> The name of folder that gets written. Default is apk.ou t
-p,--frame-path <dir> Uses framework files located in <dir>.
-r,--no-res Do not decode resources.
-s,--no-src Do not decode sources.
-t,--frame-tag <tag> Uses framework files tagged by <tag>.
打包命令:usage: apktool b[uild] [options] <app_path>
-f,--force-all Skip changes detection and build all files.
-o,--output <dir> The name of apk that gets written. Default is dist/name .apk
(2)将apk应用存放到当前目录(这里假设为D盘根目录),反编译
然后,在当前目录看到反编译的文件夹"2015"
二、apktools进行重新打包
当我们对破解后的apk修改后,可以重新打包回APK文件,执行命令:apktool b <decode_dir>
,然后我们在当前目录下看到打包好的APK。由于apk还没有签名,一般是无法安装的。此时,可以通过keytool工具生成证书(.keystore文件),最后使用jarsigner工具对apk应用进行签名即可。
具体步骤如下:
1.使用apktool重写打包成apk
将破解后修改的应用源码重写打包回apk,主要使用aapt.exe 、apktool.jar 两个工具。需要注意的是,最好是从谷歌官方网站下载最新版的aapt.exe(也可从Android SDK的build-tools目录下拷贝)和apktool工具。
2.使用keytool工具生成签名证书
keytool -genkey -v -keystore 2015.keystore-alias 2015.keystore -keyalg RSA -validity 20000
说明:
1)keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中;
2)-keystore 2015.keystore 表示生成的数字证书的文件名为“2015.keystore”;
3)-alias 2015.keystore 表示证书的别名为“2015.keystore”,当然可以不和上面的文件名一样;
4)-keyalg RSA 表示生成密钥文件所采用的算法为RSA;
5)-validity 20000 表示该数字证书的有效期为20000天,意味着20000天之后该证书将失效
在执行上面的命令生成数字证书文件时,会提示你输入一些信息,包括证书的密码,示例如下:
注:执行命令成功,系统会在当前目录(C:\Users\jiangdongguo)生成一个"2015.keystore"的证书。
3.使用jarsigner工具为Android应用程序签名
jarsigner -verbose -keystore 2015.keystore -signedjar2015_signed.apk 2015.apk 2015.keystore
说明:
1)jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中;
2)-keystore 2015.keystore 表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下;
3)-signedjar 2015_signed.apk 2015.apk 表示给notepad.apk文件签名,签名后的文件名称为2015_signed.apk;
4)最后面的2015.keystore 表示证书的别名,对应于生成数字证书时-alias参数后面的名称
注释:keytool工具:该工具位于jdk安装路径的bin目录下;
jarsigner工具:该工具位于jdk安装路径的bin目录下;
1.关于安装和管理framework文件
1. $ apktool d HtcContacts.apk
2. I: Loading resource table...
3. I: Decoding resources...
4. I: Loading resource table from file: /home/brutall/apktool/framework/1.apk
5. W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542
6. ...
7. W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520
8. Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
...
...
...
W: Could not decode attr value, using undecoded value instead: ns=android, name=hardwareAccelerated, value=0xffffffff
...
原因:C:\Users\jiangdongguo\apktool\framework\1.apk版本过低。在使用apktool进行反编译前不需要做其他的事情,然而由于有的厂商,如HTC,三星等,他们定制了framework文件并且在他们的系统应用中使用了这些文件,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件并且安装到apktool中。
解决方案:
这里假设framwork-res.apk文件都放在d盘根目录
2.出现public.xml资源没有定义错误
原因:
其实在编译过程中会遇到很多其他的问题,大多数是由于删除、修改、添加了资源后,没有对应的修改res\values\public.xml文件而造成的。
解决方案
(1)public.xml文件中的资源不能重复定义。
(2)public.xml文件中的任意两个资源的ID不能一样
(3)public.xml文件中定义的资源必须能找到该文件(如果你删除了一些文件,必须要对应的删除public.xml中的该行)
(4)public.xml文件中尽可能全面(如果你添加了某资源,最好确保在public.xml中也添加)
(5)public.xml文件中的资源的ID尽可能连续(当你为添加的文件添加声明时,赋予的ID尽可能是连续的)
总结:很多时候都是因为apktool版本过低导致的错误,为此我们需要去谷歌官网下载最新版的apktool和aapt.exe工具,然后直接放在系统盘(C)的Windows目录下即可。
参考:
http://blog.csdn.net/lyq8479/article/details/6401093
http://www.cnblogs.com/CuriosityWzk/archive/2012/01/06/2315150.html