本文主要介绍如何逆向一个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"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="322" android:versionName="ver 3.2.2" package="com.eoeandroid.wallpapers.christmas" > <application android:label="@7F040000" android:icon="@7F020004" > <activity android:label="@7F040001" android:name=".Main" > <intent-filter > <action android:name="android.intent.action.MAIN" > </action> <category android:name="android.intent.category.LAUNCHER" > </category> </intent-filter> </activity> <service android:name=".service.SyncDeviceInfosService" > </service> <meta-data android:name="com.mobclix.APPLICATION_ID" android:value="30c0e2bb-a878-43cb-830b-a39fcae33b0c" > </meta-data> </application> <uses-sdk android:minSdkVersion="3" > </uses-sdk> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.SET_WALLPAPER" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> </manifest>

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

这里我是拿的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(安卓)Button及TextView动态变换颜色
  2. Android(安卓)RadioButton设置选中时文字和背景颜色同时改变
  3. Android(安卓)NDK编程中Application.mk和Android.mk写法
  4. Android(安卓)文件路径详解
  5. 从头学Android之Android的数据存储--File
  6. 第二章 Android动态加载、热更新、热修复、插件化系列文章 之 认
  7. 详解高速神器python脚步打包android apk,超级快!!(打包系列教程之六)
  8. Android软件广告屏蔽方法及代码
  9. NPM 和webpack 的基础使用

随机推荐

  1. SQL Server中将查询结果转换为Json格式脚
  2. Sql Server中的DBCC命令详细介绍
  3. Sql Server中的非聚集索引详细介
  4. 理解Sql Server中的聚集索引
  5. 深入理解Sql Server中的表扫描
  6. Sql Server中的系统视图详细介绍
  7. SQLServer 2012中设置AlwaysOn解决网络抖
  8. SQL Server远程定时备份数据库脚本分享
  9. 新手SqlServer数据库dba需要注意的一些小
  10. 启动sqlserver服务的bat脚本分享