Ubuntu下Android APK反编译与重新编译
1.反编译APK文件
反编译APK需要利用ApkTool工具,下载地址
https://bitbucket.org/iBotPeaches/apktool/downloads
http://ibotpeaches.github.io/Apktool/install/
1,按照安装说明,先右键下载apktool的脚本,再下载最新的apktool
2,先确保你的系统安装了32位平台(依赖)库,如果你ubuntu是13.10后版本,可以试试
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
3,将下载的apktool_2.0.0.jar改名为apktool.jar
4,将两个文件拷贝到/usr/local/bin目录,这一步相当于配置环境变量了,可以在任意目录运行
sudo cp -i apktool.jar /usr/local/bin
sudo cp -i apktool /usr/local/bin
5,添加权限
sudo chmod +x apktool
sudo chmod +x apktool.jar
上面几步完成后就可以找个APK 反编译下了
命令:apktool d (apk路径) -o(输出文件夹)
注意:一定要加 -o这个参数,否则命令报错
反编译成功后就会在outdir目录下生成一系列目录,我们可以通过修改smali文件代码实现apk的修改。
通常做法是在res资源目录获取到某资源的索引值,然后在smali目录中搜索含有该索引的.smali文件
grep -r 0x7f0c004e /home/lionel/outdir/smali/*
该命令是在指定目录下遍历文件和子文件夹中包含 ‘0x7f0c004e'的文件
2.重新打包APK文件
apktool b /home/lionel/outdir
编译指定目录下文件
,默认生成的
apk
在同目录的
dist
文件夹中
但现在还不能安装在手机里
,新生成的
apk
需要签名
keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000
keytool -genkey -v -keystore (生成的密钥名称) -alias (密钥别名) -keyalg RSA -validity (有效期)
jarsigner -verbose -keystore android.keystore -signedjar /home/lionel/outdir/MobilesSafe.apk /home/lionel/outdir/dist/MobilesSafe.apk android
jarsigner -verbose -keystore (上面生成的密钥名称) -signedjar (签名后的APK路径) (签名前的APK路径) (密钥android.keystore的别名)
签名后发现安装时仍提示INSTALL_PARSE_FAILED_NO_CERTIFICATES
解决方法:添加参数-digestalg SHA1 -sigalg MD5withRSA
jarsigner -digestalg SHA1 -sigalg MD5withRSA -verbose -keystore android.keystore -signedjar /home/lionel/outdir/MobilesSafe.apk /home/lionel/outdir/dist/MobilesSafe.apk android
安装成功!