【990.am】反编译apk与重新打包,手把手教你搞懂Android反编译

手把手教你搞懂Android反编译

转载时请必须注明出处:http://www.iosxxoo.com/2016/06/29/2016-06-29/

一、反编译代码

1、反编译java代码首先需要下载dex2jar这个工具,下载地址:【990.am】反编译apk与重新打包,手把手教你搞懂Android反编译。https://sourceforge.net/projects/dex2jar/files/
目前最新版是2.0, 下载完后并解压缩。
2、将要反编译的apk文件重命名为zip格式并解压缩,注意其中的【990.am】反编译apk与重新打包,手把手教你搞懂Android反编译。classes.dex【990.am】反编译apk与重新打包,手把手教你搞懂Android反编译。文件,它存放了全部的java代码,将classes.dex文件拷贝到dex2jar解压后的根目录下。
3、打开cmd,进入dex2jar解压后的根目录,执行命令:

d2j-dex2jar classes.dex

如下图:

dex2jar

命令执行完后在对应目录下会生成classes-dex2jar.jar文件

jar文件

4、要查看java代码,还需要下载jd-gui这个工具,下载地址:http://jd.benow.ca/,目前最新版是1.4.0,下载完后解压缩,并用jd-gui.exe打开上边反编译出来的jar文件:

java code

到此,已经顺利的反编译出了java代码
那资源文件呢,再回头看一下刚才apk文件对应的解压缩文件,所有的xml文件都是乱码,例如AndroidManifest.xml

AndroidManifest.xml

当然要还原原始的资源文件还是有办法的,继续往下看。

一、反编译出源码

1.反编译java代码需要先下载dex2jar工具,下载最新版本后解压。

【990.am】反编译apk与重新打包,手把手教你搞懂Android反编译。2.将要反编译的apk文件重命名为zip格式并解压缩,注意其中的classes.dex文件,它存放了全部的java代码,将classes.dex文件拷贝到dex2jar解压后的根目录下。

【990.am】反编译apk与重新打包,手把手教你搞懂Android反编译。3、打开cmd,进入dex2jar解压后的根目录,执行命令:

d2j-dex2jar classes.dex

990.am 1

示例图

命令执行完后在对应目录下会生成classes-dex2jar.jar文件
4.要查看java代码,还需要下载jd-gui这个工具,下载地址:http://jd.benow.ca/,目前最新版是1.4.0,下载完后解压缩,并用jd-gui.exe打开上边反编译出来的jar文件

前言

反编译别人的程序不是什么值得炫耀的事,希望大家最好只是兴趣探索,而不是利益驱动。本文主要目的是绕开一个简单的激活程序。

二、反编译资源

1、要反编译apk中的资源文件,就需要apktool这个工具了,下载地址:http://ibotpeaches.github.io/Apktool/install/,进入下载页面:

apktool download

按照图中1、2两条的提示,下载apktool.bat和apktool.jar这两个文件,目前最新的apktool是2.1.1,并放到同一文件夹:

apktool


2、将要反编译的apk文件放到apktool文件夹,打开cmd,进入apktool文件夹目录,执行命令:

apktool d test.apk

如下图:

apktool d test.apk

执行成功后,在当前目录下会生成一个test文件夹:

test文件夹目录

其中,res文件夹下存放的是反编译出来的所有资源,smali文件夹下存放的是反编译出来的所有代码,AndroidManifest.xml则是经过反编译还原后的manifest文件。smali文件夹下的文件smali文件使用的是Android虚拟机所使用的寄存器语言,如果看的懂smail文件的话,就可以修改源代码的逻辑了,好可怕的事…当然这不是我们重点讨论的。
此时查看AndroidManifest.xml文件,发现已经成功反编译出来了:

AndroidManifest.xml

二、反编译资源文件

1、要反编译apk中的资源文件,就需要apktool这个工具了,下载地址:http://ibotpeaches.github.io/Apktool/install/,进入下载页面:
下载apktool.bat和apktool.jar这两个文件并放到同一文件夹
2、将要反编译的apk文件放到apktool文件夹,打开cmd,进入apktool文件夹目录,执行命令:

apktool d test.apk

执行成功后,在当前目录下会生成一个test文件夹:
其中,res文件夹下存放的是反编译出来的所有资源,smali文件夹下存放的是反编译出来的所有代码,AndroidManifest.xml则是经过反编译还原后的manifest文件。smali文件夹下的文件smali文件使用的是Android虚拟机所使用的寄存器语言,如果看的懂smail文件的话,就可以修改源代码的逻辑了,好可怕的事…当然这不是我们重点讨论的。

什么是反编译

我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译。Android的反编译分成两个部分:

  1. 一个是对代码反编译,也就是java文件的反编译。
  2. 一个是对资源反编译,也就是res文件的反编译。

三、重新打包

1、既然资源文件已经顺利的反编译出来了,那我们就可以适当的修改点东西了,例如换个图标啥的、改下布局文件等,这里我们将AndroidManifest.xml中的channel值改为10001,然后开始重新打包,同样在cmd中切换到apktool文件夹目录,执行命令:

apktool b test -o new_test.apk

如下图:

重新打包

执行成功后,在当前目录会生成一个新的new_test.apk文件:

new_test.apk

2、但是呢,这个apk文件目前并不能安装,因为需要重新签名。没有签名文件的话,通过Android
Studio可以很简单的生成一个哦,将准备好的签名文件放到apktool文件夹根目录,继续在cmd执行命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore
签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

如下图:

jarsigner start

jarsigner success

注意,其中jarsigner命令文件是存放在jdk的bin目录下的,需要将bin目录配置在系统的环境变量中才可以在任何位置执行此命令。
3、签名完成后,建议对APK文件进行一次对齐操作,这样可以使得程序在Android系统中运行得更快,对齐操作使用的是zipalign工具,该工具在<Android
SDK>/build-tools/<version>
目录下,需要将这个目录配置到系统环境变量当中才可以在任何位置执行此命令。继续在cmd中执行命令:

zipalign 4 new_test.apk new_test_aligned.apk

执行成功后,会生成一个对齐后的new_test_aligned.apk文件:

new_test_aligned.apk

4、最后可以通过如下命令验证apk签名是否成功:

jarsigner -verify -verbose -certs new_test_aligned.apk

如下图:

verify start

verify success

到这里apk反编译及重新打包流程就介绍完毕了。

**以上用到的工具也可以在此下载哦:反编译及二次打包工具
**

三、重新打包

1、编译修改后需要重新打包:同样在cmd中切换到apktool文件夹目录,执行命令:

apktool b test -o new_test.apk

执行成功后,在当前目录会生成一个新的new_test.apk文件
2、但是,这个apk并不能安装,因为需要重新签名。没有签名文件的话,通过Android
Studio生成一个,将准备好的签名文件放到apktool文件夹根目录,继续在cmd执行命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

注意,其中jarsigner命令文件是存放在jdk的bin目录下的,需要将bin目录配置在系统的环境变量中才可以在任何位置执行此命令。

3、最后可以通过如下命令验证apk签名是否成功:

jarsigner -verify -verbose -certs new_test_aligned.apk

990.am 2

示例图

参考博客:http://www.jianshu.com/p/792a08d5452c

所需的工具

990.am 3

  • Android Studio:安卓开发IDE

    下载地址:https://developer.android.com/studio/index.html

反编译代码的工具:

  • dex2jar: 把dex文件转成jar文件

    下载地址:https://sourceforge.net/projects/dex2jar/files/

  • jd-gui: 这个工具用于将jar文件转换成java代码

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

反编译资源的工具:

  • APKTool: 本文重要工具,APK逆向工具,使用简单

    下载地址:
    http://ibotpeaches.github.io/Apktool/install/

热身准备

首先我们需要一个APK,这里我自己写了一个,源码下载地址:http://download.csdn.net/detail/u012891055/9671973,打包成APK后下载到手机上。

它的主要功能是模拟邮箱激活,如果我们输入了错误的数据则无法通过激活。所以我们的目的很简单,就是让这个判断逻辑失效。

990.am 4

相关文章