zoukankan      html  css  js  c++  java
  • [android反编译小结]apktool/ AXMLPrinter2.jar/ dex2jar.bat/ jdgui/ Jodeclipse/ JadClipse

    开篇:

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

                                                                      from:  http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html

    搞过几天android的朋友都知道,将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex文件(.dex),我们可以从.dex文件中得到.class,利用后者再得到大家垂涎已久的java文件。
    下面分别针对这三种格式的文件进行反编译处理;

    还是先对此过程作个大致介绍吧:

     如果上面的步骤都可以自我完成了,那么,下面对这几个软件的详细介绍就可忽略不看!

    这几个软件,细分开来介绍(用步骤A(分A1,A2), B, C(分C1,C2,C3), ABC分别代表三个不同的步骤):
    A1. apktool:
    通常用于生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。支持Linux 、Windows下工作
    安装步骤:
    1.安装JAVA环境(官方推荐jdk 1.6);
    2.下载apktool.jar:http://code.google.com/p/android-apktool/downloads/list
    点击下载apktool1.3.2.tar.bz2  和apktool-install-windows-2.2_r01-3.tar.bz2 (不一定是这个,但最好选最新版本的吧!)
    3.解压apktool1.3.2.tar.bz2得到apktool.jar;
    解压apktool-install-windows.zip到任意文件夹,将apktool.jar拷入此文件夹中(也有人说是直接全部拷入C:/Windows,一样的);
    (目前此文件夹中有三个文件:apktool.jar/apktool.bat/aapt.exe)
    4.cmd命令行进入到解压apktool-install-windows-2.2_r01-3.tar.bz2所得的文件夹,输入apktool测试是否安装成功;

    安装成功后,下面开始反编译过程:

    这个out.apk是没有签名的,所以不能直接装到手机里。签名工具和方法见http://www.hiapk.com/bbs/thread-21261-1-1.html,这里就不说了。签名后得到的APK,就是可以装到手机里的了。

    A2. AXMLPrinter2.jar
    将它放到android-sdk-windows-1.5_r3\tools文件夹中
    运行cmd,进入tools目录,运行java -jar AXMLPrinter2.jar main.xml > main.txt;
    于是我们就得到了反编译后的XML文件;

    经历了这么多,我们得到的只是部分布局文件和资源文件,但java文件还是"犹抱琵琶半遮面"。


    下面,让我们掀起她的红盖头来:


    B. dex2jar
    下载:http://code.google.com/p/dex2jar/downloads/list
    方法:
    1.首先找到Android软件安装包中的classes.dex (解压得到);
    它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
    2.把classes.dex拷贝到dex2jar.bat所在目录;
    在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex
    ,生成classes.dex.dex2jar.jar,成功了一半!

    C1. JD-GUI
    下载:http://java.decompiler.free.fr/?q=jdgui
    方便好用,直接解压得到JD-GUI,用它打开上面的jar文件,File-->Save JAR Source,即可看到梦寐以求的java源代码;

    我们也可以解压B步骤得到的jar文件得到class文件,到这里,我们就要用到Jodeclipse和JadClipse了;
    C2. Jodeclipse---Jode的Eclipse插件

    C3. JadClipse---Jad的Eclipse插件
    关于这两个Eclipse插件的安装可见下面链接:
    http://tgyd2006.javaeye.com/blog/553061
    (C4. 还有朋友提到DJ Java Decompiler,没用过,可以一试!)

    但也有人提出此问题:
    自从eclipse升级到3.3以后jad插件就一直没有成功的安装上去,网上看了好多文章也是以前版本的安装方法,3.3目前通过eclipse的software update的插件安装方式已经不行了。
    解决方法如下:
    1.从http://www.kpdus.com/jad.html#download地址下载最新的jad,我目前下载的是jadnt158.zip;
    2.从http://nchc.dl.sourceforge.net/s ... jadclipse_3.3.0.jar地址下载jadclipse_3.3.0.jar,拷贝到eclipse的plugins目录下;
    3.启动或重起eclipse,修改window -> Preferences -> Java -> JadClipse 下的
    Path to decompiler 如:D:\eric\jadnt158\jad.exe(jadnt158.zip解压后的目录);
    4.Windows -> Perference -> General -> Editors -> File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”
    大功告成,之后在java类里按住ctrl点击类就可以看到它jad反编译后的源带码了;
    如果发现安装了没有效果,可以删除eclipse主目录下的\configuration\org.eclipse.update后,再执行eclipse -clean试试


    最后,将得到的java文件和得到的xml文件组合可得一个android工程,即可得到相对比较完整的apk源码;但也有些额外加的包没被编译出来。


    但做到这一步已经足够用于学习,我们的目的也就达到了!

    有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:
    “用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。反编译后一般都变成a, b , c,...这样的名字,只能一点点的看懂,再利用Eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。”

     所以,大家的关键代码最好还是打成.so库吧!要不会被一些人搞得内裤都没得穿!

    特此感谢:
    http://blog.csdn.net/Android_Tutor/archive/2010/07/09/5724435.aspx
    http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html

    大家也可关注以上两篇文章,用的不同方法(dexdump, baksmali.jar, smali.jar),效果也都还不错!

    如果大家有什么关于防止反编译比较好的的技巧,可以留言告知,所有程序员都会感谢你的!

  • 相关阅读:
    【Go】windows下搭建go语言编译环境
    【java回调】同步/异步回调机制的原理和使用方法
    【tomcat】tomcat远程调试
    【tomcat】获取访问者真实IP
    【深度学习学习记录】之一:开篇闲扯一些话
    【java】线程安全的整型类AtomicInteger
    【OpenStack】源码级深入了解删除虚拟机操作
    【Maven】maven的常用命令以及搭建maven私人仓库
    素 数 (第三届省赛)
    房间安排(第三届省赛)
  • 原文地址:https://www.cnblogs.com/dartagnan/p/2003437.html
Copyright © 2011-2022 走看看