• 详解android应用程序的反编译


    详解android应用程序的反编译

    毕业设计不小心选了智能手机开发方向,而平台选择了 android,所以最近自学了不少android程序开发的知识。但是作为一个懒散不堪,容易半途而废的人,android所自带的体系还是有点庞大, 想要以此开发一个属于自己的独一无二的应用,难度对我这个小菜鸟来说实在大。所以难免生起“他山之石,可以攻玉”的想法。

    毕设带队的老师说:代码都自己写的程序员不是好程序员。利用别人的代码,从中再修改一番变成自己的,这才是好的程序员。我不知道这话有没有道理,反正是说到了我的心坎了。懒人自有懒人的活法,天才是少数的,而懒惰的人是多数的。自然,我是多数人。

    但是要修改别人的代码必须晓得他的代码,所以我们需要对android应用程序进行反编译。所幸andorid是个开放的平台,反编译比通常程序简单的多,下面就说说这个简单的过程。

    基础知识

    android 上安装的应用程序后缀都是apk(Android application package),每个要安装到android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk。而实际上这个apk格式的文件是一种变相的 zip压缩包,你可以使用winrar打开看到里面的文件的结构。通常你可以看到这些内容:

    |– AndroidManifest.xml
    |– META-INF
    |   |– CERT.RSA
    |   |– CERT.SF
    |   |– MANIFEST.MF
    |– classes.dex
    |– res
    |   |– drawable
    |   |   `– icon.png
    |   |– layout
    |       `– main.xml
    |– resources.arsc

    各个文件内容涵义不赘述了,可以看这篇文章http://www.ophonesdn.com/article/show/38

    我们通常需要反编译出的有两部分:classes.dex和main.xml。一个是java经过google自制虚拟机dalvik编译出的字节码,一个是布局文件。大点的程序布局文件不止一个,我们这里只说只有一个的,其他类似。

    需要的工具

    1、把dex文件反编译为jar文件的工具。(dex2jar)
    2、把jar反编译为java的工具。(JD-GUI)
    3、AXMLPrinter2
    三者下载链接分别是:
    http://code.google.com/p/dex2jar/
    http://java.decompiler.free.fr/?q=jdgui
    http://code.google.com/p/android4me/downloads/detail?name=AXMLPrinter2.zip&can=2&q=(这个文件貌似已经不可用,有兴趣的童鞋可以去csdn下载)

    XML文件的反编译

    apk文件中的xml文件都是经过压缩的,所以如果直接打开会看到一些乱码,所以需要工具AXMLPrinter2。

    安装完java环境,然后cmd进入你把apk文件解压到的文件目录内,使用命令(注意,AXMLPrinter2.jar文件也要):

    java -jar AXMLPrinter2.jar main.xml

    成功后会在cmd里出现xml反编译出的文件

    classes.dex文件反编译

    Android 模拟器中提供了一个dex文件的反编译工具,dexdump。用法为首先启动Android模拟器, 把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。但是这样得到的结果,其可读性是极差的。

    所以我们使用了两个工具dex2jar和JD-GUI。

    反编译的步骤:

    1、从APK中提取classes.dex文件,对APK文件解压即可得到。 将其放到dex2jar的目录下,打开cmd,运行dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar。

    2、运行JD-GUI工具,打开上面的jar文件,即可看到源代码。

    在JD-GUI上可以看到一堆a b c d ……的树形结构,这些都不是,真正要看的是activity。如图:

    5356270065_997c64d080.jpg (500×334)

  • 相关阅读:
    dotnet core 使用 MongoDB 进行高性能Nosql数据库操作
    Google C++测试框架系列:入门
    leetcode解答索引一期工程:1
    Google+团队如何测试移动应用
    Google C++测试框架系列入门篇:第三章 基本概念
    Google C++测试框架系列入门篇:第二章 开始一个新项目
    Google C++测试框架系列高级篇:第二章 让GTest学习打印自定义对象
    Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?
    leetcode: Jump Game II
    Google C++测试框架系列高级篇:第一章 更多关于断言的知识
  • 原文地址:https://www.cnblogs.com/myphoebe/p/2258746.html
Copyright © 2020-2023  润新知