Android的apk包,其实就是zip包,只不过后缀名换了而已!使用“好压”等解压缩工具解压,就可以看到里面的内容了。简单介绍一下吧。

以下就是解压出来的apk的内容:


其中:

assets                 对应工程目录下的 assets目录,存放附加资源。

lib                    对应工程目录下的 lib目录,存放程序引用库。

META-INF               存放apk签名信息。

res                    对应工程目录下的res目录,存放程序资源,如图片等

AndroidManifest.xml    程序的声明文件,包括SDK版本、Activity声明,权限声明等。

classes.dex            java字节码,即代码文件。

resources.arsc         资源标识文件,存放字符串等内容。

关于反编译的方法,百度一搜就一大堆,这个我就不多说了!

附上几个链接吧:

1、Android APK反编译详解(附图)

http://blog.csdn.net/sunboy_2050/article/details/6727581

2、真正强大的APK反编译工具 DoAPK 1.0 发布!图形化操作,有图有真相

http://bbs.hiapk.com/thread-1226617-1-1.html

第1种方法,

通过使用“dex2jar”工具,

把“classes.dex”文件转换为“classes.dex.dex2jar.jar”,

然后再使用“JD-GUI”工具直接打开“classes.dex.dex2jar.jar”文件,

就可以看到详细的Java代码了。

通常会有3种情况:

1、如果开发者没有使用代码混淆的话,那么,你将看到100%的源代码。

2、如果开发者加入了代码混淆的话,那么,你将看到a,b,c,d之类的名字的代码。

3、还有一种情况是,你什么都看不到。这也是我写这篇文章的重点所在。

针对这个问题,我在网上搜索了三天,均没有任何相关的解决方法。

今天早上,偶尔看到有人说是系统问题,在win7下无法查看,但在xp下又可以查看。

于是,我就试着用虚拟机的windows 2003系统看看,结果,还是不行。

后来,仔细一想,怀疑是dex2jar工具版本有问题

于是在2003我安装了新的dex2jar,版本为0.9.8

结果,真的可以看到JAVA代码了。

下图是使用dex2jar 0.9.8的效果:

下图是dex2jar 0.7.0的效果:

由此可知:

有的apk无法反编译,是因为dex2jar的版本太低了!

建议:

在使用dex2jar工具的时候,最好使用最新版,以确保反编译的成功。

后来补充:

有些朋友喜欢使用apktool来进行反编译,操作过程中经常会出现各种问题,无法顺利反编译。

一般来说,这种APK在发布的时候动了手脚(比如加壳、增加特殊代码让apktool出异常……)

解决方法是,

1、首先确保apktool用了最新版本;

2、然后看看apktool出了什么错误,打开apktool.jar,定位到具体代码查看原因

这种情况比较复杂,也比较麻烦,有兴趣的朋友可以去“看雪论坛”多看看。

首先说APK反编译个人经验,2.0之后的APKTOOL(目前任何一款反编译工具都是基于APKTOOL)需要JDK1.8以上的兼容性。第二点,APK的路径是否包含中文,或空格。最好在磁盘盘符根目录下反编译编译。第三点,可以试着删除错误提示中的字行,重新编译。还有就是升级APKTOOL.JAR文件。

最新解决,apktool用的是apktool_2.0.0rc3.jar解决了这个问题,谢谢

apktool反编译时经常会出现下面的信息
 

1.Input file  was not found or was not readable.

2.Destination directory (C:\Users\user\a) already exists. Use -f switch if you want to overwrite it.
3.Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars c fil..........
 
解决方案:
1和2是因为apktool升级到2.0以上时,使用方式已经替换,格式为:apktool d [-s] -f <apkPath> -o <folderPath>,参数具体的意思可以直接打apktool回车(windows)查看帮助
3是因为apktool版本过低导致,请升级到最新版本,地址:https://bitbucket.org/iBotPeaches/apktool/downloads,我使用的apktool是2.0版本,生成的xml文件没有乱码。

关于有的Apk无法反编译的探究的更多相关文章

  1. android apk 防止反编译技术第四篇-对抗JD-GUI

    又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...

  2. 转: android apk 防止反编译技术(1~5连载)

    转: android apk 防止反编译技术 做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习. ...

  3. android apk 防止反编译技术第一篇-加壳技术

    做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习.现在将最近学习成果做一下整理总结.学习的这些成 ...

  4. 获取Android自己写好了的apk以及反编译

    今天,我们先说一下,获取Android自带的apk以及反编译它们来学习Android工程师是怎样写的,今天我们就以拿到Android自带的短信管理器的apk为例子 你可能有疑问,为什么要那么麻烦,从系 ...

  5. Android Apk的反编译和加密

    这几天在上海出差,忙里偷闲学习了一下Apk的反编译工具的基本使用.下面就简单介绍一下如何将我们从网上下载的Apk文件进行反编译得到我们想要获得的资源文件和源码. Android的应用程序APK文件说到 ...

  6. Android开发:APK的反编译(获取代码和资源文件)

    一.反编译工具: 1.APKTool: APKTool是由GOOGLE提供的APK编译工具,能够完成反编译及回编译apk的工作.同时,它也有着安装反编译系统apk所需要的framework-res框架 ...

  7. Android测试(三)——APK文件反编译

    APK文件反编译: 在进行反编译操作前,先简单介绍下smali文件: smali是一种文件格式,语法和Jasmine的语言类似,这些smali文件包含开发应用程序时编写的java类的代码. 工具:ja ...

  8. APK防反编译技术

    APK防反编译技术 下载地址:地址 我们的APK实际上就是一个ZIP压缩文件,里面包括有一个classes.dex.我们编译后生成的程序代码就所有在那里了, 通过apktool等工具能够轻松地将它们反 ...

  9. android apk 防止反编译技术第二篇-运行时修改字节码

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

随机推荐

  1. Maven学习总结(24)——Maven版本管理详解

    Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习.而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定. 一.如何衡量项目 ...

  2. 兴趣爱好-QQ的本地共享

    QQ这个本地共享简直了,不就实现了公网FTP的功能么?好方便啊,有啥文件共享给好友就直接放在本地就可以了,真好用

  3. sigprocmask和信号阻塞

    注意阻塞和忽略,是有区别的. 阻塞只是暂时的,忽略是就没了. 参数:how:用于指定信号修改的方式,可能选择有三种:SIG_BLOCK //加入信号到进程屏蔽.SIG_UNBLOCK //从进程屏蔽里 ...

  4. Keil5.15版本号

    Keil5.15下载地址 http://pan.baidu.com/s/1kT6AGvX Keil5.15软件补丁下载地址 http://www.keil.com/dd2/pack/ Keil5.15 ...

  5. 手写一个节点大小平衡树(SBT)模板,留着用

    看了一下午,感觉有了些了解.应该没有错,有错希望斧正,感谢 #include<stdio.h> #include<string.h> struct s { int key,le ...

  6. mysql的查询练习1

    1.多表查询

  7. POJ2449题解

    先讲一个为了少打一些代码而滥用继承终于接受慘痛教训的故事. #include <cstdio> #include <algorithm> #include <queue& ...

  8. JAVA设计模式之【策略模式】

    策略模式 定义一些独立的类来封装不同的算法 类似于common方法或者引用类 角色 环境类Context 抽象策略Strategy 具体策略ConcreteStrategy 重构伴随着设计模式 重构类 ...

  9. 一个比NPM更快更安全可靠的JavaScript包管理工具——Yarn

    yarn安装: npm intall -g yarn 查看安装是否成功: yarn -v yarn常用的命令以及和npm的对照如下: 更详细的请查看官方文档

  10. xBIM 基础16 IFC的空间层次结构

    系列目录    [已更新最新开发文章,点击查看详细]  本篇介绍如何从文件中检索空间结构.IFC中的空间结构表示层次结构的嵌套结构,表示项目,站点,建筑物,楼层和空间.如果您查看IFC文档, 您会发现 ...