安卓apk反编译、重新打包、签名全过程

createh52个月前 (02-01)技术教程11

apktool :https://ibotpeaches.github.io/Apktool/install/

资源文件获取,可以提取出图片文件和布局文件进行使用查看

还可以将反编译之后的apk重新打包成apk文件,但需要重新签名,才能安装使用

dex2jar:https://sourceforge.net/projects/dex2jar/

将APK直接反编译成Java代码(目录下包含的一个classes.dex文件反编译为classes-dex2jar.jar)

jd-gui.jar:http://java-decompiler.github.io/

直接查看classes-dex2jar.jar文件(源代码)

下载好放在同一个文件


使用apktool

1. 反编译apk得到图片、XML配置、语言资源等文件

运行可执行jar包的命令是:

java -jar apktool_2.0.1.jar d -f apk包的位置 -o 输入名字

编译成功会生成CCC的文件夹 ,可更改xml配置文件


2.重新打包apk

java -jar apktool的名字 b(打包) 要打包的文件夹名字

CC(打包的文件夹名字)目录下面生成一个dist目录,里面就是重打包之后的apk,但是这个apk没有签名,需要重新签名之后,才能安装。


3.签名过程

生成keystore文件

keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

执行该命令会生成一个dabao.keystore证书文件。

  • -genkey 产生证书文件
  • -alias 产生别名
  • -keystore 指定密钥库的.keystore文件中
  • -keyalg 指定密钥的算法,这里指定为RSA(非对称密钥算法)
  • -validity 为证书有效天数,这里我们写的是40000天

apk重新签名

将dist目录下的apk拷贝到d:\apktool目录,执行下面命令

jarsigner -verbose -keystore demo.keystore demo.apk demo.keystore

  • rbose 指定生成详细输出
  • -keystore 指定数字证书存储路径


查看签名:

keytool -list -printcert -jarfile app-release.apk


使用dex2jar获取源代码源代码


将要反编译的APK后缀名改为.zip,解压得到其中的classes.dex文件(java文件编译再通过dx工具打包而成的文件)

将获取到的classes.dex放到之前解压出来的工具【dex2jar-2.0】文件夹内

执行:

d2j-dex2jar classes.dex

成功会生成classes-dex2jar.jar 文件(源代码件)


查看源代码

使用jd-gui.exe 打开classes-dex2jar.jar 即可查看代码信息

相关文章

你的代码被反编译啊?如何防止java jar被反编译,大佬们快看过来

你的代码被反编译了嘛?我们将如何防止java jar被反编译,大佬们快看过来大家晚上好,这里是互联网技术学堂,今天来谈谈,如何防止java jar被反编译。如果你有兴趣,那就点赞、关注、分享吧。为什么...

Java反编译工具 JD-GUI安装使用(jdgui反编译jar)

我们知道,将源代码转换成二进制执行代码的过程叫“编译”,那么反编译就是将二进制执行代码转换成源代码。在java开发里,源代码是.java文件,然后经过编译后生成计算机识别的.class文件,但是.cl...

Fury:一个基于JIT动态编译的高性能多语言原生序列化框架

Fury是一个基于JIT动态编译的多语言原生序列化框架,支持Java/Python/Golang/C++等语言,提供全自动的对象多语言/跨语言序列化能力,以及相比于别的框架最高20~200倍的性能。引...

爬虫中的那些反爬虫措施以及解决方法

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理1、UserAgent UserAgent的设置能使服务器能够识别客户使用的操作系统及版本、CPU...

初试安卓软件反编译破解软件的方法

出于对反编译的好奇心,今天特意测试了一下安卓软件的反编译,好吧,废话少说,直奔主题。首先下载软件,apk编辑器。像这样。不是旁边那个编译器。第二步,安装。这个都会。第三步,直接打开。看下图在这里,你可...

Java 面试题问与答:编译时与运行时

在开发和设计的时候,我们需要考虑编译时,运行时以及构建时这三个概念。理解这几个概念可以更好地帮助你去了解一些基本的原理。下面是初学者晋级中级水平需要知道的一些问题。Q.下面的代码片段中,行A和行B所标...