zoukankan      html  css  js  c++  java
  • 【反编译系列】一、反编译代码(dex2jar + jd-gui)和反编译资源(apktool)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处!

    【反编译系列】二、反编译代码(jeb)

    【反编译系列】三、反编译神器(jadx)

    【反编译系列】四、反编译so文件(IDA_Pro)

    概述

      我们都知道,Android程序打完包之后得到的是一个APK文件,这个文件是可以直接安装到任何Android手机上的,我们反编译其实也就是对这个APK文件进行反编译。Android的反编译主要又分为两个部分,一个是对代码的反编译,一个是对资源的反编译,我们马上来逐个学习一下。 在开始学习之前,首先我们需要准备一个APK文件,为了尊重所有开发者,我就不拿任何一个市面上的软件来演示了,而是自己写一个Demo用来测试。

    --摘自《Android安全攻防战,反编译与混淆技术完全解析(上)》

      在参考郭神的文章以及后续的使用过程中,由于使用的工具版本不同,所以命令有所差别。

      本系列中使用的Demo项目是HelloWorld,源代码截图和运行效果如下:

    效果图:

    (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。)

    --摘自《Android APK反编译就这么简单 详解(附图)》

    反编译代码

    下载软件

    dex2jar:将apk反编译成Java源码(将apk里面的classes.dex转化成jar文件)

    下载地址:见文章末尾。

    jd-gui:查看jar文件(将jar文件转换成java代码)

    下载地址:http://jd.benow.ca/

    安装软件

    直接解压即可,然后将上面的两个软件放到同一个目录下。

    解压缩apk文件,获取dex文件

    通过好压软件打开apk文件,将class.dex拖拽出来【或者先将apk文件重命名成zip文件,然后用解压软件打开。】

    注意:可能会有多个dex文件,那么就需要将所有的dex文件转换成jar文件。

    将dex文件转换成jar文件

    将classes.dex复制到dex2jar-2.0目录中

    下面就是通过命令行的方式将dex文件转换成jar文件。对于这个版本(dex2jar-2.0)来讲,我们要用到的是d2j-dex2jar.bat这个批处理文件,当然如果你是linux或mac系统的话就要用d2j-dex2jar.sh这个文件。对于旧版本(dex2jar-0.0.9.15),要用到的是dex2jar.bat这个批处理文件。

    打开命令行提示符,并定位到dex2jar-2.0安装目录下

       

    根据实际情况,定位到dex2jar-2.0的安装目录(比如我的是E:反编译dex2jar-2.0

    输入命令d2j-dex2jar.bat classes.dex

    没有报任何错误,这就说明我们已经转换成功了(其实即使报错了,也可以暂时不用管)。现在观察dex2jar-2.0目录,你会发现多了一个文件,如下图所示:

    查看jar文件(将jar文件转换成java代码)

    可以看到,classes-dex2jar.jar这个文件就是我们借助工具之后成功转换出来的jar文件了。但是对于我们而言,jar文件也不是可读的,因此这里还需要再借助一下jd-gui这个工具来将jar文件转换成java代码。

    双击jd-gui.exe,打开jd-gui

    将classes-dex2jar.jar拖拽到jd-gui软件中打开预览

    导出代码,借助Android Studio打开,便于全局搜索【按需操作】

    当反编译的项目比较大的时候,那么在jd-gui软件中进行全局搜索某个变量名时,几乎是不可能的。那么一个比较好的解决方案是,通过jd-gui软件将所有的反编译项目的代码导出,然后通过Android Studio打开(虽然会报错,不过不用管),这样就可以借助Android Studio的全局搜索功能进行快速搜索查找了。

    File——Save All Sources

    指定导出目录以及文件名(我这边默认处理)

    根据反编译项目的包名,通过Android Studio创建一个空白项目,然后将项目代码复制到新建的空白项目中

    包名的获取:通过反编译资源,得到AndroidManifest.xml文件,查看package属性值。

    如果想要把资源也复制到新建空白项目中的话,那么就按照反编译资源的操作步骤进行操作。

    反编译资源

    下载

    apktool:这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源。

    下载地址:见文章末尾。

    安装

    直接解压即可,然后跟上面的两个软件放到同一个目录下。

    反编译资源

    将需要反编译的APK文件复制到该目录下

    打开命令行提示符,定位到apktool目录

    输入命令:apktool.bat d -f helloworld.apk -o helloworld

    命令中helloworld.apk指的是要反编译的APK文件全名,helloworld为反编译后资源文件存放的目录名称,即为:apktool.bat d –f [apk文件 ] –o [输出文件夹]

    • -f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。
    • -o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。
    • -s 不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
    • -r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)。

    报错不用管,成功之后发现在文件夹下多了个helloworld文件夹,点击便可以查看该应用的所有资源文件了。

      

    文章所需软件下载地址

     链接:https://pan.baidu.com/s/1LcPyuWJp1vzQJXaT3yFWkQ 密码:owwa

    参考资料

    Android安全攻防战,反编译与混淆技术完全解析(上)

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

  • 相关阅读:
    一文了解Python中的判断语句
    想成为Python全栈开发工程师必须掌握的技能
    Python中变量的命名
    Python中变量的基本使用
    Java使用IO流读取TXT文件
    怎样用 I/O流读取txt文件?
    ORACLE数据库数据被修改或者删除恢复数据(闪回)
    字节流,读取 a.txt 文件内容,并打印出来
    使用js设置input标签只读 readonly 属性
    MyEclipse 选中属性或方法后 相同的不变色
  • 原文地址:https://www.cnblogs.com/whycxb/p/9139146.html
Copyright © 2011-2022 走看看