转自:http://xdang.org/post-602.html

以下原文:

反编译 — 在apk文件中能得到什么

最近在做android客户端与服务器安全通信,有一种常见的不安全因素:很多软件常常会被人从apk文件中获取到下载地址或帐户信息。一个打包成apk的软件,通过反编译可以获得哪些信息呢?下面我们来动手反编译一个简单的demo--HelloWorld。

将生成的HelloWorld.apk使用压缩软件打开,看到下面几个文件/目录

  1. META-INF
  2. res
  3. AndroidManifest.xml
  4. classes.dex
  5. resources.arsc

其中,res中存放着所有的图片文件以及xml文件,也就是在eclipse工程目录中res下面的所有资源。这里的xml文件是经过压缩的,用AXMLPrinter2工具可以打开。

这是反编译出来的AndroidManifest.xml

怎么样,是不是跟源代码一模一样?

resources.arsc文件中保存的是编译后的二进制资源文件,许多做汉化软件的人都是修改该文件内的资源以实现软件的汉化的。

classes.dex是java源码编译生成的字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,.dex文件与.class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。

dex2jar是专为反编译.dex而开发的工具,它可以把.dex文件反编译成为.jar文件。然后用JD-GUI工具将.jar文件反编译成.java文件。

这是反编译出来的MainActivity.xml

下面是源代码:

经过反编译的代码虽然可读性不是很好,但是跟源码几乎没什么差别。在开发时如果你直接将账号等重要信息放到java代码中,那就没有任何安全性可言了。

经过反编译,anroid项目的源码全部暴露无疑,那是不是可以通过反编译将一个android软件改成自己想要的样子?答案是否定的,在META-INF目录下存放的是软件的签名信息,用来保证apk包的完整性和系统的安全。在软件安装时应用管理器会对包里的文件进行校验,如果校验信息与META-INF目录下的信息不一样,系统就会拒绝安装这个软件。另外,专业的编程人员都会把重要信息封装到.so库文件里,这些信息是无法被反编译的。

即使这样,对一个软件进行像汉化这样的操作却是足够了。

Android 解读.apk解压后文件详细说明的更多相关文章

  1. android反编译查看源码,apk解压后XML乱码解决

    1:找了好几个软件都不能图形化的解决反编译,很不舒服,最后找了个还算顺手的,顺便保存下. 2:使用过程 <1> apk转jar apktoolkit工具 <2> 查看jar源码 ...

  2. C# 上传RAR文件 解压 获取解压后的文件名称

    此方法适用于C盘windows文件夹中有WinRAR.exe文件 if (fileExt.ToUpper() == ".RAR") { string zpath = Server. ...

  3. ASP.NET解压zip文件,并将解压后的文件放到指定路径中

    本文链接:https://www.cnblogs.com/yifeixue/p/11769905.html 本人已亲测有效(*^▽^*) 废话不多说了,直接上代码: 1 /// <summary ...

  4. Android 解压zip文件(支持中文)

    过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...

  5. Android 解压zip文件你知道多少?

    对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...

  6. Android 解压zip文件

    过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...

  7. innobackup stream 压缩备份,解压后的qp文件

    是用innobackup stream 压缩备份,解压后很多文件还是qp格式的压缩文件,需要再解压. 备份: [root@ ~]# /usr/bin/innobackupex --defaults-f ...

  8. Ubuntu下压缩包内文件解压后乱码问题的解决

    用到的工具是The Unarchiver项目提供的lsar/unar工具. The Unarchiver项目主页:http://code.google.com/p/theunarchiver/ 安装( ...

  9. MySQL5.7.25解压版安装详细教程

    MySQL5.7.25解压版安装详细教程 安装步骤: 1.首先,你要下载MySQL解压版,下载地址:https://www.mysql.com/downloads/,图解: 2.解压安装包,根据自己的 ...

随机推荐

  1. C#读取Excel文件:通过OleDb连接,把excel文件作为数据源来读取

    转载于:http://developer.51cto.com/art/200908/142392.htm C#读取Excel文件可以通过直接读取和OleDb连接,把excel文件作为数据源来读取:   ...

  2. Spring4学习笔记1-HelloWorld与IOC和DI概述

    1.安装环境 1.1安装eclipse,jdk 1.1安装Spring tool suite(非必要项) 2.spring HelloWorld 2.1 需要的jar包(spring官网下载:http ...

  3. nginx 在ubuntu 上的启动,停止,重启

    vi 显示行号 :set num 在开始玩nginx之前,得先安装nginx,可以参考 <ubuntu15.10_x64 安装 nginx>   启动 sudo /usr/local/ng ...

  4. [Cordova] 无法显示Alert视窗

    [Cordova] 无法显示Alert视窗 问题情景 今天开了一个Cordova专案做范例,将预设的index.html页面修改为下列内容.按下执行却发现,这样一个简单的范例无法正常执行.点击页面上的 ...

  5. js 小数[非]四舍五入

    1.四舍五入 (2.678).toFixed(2) // 2.68 2.不需要四舍五入 (parseInt(2.678*100)/100.0).toFixed(2) // 2.67 3.字节单位转换 ...

  6. 百度地图API使用方法详解

    最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. API地址:http://developer.baidu.com/map/jsdemo. ...

  7. Window对象

    Window对象:         Window 对象表示浏览器中打开的窗口,如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框 ...

  8. 创建SAP GUI快捷方式保存密码

    1.在注册表中创建GUI 快捷方式的子键 a.首先运行  微软标识键+R    b.窗口中输入sapshcut,如果有窗口跳出点击“确定” 2.维护子键下的键值 a.再次运行  微软标识键+R    ...

  9. 高性能JS笔记4——算法和流程控制

    一.循环 for.while.do while三种循环的性能都没有多大区别.foreach 的性能较其他三种差 . 既然循环没有多大区别,注意循环内的代码控制. 减少迭代次数. 减少迭代工作量. 推荐 ...

  10. Android Contextual Menus之一:floating context menu

    Android Contextual Menus之一:floating context menu 上下文菜单 上下文相关的菜单(contextual menu)用来提供影响UI中特定item或者con ...