今天就来详细的讲一讲apk的反编译过程,之前自己一直没彻底搞清楚。

一、准备工作

反编译首先要准备三个工具。这三个工具都是可以百度下载的。就是下图所示的三个工具。

这三个工具是有各自作用的:

(1)apktool工具用来反编译apk中的res下的文件,即所有的xml文件(包括Manifest.xml)。

(2)dex2jar工具用来反编译apk中的.class文件,即android项目的所有java代码。

(3)jd-gui-0.3.3工具不是用来反编译的,是用来查看使用dex2jar反编译得到的文件的。这样子就可以愉快的

查看你想看的java代码了。

+++++++++++++++++++++我是分割线+++++++++++++++++++++++++++++++++++

当然了,上面有两个工具是个压缩包,是需要解压缩的。然后将所有的工具都放在一个地方。比如我放的是

“E:\APK反编译工具”这个文件夹下的。这个文件夹下的内容如下:

+++++++++++++++++++++++我是分割线+++++++++++++++++++++++++++++++++

好了基本的工具都准备完毕了。然后再将你需要反编译的apk也准备好,然后将其用360解压缩。例如,

我准备对一个名为Mycode.apk的文件反编译,对其解压缩后,整体如下:

这个文件我是放在“E:\apk文件”这个目录下的,“apk文件”是文件夹的名字。

下面我们来看看解压后的“Mycode”文件夹下都有什么东西。如下:

发现一个熟悉的“res”文件夹,这个文件可以查看Mycode这个android项目的资源文件,但是不幸的是

除了几张图片你可以看见,其他的xml文件都是乱码(有的甚至连图片都看不到)。而下面的那个classes.dex文件

包含了Mycode这个项目的所有java代码,是我们主要反编译的对象之一。

好了,这个文件夹也没有什么好了解的。看看就可以了,下面我们就开始反编译吧!!

二、反编译之旅

我用的是windows系统。所以打开windows下的cmd窗口。先讲解一下怎么使用cmd进入某个目录吧。

熟悉两个命令就够了:

(1)直接输入“盘符:”就会直接进入某个磁盘。比如进入E盘,直接输入“E:”即可。

(2)再即可cd命令,可以进入当前盘的某个目录。比如我想进入E盘下的“APK反编译工具”这么文件夹下,

就可以这么输入“cd \APK反编译工具”。其中“cd \"表示进入当前盘符的根目录。

知道了这两个基本命令就够了。下面真正的进行反编译吧!

++++++++++++++++++++++华丽分割线++++++++++++++++++++++++++++++++

首先进入反编译工具目录,在cmd中如下输入:

然后使用下面的命令进行反编译,如下:

这样子就完成了第一次的反编译,反编译的结果再哪里呢?在apktool所在的文件夹下会有一个名为”Mycode“的

文件夹,这个就是反编译得到的成果!

我们先来看看反编译的语法,一会再来看反编译的成果。上图中的语句我用不同的线条括起来了,红色线括起来的

没什么好说的,看你的apktool全名是什么,照着输入即可,而黄色线的d表示decode,即解析的命令。最重要的是

蓝色线中的内容,就是你要反编译的apk对象,此时一定要将它的完整路径名写清楚了!这条语句正确执行,就编译

成功了。

好了,我们来来看反编译的成果吧,apktool所在的文件夹为”E:\APK反编译工具“(我的是这样子的)。如下:

发现多了一个Mycode文件夹。这就是反编译的结果,看看里面的内容,如下:

original文件夹是存放源码的,里面的东西还是一堆乱码。我们需要的是res这个文件夹,里面包括了所有的

xml文件和资源图片,此时都不是乱码了,随便用记事本代开都可以查看。而且下面的那个Manifest文件也可以用

记事本打开看看,此时也不是乱码了。这样子,我们就完成了Mycode.apk这个文件的资源文件的反编译。

++++++++++++++++++++++华丽分割++++++++++++++++++++++++++++++++

我们继续编译,光看资源文件不够,也想看一看java代码。这事就要用到另外两种工具了,即dex2jar和

jd-gui。使用这两个工具,跟apktool的使用一样,同样要在cmd中切换到他们所在的目录!因为我把他们

与apktool放在了一个目录下,因此这里救你不需要切换了。继续反编译。

还记得我们前面对Mycode.apk解压的文件夹下有一个classes.dex文件吗?对!就是它,为了方便,将它拷贝到

dex2jar所在的文件夹下面,如下:

紧接着上面,在cmd中输入下面的命令:

这样子就轻而易举的反编译成功了。反编译的结果就是在dex2jar所在的文件下生成一个classes-dex2jar文件。

如下:

这个classes-dex2jar就包括了所有我们想要的java代码了。怎么查看那呢?用jd-gui工具啊!如下图:

运行jd-gui工具后,选择打开文件,打开classes-dex2jar文件即可。如下:

具体的查看代码我就不贴了,保护人家的代码嘛!总之走到这一步,Mycode.apk里面所有的东西,xml资源

文件以及java代码都可以查看学习了!

android之apk反编译的更多相关文章

  1. Android实践--apk反编译

    版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/ysjian_pingcx/article/details/25468867 Android apk反编译一 ...

  2. [Android逆向]APK反编译与回编译

    一.先查壳,再反编译看验证首先打开.apk文件==>反编译apk(dex/配置文件/资源文件(apk反编译失败)>修改关键文件实现自己的目的>重新打包签名(无法重新打包)==> ...

  3. 聊聊Android的APK反编译

    上一篇<How To Use Proguard in Android APP>介绍了如何对Android进行混淆,现在来对它进行反编译看看,里面有些什么东西. APK文件,其实也是一个压缩 ...

  4. Android程序apk反编译破解方法

    简短不割了,我们直接奔主题吧. 把apktool-install-windows-r05-ibot文件里的两个文件剪切到apktool1.5.1目录. 新建一个文件夹把需要破解的apk应用程序放进去. ...

  5. 【转】Android APK反编译就这么简单 详解(附图)

    转载地址:http://blog.csdn.net/vipzjyno1/article/details/21039349 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂 ...

  6. Android APK反编译详解(附图)

    转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...

  7. Android APK反编译easy 详解

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  8. Android APK反编译就这么简单 详解(附图)

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  9. 从原生APK反编译,拿到界面,用于mono for android

    从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...

随机推荐

  1. JAVA jdbc(数据库连接池)学习笔记(二) SQL注入

    PS:今天偶然间发现了SQL的注入...所以就简单的脑补了一下,都是一些简单的例子...这篇写的不怎么样...由于自己没有进行很深的研究... 学习内容: 1.SQL注入的概念...   所谓SQL注 ...

  2. Mysql学习笔记(八)索引

    PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日...继续学习数据库... 学习内容: 索引.... 索引的优点: 1.通过创建唯一索引,可以保证数据库每行数据的唯一性... 2.使 ...

  3. 【团队冲刺总结】一个编码人员的反(tu)思(cao)

    消失了半个多月了啊,算算时间,好像确实有近个把月没有好好的写博客来了.我一直很想写博客的,之前有老师问过写博客的动力是什么.我想了想,我觉得可能是我比较喜欢看书吧,不管是专业书还是小说(好吧,我承认, ...

  4. SQL Server 诊断查询-(5)

    Query #57 Buffer Usage -- Breaks down buffers used by current database by object (table, index) in t ...

  5. 0316-复利计算器3.0---release

    目录       一.项目简介       二.Github链接推送       三.客户需求       四.需求分析       五.项目设计       六.完成效果       七.JUnit ...

  6. 原生JS实现瀑布流

    浏览网页的时候经常会遇到瀑布流布局的网站.也许有些读者不了解瀑布流.瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数 ...

  7. EffectiveJava——复合优先于继承

    继承时实现代码重用的重要手段,但它并非永远是完成这项工作的最佳工具,不恰当的使用会导致程序变得很脆弱,当然,在同一个程序员的控制下,使用继承会变的非常安全.想到了很有名的一句话,你永远不知道你的用户是 ...

  8. double 类型转化为Integer类型 ---DecimalFormat

    假设x是你要转换的double类型变量: 不进行四舍五入操作: (int)x 进行四舍五入操作: Integer.parseInt(new java.text.DecimalFormat(" ...

  9. Python函数:一个简单的迭代

    #!/usr/bin/env python # -*- coding: utf-8 -*- def fact(n): if n == 1 : return 1 return n * fact(n-1) ...

  10. galera cluster DDL节点间状态不一致的问题

    近期某个系统中的galera cluseter环境发生A DDL操作后,B节点未同步的情况,同时B节点的errorlog中有如下警告信息: 2016-07-23 17:31:32 18920 [War ...