转载

安卓应用APK反编译的常用工具与使用方法

反编译就是逆向工程(Reverse Engineering), 通过解析Apk的内容, 可以验证特性和替换资源. 在批量生成应用时, 使用服务器脚本批量修改Apk, 可以节约人力和时间.

本文介绍逆向工程的常用工具和使用方法. 最新的工具是ClassyShark.

apk

apk表示 Application PacKage , 是zip文件, 修改后缀名 .apk.zip , 解压获得apk信息.

应用信息:

AndroidManifest.xml: 二进制清单文件. classes.dex: Dex格式编译文件. resources.arsc: 二进制预编译资源文件. res: 不需编译的资源文件, 一般都是系统的资源文件. assets: AssetManager检索应用特性. META-INF: Jar包元数据, 也包含应用签名.

安卓应用APK反编译的常用工具与使用方法

安装应用

adb install -r ~/Desktop/Pedometer.apk 

-r 表示强制安装, 会覆盖当前版本.

查看手机中的所有应用信息

adb shell pm list packages -f 

导出手机中的apk

adb pull -p /data/app/me.chunyu.Pedometer-1/base.apk ~/Desktop/base.apk 

安卓应用APK反编译的常用工具与使用方法

aar类型和apk相似, 在aar中, AndroidManifest是可显示的XML文件, 资源都在res文件夹中, 作为项目的库使用.

aapt

aapt表示 Android Assets Packaging Tool , 即Android属性打包工具, 导入命令行.

在Android SDK的 build-tools 文件夹中, 如

ANDROID_SDK_HOME/build-tools/23.0.2 

Android项目的Gradle中, 通过 buildToolsVersion 设置版本, 参考 , 主要负责apk的编译.

获取apk信息

aapt list base.apk // 内容 aapt dump badging base.apk // 属性 aapt dump permissions base.apk // 权限 aapt dump resources base.apk // 资源 

获取二进制xml信息

aapt dump xmltree base.apk AndroidManifest.xml 

dex2jar

dex2jar 是dex转换jar的工具, 导入命令行, 还需要使用Java包解析工具 JD-GUI . 可以分析Apk的崩溃信息.

配置 d2j-dex2jar.sh 命令行:

改变 d2j-dex2jar.shd2j_invoke.sh 的权限, 即 chmod 777 xx.sh .

软链接: ln -s /.../Installations/dex2jar-2.0/d2j-dex2jar.sh d2j-dex2jar.sh .

转换apk为jar包

d2j-dex2jar.sh -f -o classes.jar base.apk 

转换过程中, 如果发生内存不够, 修改 d2j_invoke.sh 的虚拟机配置.

java -Xms512m -Xmx1024m -classpath "${_classpath}" "$@"

使用JD-GUI打开jar包, 资源都被替换为数字.

安卓应用APK反编译的常用工具与使用方法

转换jar包为dex

d2j-jar2dex.sh -f -o classes.dex classes.jar 

压缩dex为apk

zip -r my.apk classes.dex 

注意现在的apk是无法安装入手机的, 因为没有签名.即使签名也会报错. 通过apktool替代打包.

apktool

解析apk的第三方工具, 安装方式 参考 .

Mac OS X: 1. Download Mac wrapper script (Right click, Save Link As apktool) 2. Download apktool-2 (find newest here) 3. Rename downloaded jar to apktool.jar 4. Move both files (apktool.jar & apktool) to /usr/local/bin (root needed) 5. Make sure both files are executable (chmod +x) 6. Try running apktool via cli 

配置成功

安卓应用APK反编译的常用工具与使用方法

示例rgb_tool.apk 下载 , 源码 .

解析apk

apktool d rgb_tool.apk 

rgb_tool 文件夹, 内容:

apktool.yml: apk属性.

AndroidManifest.xml: 清单文件, 非二进制.

original: 原始数据, 应用的二进制清单和签名.

res: 资源文件.

smali: dex解析的代码.

smali是dex虚拟机的解析格式, 参考 . 在 dex2jar 中, 也包含smali格式的转换.

构建apk. 在 rgb_tool/rgb_tool/dist 中生成apk文件.

apktool b rgb_tool 

安装时, 会显示未签名.

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 

添加apk签名

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -signedjar rgb_tool.apk rgb_tool.apk androiddebugkey zipalign -v -f 4 rgb_tool.apk rgb_tool_align.apk 

使用系统默认签名, 或者添加自己的签名, zipalign 用于对齐应用, 建议使用. 参考 .

颜色

接着, 我们来解析包, 修改一些颜色, 再生成包.

找到系统颜色, 修改 rgb_tool/res/values/colors.xml , 主题粉色.

<color name="primary">#ffff1493color> 

图标

替换应用图标, AndroidAssetStudio 创建图标. 替换 mipmapic_launcher.png .

安卓应用APK反编译的常用工具与使用方法

图片

替换资源, 把背景图片换了. 替换 drawable-xxxhdpi-v4 中的 robot.png .

安卓应用APK反编译的常用工具与使用方法

资源

替换字符串, 在 strings.xml 创建新的字符串,

<string name="action_common_skip_wcl">CLWangstring> 

res/values/public.xml 中替换 action_common_skipaction_common_skip_wcl .

<public type="string" name="action_common_skip_wcl" id="0x7f070017" /> 

安卓应用APK反编译的常用工具与使用方法

public.xml 是资源映射, smali 文件使用, 类似 R.java .

apktool 是非常强大的逆向工程工具, 一定要熟练掌握.

androguard

源码 , 下载 .

这个是一个命令行处理库, 开发时间很早了, 就不做深入讲解了.

逆向工程的基本工具, aaptdex2jarapktoolandroguard都已经介绍了, 根据需求选择好用的工具吧.OK, that’s all. Enjoy it!

原文  http://www.techug.com/android-apk-decompiler-tools
正文到此结束
Loading...