`
Jclick
  • 浏览: 187619 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 反编译(转载)

阅读更多

     写个东西不容易啊!第一次写了一半,上传个文件后,结果网络崩溃了。把我气得......(实践了几次之后发现,在Chrome浏览器下上传图片是会崩溃的,换了搜狗,一切才正常。)其实按照我的札记的顺序,这次本应该写一写关于Android的基本的技术和相关的知识。毕竟这样比较符合逻辑。可是最近学习的时候碰到了关于反编译方面的知识,所以自己留心进行了一系列的实践并做了一下总结,希望能够为大家提供一些帮助。通过反编译,我们可以去看一下别人的一些Android优秀的应用程序是怎样写的,这样也是一种学习的过程(虽然这种学习有点“不道德”。)

   (ps:对于软件开发人员来说,保护代码安全也是比较重要的因素之一,不过目前来说Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似Sun JavaMe的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。Google最然在Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。)

    总结反编译主要的目的在于学习。利用反编译进行相关的汉化或修改,还是尽量不要吧,毕竟人家写个程序不容易啊!

    我目前接触的反编译的方法总共有三种,分别如下:

    1.  第一种反编译的方法主要是利用模拟器自带的一个dexdump。

       具体如下面的介绍:

       反编译一个.apk文件,需要做以下几步:1) 找到.apk安装文件   2)找到安装软件的*.dex文件    3)dump dex文件    4)分析dex文件获取想要的代码

       一、找到apk安装文件这个比较容易,把手机或者模似器安装好后,可以在eclipse的File Explorer下找到安装程序的apk译文件,也可以通过adb命令找到:

                      $ adb shell

                      # cd /system/app

                      cd /system/app

                      # ls


       二、找到安装软件的*.dex文件运行安装软件后,会在android文件系统下生成一个*.dex文件,一般在目录/data/dalvik-cache下,也可以通过adb命令找到:
                     $ adb shell

                     # cd /data/dalvik-cache

                     cd /data/dalvik-cache

                     # ls

        (注意:一般来说,如果你能够通过File Exploere找到data/dalvik-cache文件,其实一二两个步骤可以跳过,直接进入adb  shell后执行第三步;命令行中直         接输入adb shell后执行的前提是你已经在系统的环境变量中配置了tools文件,否则你得先cd到tools文件中执行adb.exe后才能执行以后的命令。另外你得确           保自己的虚拟机中安装了应用程序才能进行下一步的操作。对于系统自带的程序,我也试了进行反编译,结果输出的txt没有具体内容,没有成功。有兴趣的             话,大家可以试一下。)

            
        三、编译软件对应的dex文件,通过以下指令:
                #dexdump -d -f -h /data/dalvik-cache/data@app@com.ophone.chapter6_4-1.apk@classes.dex > ophone.text
                指令参数解释:-d : disassemble code sections

                                    -f : display summary information from file header

                                    -h : display file header details

                                    -C : decode (demangle) low-level symbol names

                                    -S : compute sizes only

        这执行完了后,大家应该可以在dalcik-cache文件夹下找到ophone.txt文件。如果没有的话,可以重新启动虚拟器。 之后我们可以将该txt文件导出到桌面上进行相关操作。(File Explorer中的按钮)

          四、 获取需要的代码:打开刚才得到的编译出来的text文件,会看到形如以下的代码:      

  

                   总体来看,这种反编译的效果不太理想。

    第二种是:通过dex2jar工具进行反编译。(dex2jar:http://code.google.com/p/dex2jar/downloads/list    查看Jar包的GUI工具:http://java.decompiler.free.fr/?q=jdgui

     

    

    反编译步骤:

    1、下载一个.apk程序安装包,将其文件名*.apk改为*.rar后进行解压。我这儿是将南方周末的读报器进行反编译的。
    
    2、 把其中的class.dex拷贝到dex2jar.bat所在目录。运行dex2jar.bat   class.dex,将会在其文件夹下生成classes.dex.dex2jar.jar。
    3、可以将jar文件重新命名后拷贝到GUI文件夹下,运行JD-GUI工具(它是绿色无须安装的),打开上面的jar文件,即可看到源代码。

         与第一种方法相比较,该方法生成的文件全面,代码整齐,虽然有些中文会出现乱码,id等全部是数字代替,但整体结构很完整,不错。
   类似的工具还有Dedexerhttp://sourceforge.net/projects/dedexer/files/

   具体的应用代码为(先进入jar包所在路径):

    java -jar ddx.jar -d  <directory>  <dex file>
   可以再其中加入-o,这样可以生成一个介绍文件内部结构的日志文件。

    第三种:网上还流传着这样一种用smali工具的方法(http://code.google.com/p/smali/downloads/list):

        反编译命令  java -jar baksmali-1.2.jar  <dex文件>  -o  <新生成的文件名>

        重新编译     java -jar  smali-1.2.jar <需编译文件夹>

       本人亲自实践了一下,确实新版本的baksmali可以直接对.apk文件进行直接的反编译。


   但是这种方法生成的文件也不是很好。

     说到这儿,对于xml的文件的编译,需要工具AXMLPrinter2.jar(http://code.google.com/p/android4me/downloads/list)。具体的使用方法,与上面的差不多,可以运用命令      java -jar AXMLPrinter2.jar main.xml > main.txt  进行相关的操作。大家可以参照这位仁兄的(http://hi.baidu.com/linrw/blog/item/cc3afd2233ab88a94723e878.html

        写这篇不容易啊,希望能够给大家一点启示。

 

 

转载自:http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html

分享到:
评论

相关推荐

    Android应用的反编译.pdf

    随着计算机软件的广泛应用,反编译已成为软件逆向工程的重要研究领域,文章给出了一种反编译Android应用的方法。通过对Android应用的反编译,可以推导出他人的思路、原理、结构、算法、处理过程、运行方法等设计要素,...

    Android反编译工具V2.1

    关于这个资源:Android反编译工具V2.1,就是一个反编译工具。声明,非本人自己撰写。转载自他处。谢谢。

    安卓apk反编译工具

    这是Android的apk反编译工具,之前转载的文章这些工具类下载都需要积分太多,这次酒吧下载的积分设置到最低

    android 源码反编译.rar

    android 源码反编译.rar android 源码 反编译 一.反编译Apk得到Java源代码 转载自:http://hi.baidu.com/%CB%BF%D4%B5%CC%EC%CF%C2/blog/item/2284e2debafc541e495403ec.html 工具下载:需用到dex2jar和JD-GUI这2...

    Android apk 反编译工具 使用说明

    Android apk 反编译工具 使用说明,本人亲自试验,绝对能用,非转载

    ApkToolBox android 反编译工具

    转载自大神的工具,支持文件或目录拖动,很好用,功能强大

    反编译apk文件工具及使用方法

    Android APK反编译 一.反编译Apk得到Java源代码 转载自:http://hi.baidu.com/%CB%BF%D4%B5%CC%EC%CF%C2/blog/item/2284e2debafc541e495403ec.html 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载...

    apk反编译得到源代码

    反编译Apk得到Java源代码 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI下载地址: windows版JD-GUI:...

    APKTool批处理版l

    第三种就是我在这里要向大家推荐的APKTOOL,他的原理是把APK进行反编译,生成程序的源代码和图片、XML配置、语言资源等文件。我们秩序对有关图片和语言资源等文件进行修改,再编译打包成APK并签名,就可以得到汉化版...

    xmljava系统源码-apktool:应用工具

    反编译Apk得到Java源代码 转载自: 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址: JD-GUI下载地址: windows版JD-GUI: Linux版JD-GUI: 步骤: 1.首先找到Android软件安装包中的classes.dex 把.apk...

    安卓java读取网页源码-GreenDao:GreenDao原创

    反编译很容易盗取用户信息 &gt;4最大的缺陷是安卓攻城狮并不了解数据库查询语句 直接导致发生语句错误等 greenDao给我们解决了这些问题 他把查询语句进行了封装 把常见的判断也封装了进去 我们只需要调用方法即可 同时...

Global site tag (gtag.js) - Google Analytics