继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

反编译的常用工具与使用方法

饮歌长啸
关注TA
已关注
手记 188
粉丝 46
获赞 152

反编译就是逆向工程(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包元数据, 也包含应用签名.

安装应用

1
adb install -r ~/Desktop/Pedometer.apk

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

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

1
adb shell pm list packages -f

导出手机中的apk

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


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

获取apk信息

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


获取二进制xml信息

1
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包

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


压缩dex为apk

1
zip -r my.apk classes.dex


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


apktool

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

1
2
3
4
5
6
7
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]


添加apk签名

1
2
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创建图标. 

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

1
<string name="action_common_skip_wcl">CLWang</string>

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

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

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

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


androguard

源码下载.

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


逆向工程的基本工具, aapt\dex2jar\apktool\androguard都已经介绍了, 根据需求选择好用的工具吧.

原文链接:http://www.apkbus.com/blog-705730-60330.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP