Android进阶-反编译、apk重新打包、apk混淆、apk对齐与不对齐、jar混淆、proguard

本文详细介绍了Android应用的反编译过程,包括如何获取classes.dex文件、使用dex2jar和jd-gui工具反编译成Java源码,以及通过apktool反编译资源文件。接着,文章讨论了apk的重新打包和签名,强调了未对齐和对齐apk的区别以及zipalign工具的重要性。混淆部分,作者讲解了混淆的目的、应用场景和两种混淆的区别,给出了AS中混淆APP的实例,并探讨了jar混淆及proguard的使用。
摘要由CSDN通过智能技术生成

前言:学习必须脚踏实地,所以大家真心想学,我相信你花点时间在认真按照博客编写过程一步一步去阅读,你将会有不一般的收获,不建议大跳跃性的阅读。

1.反编译

详细说明地址

一、概括:

破解别人的app,拿到别人app的源代码。


二、应用场景:

自己做不出的功能,全网搜索都没结果的情况下,但是看到别人的app中有你需要的功能 ,就会去考虑反编译,但是一般是不会去做这样的事的,首先反编译也不是那么容易,其次可能有些人会想着去其中获利不道德。

所谓事物都有正反两面,既然你可以破解别人的app,当然别人也有办法对自己的app进行保护措施,所以就有了相应的混淆技术,android开发人员都应该会这反编译和混淆两个技能。

三、过程:

3.1、准备APP

因为反编译别人的东西有点不道德,所以我们自己手工去创建一个简单的app。
点击下载简单的app

app代码我就不贴了,对于我们来说实在太简单,简单的看下界面效果图:

这里写图片描述

可以看到,很简单,一个按钮点击弹出hello world。

3.2、解压APK,拿到classes.dex文件

3.2.1 怎么拿到classes.dex文件
首先解释一下我们上面下载文件FBYDemo.zip其实就是一个我们平常.apk文件,只是因为这里需要拿到.apk文件中的classes.dex,所以我简单的将.apk后缀改成了.zip,这样我们拿到.zip文件就可以直接解压然后拿到内部的classes.dex文件。

3.2.2 关于apk文件中的classes.dex文件
我的理解是java的可执行文件是.class文件,而android的dalvik虚拟机则是.dex可执行文件,我们可以简单理解为.class文件的进一步封装。

3.3、将classes.dex文件反编译成java源码形式的.jar文件
这一步我们需要用到两个工具下载dex2jar下载jd-gui

3.3.1 关于dex2jar、jd-gui工具

dex2jar : 将classes.dex文件反编译成java源码形式的.jar文件
jd-gui : 用于观看我们dex2jar反编译后的.jar文件的代码。

那好我们下载完这两个工具,解压,首先复制3.2中的classes.dex文件到解压后的dex2jar文件里:
这里写图片描述

然后打开cmd,定位到自己的dex2jar解压后的目录,输入如下命令:d2j-dex2jar.bat classes.dex
这里写图片描述

可以看到已经成功反编译出来一个.jar文件,接着使用解压后的jd-gui.exe工具打开这个生成的.jar文件,打开MainActivity:
这里写图片描述

到这里基本上能够模糊的看到MainActivity中的源代码了,由于默认会自动混淆布局,所以尽管我打包之前没有进行任何混淆处理还是看不到我们的所用的布局是哪个文件,但是在我们学习混淆过后就可以让更多代码模糊。

当然这里我们也可以更加清晰的知道classes.dex文件是.class文件的进一步封装,从我们上面就可以看到我们反编译后的classes.dex不存在任何不是.class的文件,那么我们的布局和我们资源都去哪里呢?细心的小伙伴就会发现我们最开始下载的.apk的压缩包中有布局和资源文件。

找到这两个文件,打开,但是发现都乱码了
这里写图片描述
这里写图片描述

3.4、反编译资源布局文件
不例外的这里也需要下载一个工具:下载apktool
3.4.1 关于apktool工具
这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源。

下载后解压,拿到3.1中下载的FBYDemo.zip将后缀名改成.apk复制到解压后的apktoo文件中 :
这里写图片描述

接着打开cmd,定位到自己的apktool解压目录,输入如下命令:apktool d FBYDemo.apk
这里写图片描述

等待一会成功后会自动生成一个FBYDemo的文件夹,打开文件又可以看到我们的布局文件,接着试着打开布局文件,发现代码清晰的展现在我们眼前:
这里写图片描述

到这里class文件和布局还有资源文件我们都已经反编译成功了,如果我们要使用别人的app的功能或者布局就得自己去复制粘贴了,但是我们能不能就直接随意改动app中的代码,然后成为自己的app呢,当然也是可以的。我们找到刚才生成的FBYDemo的文件夹,看到smali这样的一个文件夹,接着在进去就可以看到我们的class文件都成了.smail的文件,打开MainActivity.smail

关于smail文件

这里写图片描述

可以看到里面都是一些关于smail的语言,如果你懂的smail语法就可以很清晰的看懂这个文件,尽管我看不懂,但是我还是可以猜测出上图的hello world是我们的吐丝内容,所以我将改变hello world,然后重新打包试一下,看看内容是否可以改变。


四、重新打包

重新打包也很简单,打开cmd,定位到我们刚才的apktool文件夹,输入如下命令:apktool b FBYDemo -o NewFBYDemo.apk

FBYDemo是我们在反编译过程最后得到的那个文件夹,NewFBYDemo.apk表明我们重新打包之后的apk名称,可以任意取以.apk为后缀。

这里写图片描述

这样在apktool你将又会看到一个NewFBYDemo.apk的文件,如果你冲动的直接去安装它,发现是不能安装成功的,因为android是不会安装任何位签名的apk文件,不信可以试一试。

如何签名:
既然要签名我们就需要一个签名的文件,在eclipse一般是.keystore的文件,当然还可以自己随便定义后缀名,因为eclipse中没有明确的规定,而AS中是规定好了以.jks为后缀的签名文件。现在我就使用eclipse简单给大家示范一下怎么创建一个签名文件。

在演示如何创建签名文件之前,我先把apk的签名过程告诉大家,这样的话大家就可以更容易去了解签名文件创建的过程。

1.将jdk的bin目录配置到环境变量,这样就可以在哪里都可以调用目录下的命令:
2.将你的keystore和后来新生成NewFBYDemo.apk放到同一个目录下面
3.定位到NewFBYDemo.apk和keystore目录下,记住要把apk和keystore放在同一个目录下,输入如下命令:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

看到这里我们可以知道在创建签名文件的时候必须得记住创件签名文件时 的一些东西了,不然等会给apk签名很可能就是失败,无奈

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有头发的猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值