反编译的常用工具与使用方法
2016-03-23 11:21
411 查看
http://www.wangchenlong.org/2016/03/19/1602/reverse-analyze-apk/
反编译就是逆向工程(Reverse Engineering), 通过解析Apk的内容, 可以验证特性和替换资源. 在批量生成应用时, 使用服务器脚本批量修改Apk, 可以节约人力和时间. 本文介绍逆向工程的常用工具和使用方法. 最新的工具是ClassyShark.
更多: http://www.wangchenlong.org/
apk表示
解压获得apk信息.
应用信息:
AndroidManifest.xml: 二进制清单文件.
classes.dex: Dex格式编译文件.
resources.arsc: 二进制预编译资源文件.
res: 不需编译的资源文件, 一般都是系统的资源文件.
assets: AssetManager检索应用特性.
META-INF: Jar包元数据, 也包含应用签名.
安装应用
查看手机中的所有应用信息
导出手机中的apk
aar类型和apk相似, 在aar中, AndroidManifest是可显示的XML文件, 资源都在res文件夹中, 作为项目的库使用.
aapt表示
在Android SDK的
Android项目的Gradle中, 通过
主要负责apk的编译.
获取apk信息
获取二进制xml信息
dex2jar是dex转换jar的工具,
导入命令行, 还需要使用Java包解析工具JD-GUI.
可以分析Apk的崩溃信息.
配置
改变
即
软链接:
转换apk为jar包
转换过程中, 如果发生内存不够, 修改
使用JD-GUI打开jar包, 资源都被替换为数字.
转换jar包为dex
压缩dex为apk
注意现在的apk是无法安装入手机的, 因为没有签名.
即使签名也会报错. 通过apktool替代打包.
解析apk的第三方工具, 安装方式参考.
配置成功
示例rgb_tool.apk下载, 源码.
解析apk
在
apktool.yml: apk属性.
AndroidManifest.xml: 清单文件, 非二进制.
original: 原始数据, 应用的二进制清单和签名.
res: 资源文件.
smali: dex解析的代码.
smali是dex虚拟机的解析格式, 参考.
在
构建apk. 在
安装时, 会显示未签名.
添加apk签名
使用系统默认签名, 或者添加自己的签名,
颜色
接着, 我们来解析包, 修改一些颜色, 再生成包.
找到系统颜色, 修改
图标
替换应用图标, AndroidAssetStudio创建图标.
替换
图片
替换资源, 把背景图片换了. 替换
资源
替换字符串, 在
在
类似
源码, 下载.
这个是一个命令行处理库, 开发时间很早了, 就不做深入讲解了.
反编译就是逆向工程(Reverse Engineering), 通过解析Apk的内容, 可以验证特性和替换资源. 在批量生成应用时, 使用服务器脚本批量修改Apk, 可以节约人力和时间. 本文介绍逆向工程的常用工具和使用方法. 最新的工具是ClassyShark.
更多: http://www.wangchenlong.org/
apk
apk表示Application PacKage, 是zip文件, 修改后缀名
.apk为
.zip,
解压获得apk信息.
应用信息:
AndroidManifest.xml: 二进制清单文件.
classes.dex: Dex格式编译文件.
resources.arsc: 二进制预编译资源文件.
res: 不需编译的资源文件, 一般都是系统的资源文件.
assets: AssetManager检索应用特性.
META-INF: Jar包元数据, 也包含应用签名.
安装应用
1 | adb install -r ~/Desktop/Pedometer.apk |
-r表示强制安装, 会覆盖当前版本.
查看手机中的所有应用信息
1 | adb shell pm list packages -f |
1 | adb pull -p /data/app/me.chunyu.Pedometer-1/base.apk ~/Desktop/base.apk |
aar类型和apk相似, 在aar中, AndroidManifest是可显示的XML文件, 资源都在res文件夹中, 作为项目的库使用.
aapt
aapt表示Android Assets Packaging Tool, 即Android属性打包工具, 导入命令行.
在Android SDK的
build-tools文件夹中, 如
1 | ANDROID_SDK_HOME/build-tools/23.0.2 |
buildToolsVersion设置版本, 参考,
主要负责apk的编译.
获取apk信息
12 | aapt list base.apk // 内容 aapt dump badging base.apk // 属性 aapt dump permissions base.apk // 权限 aapt dump resources base.apk // 资源 |
1 | aapt dump xmltree base.apk AndroidManifest.xml |
dex2jar
dex2jar是dex转换jar的工具,导入命令行, 还需要使用Java包解析工具JD-GUI.
可以分析Apk的崩溃信息.
配置
d2j-dex2jar.sh命令行:
改变
d2j-dex2jar.sh和
d2j_invoke.sh的权限,
即
chmod 777 xx.sh.
软链接:
ln -s /.../Installations/dex2jar-2.0/d2j-dex2jar.sh d2j-dex2jar.sh.
转换apk为jar包
1 | d2j-dex2jar.sh -f -o classes.jar base.apk |
d2j_invoke.sh的虚拟机配置.
java -Xms512m -Xmx1024m -classpath "${_classpath}" "$@"
使用JD-GUI打开jar包, 资源都被替换为数字.
转换jar包为dex
1 | d2j-jar2dex.sh -f -o classes.dex classes.jar |
1 | zip -r my.apk classes.dex |
即使签名也会报错. 通过apktool替代打包.
apktool
解析apk的第三方工具, 安装方式参考.12 | 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 |
示例rgb_tool.apk下载, 源码.
解析apk
1 | 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文件.
1 | apktool b rgb_tool |
1 | Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] |
12 | 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, 主题粉色.
1 | <color name="primary">#ffff1493</color> |
替换应用图标, AndroidAssetStudio创建图标.
替换
mipmap中
ic_launcher.png.
图片
替换资源, 把背景图片换了. 替换
drawable-xxxhdpi-v4中的
robot.png.
资源
替换字符串, 在
strings.xml创建新的字符串,
1 | <string name="action_common_skip_wcl">CLWang</string> |
res/values/public.xml中替换
action_common_skip为
action_common_skip_wcl.
1 | <public type="string" name="action_common_skip_wcl" id="0x7f070017" /> |
public.xml是资源映射,
smali文件使用,
类似
R.java.
apktool是非常强大的逆向工程工具, 一定要熟练掌握.
androguard
源码, 下载.这个是一个命令行处理库, 开发时间很早了, 就不做深入讲解了.
相关文章推荐
- RandomAccessFile的使用方法和案例分析
- 在windows系统中实现python3安装lxml
- Appium对于xpath 查找元素慢的原因
- Ireport Error retrieving field value from bean : ate045
- 实现app上对csdn的文章查看,以及文章中图片的保存
- EF LinQ增删改查表达式
- Linux中关于JAVA调用C生成的.so动态链接库
- Android攻城狮学习笔记—入门篇二
- 安卓沿Path运动轨迹
- 安装gr_ieee802.11
- 9.UICollectionView增强
- 自动化clickButton的坑
- org.hibernate.HibernateException: createSQLQuery is not valid without active transaction
- 用python实时获取shell命令的输出[rsync备份进度]
- AndroidStudio .gitignore忽略文件
- 225. Implement Stack using Queues
- 先序遍历建立二叉树,求保存最大数字的叶子节点到最小数字的叶子结点的距离 2016网易编程题
- 订单、支付、退款、发货、退货等编号自动生成类
- 一种动态为apk写入信息的方案
- centos64位 安装python mysql-client环境