【app反编译和逆向打包】

一:反编译

1:反编译代码

JADX(推荐)

具体的安装和使用,推荐看这篇文章吧点这里

dex2jarjd-gui

关键命令:

d2j-dex2jar classes.dex

ps:将获取到的classes.dex放到之前解压出来的工具【dex2jar-2.0】文件夹内,执行此命令即可。得到classes-dex2jar.jar文件之后,用【jd-gui】工具将class文件反编译成java源代码。

2:反编资源文件

首先访问 ApkTool 官方文档,安装apktool工具:
注意文档是英文版的,下方截图是翻译后的:
在这里插入图片描述

ps:window系统按照第一种方式配置就行了。第一步我们下载脚本语言,新建一个txt文本,复制进去脚本后,保存文本为apktool.bat 文件。第二步下载最新的apktool jar包。第三步把这2个文件,放到C盘Windosw目录下或者配置到环境变量中。
进行这种配置的目的是:我们可以直接使用 apktool 命令。

一切就绪后,关键命令:

apktool d 考勤_1.1.5.apk

如果你不进行上面的apktool配置,此命令也可以:

java -jar apktool_2.5.0.jar d -f E:\Android反编译工具包\测试apk\考勤_1.1.5.apk -o MMTS

其中d是decode的意思,表示我们要对考勤_1.1.5.apk这个文件进行解码。那除了这个基本用法之外,我们还可以再加上一些附加参数来控制decode的更多行为:

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

二:逆向打包

到这里我们已经可以反编译资源文件和java代码了。当我们修改了资源文件和相应代码逻辑后,下面来进行重新代码和签名apk。
这里可能有小伙伴要问了,怎么修改代码逻辑呢。如果你精通 smali 语法,恭喜你牛X。一窍不通,也没有关系。

这里值得一提的是smali文件夹,如果你进入到这个文件夹中你会发现它的目录结构和我们源码中src的目录结构是几乎一样的,主要的区别就是所有的java文件都变成了smali文件。smali文件其实也是真正的源代码,只不过它的语法和java完全不同,它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言。

这里提供一个思路:
(1)我们要通过反编译得到的java代码,查看代码逻辑后,在去阅读与之对于的smali文件,会更好一些。
(2)自己可以写个简单项目,反编译后找到smail文件夹,比对实际java代码和smail代码的关系。例如java定义个boolean变量是这样:

private boolean isIn=true

而smail代码是这样:
在这里插入图片描述

关键命令:

apktool b 考勤_1.1.5

如果你不进行上面的apktool配置,此命令也可以:

java -jar apktool_2.5.0.jar b 

ps:注意,考勤_1.1.5 是当时反编译后文件夹的名字,在当前文件的路径下,执行此命令成功后,会在 考勤_1.1.5 文件夹下多个dist文件夹,里面有重新打包后的考勤_1.1.5.apk
在这里插入图片描述

此apk还需要再次签名,才能使用。如果你已经拿到了此app的签名文件和签名秘钥,那么恭喜你,重新打包后apk完全可以代替反编译前的apk。不过一般此文件我们是得不到的。那我们只能自己重新生成一个签名文件,再用此签名文件,对app重新签名。

进入到dist文件夹后,把签名文件也放到此目录下,执行关键命令:

jarsigner -verbose -keystore 密钥库名称 -signedjar 考勤_1.1.5_signed.apk  考勤_1.1.5.apk  别名

说明:
-verbose 输出签名的详细信息
-keystore watson.keystore 使用key的绝对路径,就是在第一步中生成的key
-signedjar Decompile_signed.apk Decompile.apk watson.keystore 正式签名,三个参数中依次为签名后产生的文件Decompile_signed,要签名的文件Decompile.apk和密钥库的alias

例如:
jarsigner -verbose -keystore watson.keystore -signedjar 考勤_1.1.5_signed.apk 考勤_1.1.5.apk fangke

ps:输入此命令回车后,接着会提示你输入签名文件秘钥,正确输入秘钥后就能再次签名成功,生成 “考勤_1.1.5_signed.apk”文件。到这里恭喜你已经完全成功啦。

当安装签名后的apk时,如果遇到安装失败,并且有如下错误提示时:

Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]

此时要看看源代码清单文件中 application 标签下是否有 如下配置:android:extractNativeLibs=“false” 有的话,删除后再次签名打包就行啦!

三: APKDB(自动化)

可以搜索 apkdb 关键字,也可访问这个网址:点这里,下载此工具。
该工具实现了傻瓜式反编译和逆向打包。不过发现最近的一次更新也是18年的,比较老旧了。感兴趣的小伙伴也可以了解一下。
这里附个截图吧:
在这里插入图片描述

参考文章:

Apktool工具官方文档

APK反编译

Android APK的反编译和重新打包

Android APK 反编译工具 JADX

另一个apktool工具下载链接

猜你喜欢

转载自blog.csdn.net/da_caoyuan/article/details/118298198