本文主要介绍如何反编译Android应用程序查看源代码、资源文件和xml文件以及修改后重新打包成APK。鼓励大家反编译去学习他人的设计而不是将应用换壳后混乱市场。也可以直接使用网友整理的anti-droid.

Android APK实际就是个Zip文件,可以解压缩后反编译查看源代码和资源文件。以下以微信为例:

我们可以右击APK文件,”打开方式”选择Winrar压缩文件管理器,截图如下:


是不是跟程序的目录结构很像,源码已经被压缩在了classes.dex文件中。这里我们可以直接查看res下面的图片文件,但对于源代码无法查看,AndroidManifest.xml清单等xml文件打开也是乱码。

需要用到的工具包下载地址(截止2013-03-14最新),包括dex2jar、jd-gui、apktool。也可以在下面需要时分别下载最新。
1、 查看源码
(1) 修改待反编译文件后缀.apk为.zip后用winrar解压,记录classes.dex的路径。
(2)使用工具包中的android-reverse-trinea\dex2jar-0.0.9.13或下载最新的dex2jar后解压,在命令行运行

dex2jar classes.dex的路径
1 dex2jar classes . dex的路径

如下:

如下:


结果会在classes.dex所在目录下生成classes_dex2jar.jar,用jd-gui.exe(使用工具包中jd-gui或下载最新)打开此文件,如下:

从中我们可以大致了解代码结构,虽然源码经过proguard混淆后可读性很差,但还是可以通过关键字(不可混淆的类名等)查找获取到一定的信息。不过jd-gui无法通过源码查找,只支持查找类型、构造函数、常量、属性、方法。

2、查看资源文件和xml文件
(1)使用工具包中的android-reverse-trinea\apktool-1.5.2-windows或下载最新的apktool(需同时下载apktool及对应平台的依赖包,解压后将平台依赖包中的apktool.jar复制到apktool目录下),在命令行运行

apktool.bat d -f xxx.apk xxx
1 apktool . bat d - f xxx . apk xxx

其中d表示解包,xxx.apk为待反编译apk路径,xxx为目标文件夹名,(apktool不支持中文目录),如下:

结果会再apktool.bat所在目录下生成weixin文件夹,现在就可以正确的查看xml资源(包括res下的所有资源,如点9图片、drawable、layout、value、menu等等)了,比如AndroidManifest.xml

3、修改后重新打包成APK

依然使用步骤2中的apktool,命令如下

apktool.bat b xxx
1 apktool . bat b xxx

其中b表示build,xxx表示步骤2中解包出来的文件夹,我们可以对某一文件进行修改,重新打包
打包完成后会在xxx目录下生成build和dist两个文件夹,dist存放重新生成的APK,build存放该APK的具体组成信息。
这里我们可以简单的替换资源也可以通过修改smali完成代码的修改,别做坏事哦^_*。



原文:http://www.trinea.cn/android/


更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. 【移动开发】Android应用开发者应该知道的东西
  6. 第3.3.4节 创建高级图形之RenderScript(二)
  7. 自定义ContentProvider
  8. 解决IE apk变成zip:Android(安卓)手机应用程序文件下载服务器 配
  9. 基于Android(安卓)Studio的Android(安卓)app开发环境搭建

随机推荐

  1. SQL SERVER 自增列
  2. sql 多表连接查询
  3. sqlserver 系统存储过程 中文说明
  4. 分页查询 效率最高
  5. SQL Server 不存在或访问被拒绝(转)
  6. Java 实现连接sql server 2000
  7. sql 多条件组合查询,并根据指定类别找出所
  8. sql 随机抽取几条数据的方法 推荐
  9. 对有insert触发器表取IDENTITY值时发现的
  10. SQL SERVER 查询正在实行的SQL语句