zoukankan      html  css  js  c++  java
  • 逆向工程androidAPK(待补充)

    一、说明

    Android工程经过Dalvik 二次编译打包后会声称后缀名为apk的压缩包文件,此文件可以通过 rar 之类的压缩文件进行解压 目录结构如下

    其中classes.dex 就是android项目的源码部分

    二、下载工具

    逆向需要工具如下

    1、dex2jar:http://code.google.com/p/dex2jar/downloads/list (用于将apk中的class.dex文件反编译为jar包)

    2、jd_gui:  http://java.decompiler.free.fr/?q=jdgui(将jar反编译为.java文件)

    3、apktool: http://code.google.com/p/android-apktool/downloads/list (提取apk中的资源文件)

    下载注意事项:

    1、根据自己的系统平台下载对应版本的工具,dex2jar貌似不支持Mac OS,其他两种工具支持Windows,Linux,Mac OS。

    2、apktool必须下载apktool-1.3.2.tar.bz2(目前最新版)和apk_install_系统平台_版本号.tar.bz2,为什么要这样,后面阐述。 

         至此,万事具备,不过还差东风,我们的东风就是需要一个.apk文件,这个简单,不解释。下面说明apk逆向工程的详细步骤。

    三、逆向步骤

    友情提示:以下步骤默认的是Ubuntu下的操作。

    1 修改apk文件的扩展名改为.zip,并解压,获取其中的class.dex文件。 

    2、利用dex2jar从class.dex中反编译出jar包

         解压下载的dex2jar文件的压缩包,将class.dex文件拷贝到解压后的目录下,该目录下的dex2jar.sh适用于Linux平台,dex2jar.bat适用于Windows平台。将终端切换到该目录下,执行命令:./dex2jar.sh class.dex,即可在当前目录下生成一个默认名为class.dex.dex2jar.jar的jar包。如果在windows下,通过命令行执行:./dex2jar.bat class.dex即可,或直接把class.dex拖到dex2jar.bat文件也可。顺便提一下,如果不想将class.dex文件拷贝到该工具的目录下,重要在命令行中指定class.dex文件的具体路径即可。

    3、利用jd_gui从步骤2中生成的class.dex.dex2jar.jar包中反编译出.java文件

         jg_gui是个绿色软件,无须安装,解压即可。这是一款界面化的工具,打开之后,利用File->Open File打开class.dex.dex2jar.jar,然后选择File->Save All Sources,并指定存放路径即可,默认生成一个.zip的压缩包。

    到此为止,apk中的源码文件已经提取出来,全部是.java文件,不过,遗憾的是,这样恢复出来的并不是完整的工程,只是一些java文件,而且原工程中的很多资源现在只能看到一串数字代号,不知道那是个什么东西,其它也有很多不是很懂的表示方式,不过大概的代码结构还是可以看清的,对于只需要了解局部的实现小技巧而言,分析这些文件还是可以的。

    4、利用apktool提取apk中的资源文件

         前面提到,需要apktool需要下载两个压缩包,其中,apktool1.3.2.tar.bz2里面是一个jar包,而apktool_install_系统平台_版本号.tar.bz2里面则是一个名为apktool的脚本,该脚本的执行以来apktool1.3.2.tar.bz2里面的jar包。实际做法是将apktool1.3.2.tar.bz2解压,将里面的jar包拷贝到apktool_install_系统平台_版本号.tar.bz2解压后的目录,即与apktool脚本位于同一目录下。然后执行如下命令:

    ./apktool d apk路径/XXX.apk,默认在当前目录生成一个与apk同名的目录,里面就是apk中包含的资源文件了。

    四、其他一键式逆向工具

    -以下工具2.2之前比较好用,但目前可用度不高(仅做保留)-

    Android反编译工具绿色版V2.0(改进版)

    http://morry.iteye.com/blog/776718

    Android反编译工具绿色版V2.1(改进版)
    http://morry.iteye.com/blog/924137

    -----------------------------------------------------------------
    四。防止反编译(混淆)
    http://www.maxhis.info/androiding/protect-apk-from-decompile/

      

  • 相关阅读:
    剑指offer 合并两个排序的链表
    剑指offer 把字符串转换成整数
    剑指offer 数组中重复的数字
    剑指offer 数字在排序数组中出现的次数
    剑指offer 替换空格
    go学习笔记-错误处理
    go学习笔记-类型转换(Type Conversion)
    go学习笔记-语言指针
    go学习笔记-包处理
    go学习笔记-面向对象(Methods, Interfaces)
  • 原文地址:https://www.cnblogs.com/Joker_/p/2936087.html
Copyright © 2011-2022 走看看