反编译apk--反编译
1.为什么要反编译?反编译我们可以做什么?
1.1 看到别的app好的效果,却又想不出怎么实现的,反编译查看原作者思路 1.2 对应用不满意想自己修改部分内容/显示效果 1.3 协助解bug
2.如何反编译
2.1 反编译代码
反编译出来java代码,这个过程中资源文件,如layoyt和AndroidManifest.xml都还是乱码
工具
要想将APK文件中的代码反编译出来,我们需要用到以下两款工具: dex2jar 这个工具用于将dex文件转换成jar文件 下载地址:http://sourceforge.net/projects/dex2jar/files/ jd-gui 这个工具用于将jar文件转换成java代码 下载地址:http://jd.benow.ca/
步骤
2.1.1. 解压目标apk得到classes.dex,也有可能多个,按数字序号排列; META-INF就是签名;res就是文件类资源(图片及xml),classes.dex就是代码部分,resources.arsc就是字符串之类的资源。 2.1.2. 进入到dex2jar解压后的目录执行,或者直接把文件拖到d2j-dex2jar.bat上 d2j-dex2jar classes.dex 得到classes-dex2jar.jar
- 使用jd-gui打开classes-dex2jar.jar查看代码
集成工具
android逆向助手 onekey-decompile-apk-1.0.1
2.2 反编译资源
大名鼎鼎的apktool 下载地址:http://ibotpeaches.github.io/Apktool/install/ 下载后重命名去掉版本号放到windows目录 在cmd里执行
apktool d Demo.apk -o targetdir -f
注意:混淆的代码,反编译以后有些显示文件名,有些不显示。 下面是openGapps反编译后的部分代码, AndroidManifest.xml
InstallCard.smali
3.反编译后如何修改
资源
替换字符串 替换图片 更改value
逻辑
4.重新打包
打包
apktool b Demo -o New_Demo.apk
签名
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名
对齐
zipalign 4 New_Demo.apk New_Demo_aligned.apk
_
反编译三方app和系统app的区别
要不把分享跟其他同事调下 准备充分点,邀请其他组的同事也参加 从我们使用最多的入手,比如只反解AndroidManefist,反解apk,查看反解后java的工具,反解后只有smali的简单读code。
高阶的smali增加调试 可以放到下一次进阶 分享 上次旭可分享的第三方bug 分析 我没有听完 如果有反解相关的也可以参考
可能用到的工具