上一篇《How To Use Proguard in Android APP》介绍了如何对Android进行混淆,现在来对它进行反编译看看,里面有些什么东西。

  APK文件,其实也是一个压缩文件,我们可以把它的后缀改为zip格式,解压缩后看看里面的东西,如下:

  

  这里,Android对XML之类文件进行了加密,因此看到的是乱码:

  

  resources.arsc文件是资源文件的二进制索引,每个目录下都放着相关的资源文件,另外还有一个重要角色:classes.dex,这个就是源码打包后的文件,后面再搞它。

  Android的反编译经历3个步骤:

  apk ---> dex/smali ---> jar

  用到3个工具,可以从这个链接查找下载:https://www.linjk.cn:3298/iHouse/utils/file_list_upload.php

  apktool ---> dex2jar ---> jd-gui

  在使用apktool时若发生解析错误,建议使用更新版本的。

  下面,开始进行反编译:

  1. 使用工具apktool,参数d代码解码(decode),另外参数b可用于打包(binary)

    

    执行命令后目录结构如下:

    

    和解压缩不一样,解压缩出来的xml文件不可看,这里的xml都是可以看到的,在smali目录下就是源码了,如下部分截图:

    

    因为这里混淆了代码,所有类名都用a、b、c之类的字母替代了。前面解压缩出来的dex是提供给虚拟机执行的,是字节码文件,这里输出的smali文件是apktool按照dex和虚拟机格式转换出来的,类似于汇编语言,也可以使用Smaliviewr或IDA等工具来看函数的调用地址,再配合其他工具获取控件的id,就可以一步步进行功能破解了,后面有时间再写写这部分。

    2. 使用工具dex2jar

      将前面解压出来的classes.dex转为jar包,如下:

      

      这一步的输出文件是:classes-dex2jar.jar

    3. 使用工具JD-GUI查看第2步的输出文件,打开jd-gui软件,然后打开这个jar包文件即可,如下图所示:

      

    左边是app使用的包结构图,右边是随便打开的一个class文件图,可以看到,有些没被混淆的类可以看到源码,已被混淆的类调用已被a、b等字母替换。

    

    APP的反编译查看源码步骤大概就是这样了,反编译主要是想学习别人的代码架构是怎么分配的,学习别人的长处,不要干坏事哦

聊聊Android的APK反编译的更多相关文章

  1. android之apk反编译

    今天就来详细的讲一讲apk的反编译过程,之前自己一直没彻底搞清楚. 一.准备工作 反编译首先要准备三个工具.这三个工具都是可以百度下载的.就是下图所示的三个工具. 这三个工具是有各自作用的: (1)a ...

  2. Android实践--apk反编译

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

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

    一.先查壳,再反编译看验证首先打开.apk文件==>反编译apk(dex/配置文件/资源文件(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. 21个免费的UI设计工具和资源网站,不管是web,js,android都

    本帖最后由 hua631150873 于 2014-9-12 18:26 编辑 Lumzy 官方地址:http://www.lumzy.com/ Lumzy是一个网站应用和原型界面制作工具.使用Lum ...

  2. 解决ubuntu每次重启屏幕亮度都重置为最高亮度问题

    很多朋友都会碰到这个问题,Ubuntu系统,每次通过系统设置修改了屏幕亮度,重启系统都会将屏幕亮度调成最大值,很是苦恼. 上网搜索一番发现,修改屏幕亮度的文件是:/sys/class/backligh ...

  3. 获取SHA1和MD5

    首先:1.我们进入到通过cmd打开控制台,进入cmd定位到.android文件夹下.如下图: 2.输入keytool -list -v -keystore debug.keystore得到三种指纹证书 ...

  4. eclipse添加velocity项目

    1.首先添加jar包,记得包含以下的主要两个类别 2.新建一个servlet类(继承自VelocityViewServlet) package com.servlet; import java.uti ...

  5. JavaScript深入浅出3-语句

    慕课网教程视频地址:Javascript深入浅出 程序由语句组成,语句遵守特定语法规则 块 block  {}   没有块级作用域 声明    var 异常   try catch finally 函 ...

  6. IntelliJ IDEA 创建项目project和module的关系

    使用基于IntelliJ的IDE,如phpstorm.android studio都会对project和module的关系比较糊涂.用简单的一句话来概括是:IntelliJ系中的Project相当于E ...

  7. discuzX3后台管理插件开发示例一 用户表查询

    上次的入门已经介绍了后台管理插件开发的基本步骤,下面简单写一个示例查询一下用户表 需要已完成以下操作: 1.已创建test后台管理插件 //详见 http://www.cnblogs.com/savo ...

  8. Python正则表达式汇总

    判断是否是整数或小数,在网上看到一个方法: type(eval(")) == int type(eval("123.23")) == float 后来又看到<Pyt ...

  9. Git SourceTree 冲突解决方案

    Git现在越来越火,很多人都从Svn迁移到Git上面,Git让我们更加与世界接轨,不再是"局域网"的程序猿,特别是掌握了Git之后,会发现它真的很好用,本文对Git中比较烦人的冲突 ...

  10. 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程

      在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭 ...