zoukankan      html  css  js  c++  java
  • android apk 反编译

    1. 反编译资源文件
    apktools 
    http://code.google.com/p/android-apktool/downloads/list         
    下载后要有3个文件  aapt.exe、apktool.bat、apktool.jar

    使用: apktool d  x.apk  目标文件夹
    这种方式.xml 的资源文件都可以反编译出来, 但是源代码会变成 .smali 文件

    AXMLPrinter2.jar 
    //这个不大靠谱,有人试验是apilevel8 以后的就不能反编译


    2. 反编译源代码
    将编译后的 classes.dex 变成 .jar 文件
    dex2jar
    http://code.google.com/p/dex2jar/downloads/list
    1)解压 apk 文件得到 classes.dex 文件
    2)把classes.dex拷贝到dex2jar.bat所在目录
    3)运行 dex2jar.bat classes.dex      生成classes.dex.dex2jar.jar
    注意下载最新的dex2jar,不然有些可能反编译失败


    3. 查看源代码
    JD-GUI
    http://java.decompiler.free.fr/?q=jdgui
    打开上面反编译好的 .jar 文件

    XJad

    和上面的JD-GUI反编译结果不一样,互有优劣,可以互相参照。

    各个手机的系统资源文件在  /system/framework/framework-res.apk  包里,可以反编译拿到。

    代码在 /system/framework/framework.jar 中

    ----------------------------------------------------------------------------------------------
    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源码;但也有些额外加的包没被编译出来。
    但做到这一步已经足够用于学习,我们的目的也就达到了!
    大家也可关注下这两篇文章,用的不同方法(dexdump, baksmali.jar, smali.jar),但效果也还不错:
    http://blog.csdn.net/Android_Tutor/archive/2010/07/09/5724435.aspx
    http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html
    有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:
    “用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。反编译后一般都变成a, b , c,...这样的名字,只能一点点的看懂,
    再利用Eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。”

  • 相关阅读:
    Linux 基础命令3 shell
    Django 的学习(2) 从adminuser到配置
    Linux巨好用的
    常见任务&基本工具 1 软件包管理
    java学习补全 1
    基础命令1
    java 5 绘图GUI
    Open GL与OpenGLES
    NDK 安装步骤
    转:为什么要有handler机制?
  • 原文地址:https://www.cnblogs.com/zijianlu/p/2975113.html
Copyright © 2011-2022 走看看