本文主要介绍如何逆向一个Android的APK应用程序,本文提供的方法仅供研究学习之用。

 

本文需要用到的工具有

jdk 这个用于搭建java运行环境

AXMLPrinter2.jar  这个用于逆向.xml文件

baksmali.jar 这个用于逆向classex.dex文件

 

 

 

 

 

由于Android.apk文件实际上就是一个zip文件 可以直接用winrar打开

如下图所示:

 

用rar打开之后 我们可以看到该文件实际上是一个zip包 里面包含了META-INF文件夹,这个文件夹是用于保存签名文件,确保包的完整性的

res文件夹下就是apk所要用的资源文件,都是原封不动地保存,我们可以直接提取出来,做汉化时就可以直接阅读string文件然后进行修改

 

AndroidManifest.xml文件则是编译过后的一个配置文件,用于声明程序中所包含的activity,service以及程序所具有的能力,也就是权限。resources.arsc则是编译过后的一个资源说明文件,而我们要关注的主要是classes.dex 。我们编写的Android程序,在源程序里的所有.java的文件,最终都编译到这样1个.dex文件当中,在Android手机上的dalvik虚拟机上执行。

 

首先,我们介绍如何逆向一个.xml文件

 

由于apk包里的xml文件我们直接用记事本打开还是有一些乱码

所以需要我们还原才能更好的看出

 

这里需要用到AXMLPrinter2.jar 工具

 

具体的则是打开命令行 我们以AndroidManifest.xml为例,输入如下命令

 

java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt

 

有兴趣的也可以写成一个.bat的脚本,方便执行

我们可以看看 执行的结果

 

执行前的AndroidManifest.xml文件

 

 

执行之后 我们可以再看看

<?xml version="1.0" encoding="utf-8"?>  

基本能还原的跟源程序大致相同

这里我是拿的eoe出的一个墙纸程序为例

 

 

 

接下来,大家肯定更加关心classes.dex的逆向

 

这个其实跟之前那个也很相似

采用baksmali.jar这个工具,国外一个对Android研究的很深入的大牛做的

 

执行代码

java -jar baksmali.jar -o classout/ classes.dex

 

讲classes.dex能逆向成一个文件夹

这里我可以截个图给大家看看

 

 

点开其中一个文件 我们继续来看

 

 

大家是不是觉得这个代码很亲切

对  从这个代码我们基本能大致推断出源程序的一些结构流程

从中借鉴

 

 

本文仅供研究学习之用

欢迎与我讨论交流

 

 

本文地址如下 转载请注明此句

http://blog.csdn.net/Zengyangtech/archive/2010/08/12/5807517.aspx

 

 

更多相关文章

  1. 【边做项目边学Android】知识点:Adapter适配器
  2. android工程中不自动生成Android(安卓)Dependencies的解决方式
  3. 将tensorflow训练好的模型移植到android
  4. Android(安卓)AlarmManager实现定时任务(也就是闹钟) 附Demo源码
  5. 《疯狂Android讲义》学习笔记一
  6. HOWTO install and setup Android(安卓)NDK for Windows(Android
  7. 获取Android(安卓)System 写入权限
  8. Android下引用系统库的方法及问题
  9. NPM 和webpack 的基础使用

随机推荐

  1. 两种进度条对话框
  2. Android之ShortCut[setResult方式]
  3. Cocos2d-x教程(38)-iOS移植Android
  4. Android(安卓)apk下载 安装 卸载 打开
  5. Android应用程序组件Content Provider应
  6. Android(安卓)代码里设置ImageView的src
  7. Android按钮的五种点击监听事件处理
  8. android, contentProvider 获取通讯录
  9. Android菜单
  10. Android(安卓)intent action大全