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

  1. 使用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 分析 我没有听完 如果有反解相关的也可以参考

可能用到的工具