Android Apk反编译、签名

  • 所需工具
    • dex2jar
    • jd-gui
    • apktool
    • keytool、jarsigner
  • 反编译
  • 签名

所需工具

  1. dex2jar
  2. jd-gui
  3. apktool
  4. jre / jdk 1.6/1.7
  5. keytool
  6. jarsigner

dex2jar

GitHub地址:https://github.com/pxb1988/dex2jar
下载地址:https://sourceforge.net/projects/dex2jar/files/latest/download

jd-gui

GitHub地址:https://github.com/java-decompiler/jd-gui
编译Exe所需工具:http://sourceforge.net/projects/launch4j/files/launch4j-3/3.7/launch4j-3.7-win32.zip/download

从GitHub下载源码包jd-gui-master.zip,解压,自行编译生成jar包。
generate “build/libs/jd-gui-x.y.z.jar”
.\gradlew build
generate “build/install/jd-gui-windows/jd-gui.exe”
.\gradlew installWindowsDist -DLAUNCH4J_HOME=Ddiver:\path\launch4j
generate Ubuntu/Debian installer
.\gradlew buildDeb
generate “build/install/jd-gui-osx/JD-GUI.app”
.\gradlew installOsxDist

这里如果简便的话,只需要生成jar包就行了,可以使用Java -jar jd-gui-1.4.0.jar直接运行jar包。

如果需要生成exe,则需要使用上面的launch4j,注意这个解压之后,不能放在jd-gui-master的build目录中,会和原本的build目录冲突。
并且生成exe的过程,提示需要jre环境,此时,绿色版的jre / jdk是无法提供生成环境的,必须jre-6u45-windows-x64.exe这样的使用exe进行完整安装,同理,生成的exe也必须是完整安装。

有一个奇怪的地方是,本人使用生成exe提示需要jre 1.6,而生成之后运行jd-gui.exe,却提示需要jre 1.7。只能卸载之前安装好的1.6,重装1.7。

jdk / jre各版本下载:早期版本下载需要登陆。
https://www.oracle.com/technetwork/java/javase/archive-139210.html

apktool

下载地址:https://ibotpeaches.github.io/Apktool/

keytool、jarsigner

Android开发人员对这个应该不陌生吧,这个两个文件位于jdk / jre的bin目录中。分别用于生成签名文件、进行签名。

反编译

以某浏览器为例。

java -jar .\apktool_2.3.4.jar d .\xbrowser_8.9.5.4610_20820.apk

Android Apk反编译、签名_第1张图片

Android Apk反编译、签名_第2张图片

这条命令会在当前目录生成一个以apk名命名的文件夹。更多有关apktool的命令可以使用help查看。

java -jar .\apktool_2.3.4.jar -help

此时我们得到了浏览器的各种资源、配置文件,以及smali代码。已经可以通过修改smali代码、修改资源文件,对程序进行修改了。

对反编译生成的文件夹,重新打包生成apk文件,可以使用:
java -jar .\apktool_2.3.4.jar b xbrowser_8.9.5.4610_20820
将会在xbrowser_8.9.5.4610_20820\dist文件夹内生成同名apk。之后重新签名就可以安装了。

Android Apk反编译、签名_第3张图片

那么如何得到Java代码呢,使用dex2jar以及jd-gui。

首先,手动解压出apk文件中的classes.dex、classes2.dex之类,使用以下命令将dex文件生成jar文件。不同版本dex2jar的bat文件名可能略有不同。
d2j-dex2jar.bat .\classes.dex

运行jd-gui,java -jar .\jd-gui-1.4.0.jar,打开目标jar文件,可以成功看到源码。

Android Apk反编译、签名_第4张图片

Android Apk反编译、签名_第5张图片

签名

Android开发者一般都会使用key.jks给应用签名。
这里也可以直接使用key.jks进行签名。

\JDK\bin\jarsigner.exe -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore \Androi d\key.jks \xxx.apk key0

其中key0为key.jks的别名。回车后,输入密钥密码进行签名。该命令签名成功后,将直接覆盖原有Apk。当然,也可以增加参数-signedjar signed_xxx.apk而不覆盖生成。

经过安装到设备,显示签名与已经安装app不同,无法安装,卸载原有app后,成功安装。

Android Apk反编译、签名_第6张图片

生成签名文件的方法,如果你是一名Android开发者,那么不用多说,直接用Android Studio生成就行了。

打开Android Studio,任一打开一个项目,Build,Generated Signed Bundle / Apk,选择Apk,Next,Create new,按照提示填写信息就好了。

Android Apk反编译、签名_第7张图片

如果不是的话,可以使用命令行进行创建。

keytool -genkey -v -keystore key.keystore -alias key0 -keyalg RSA -validity 20000

该条命令的意思为,创建一个别名为key0,有效期有20000天的,RS加密方式的签名文件。回车后,会提示输入签名文件的密码、名字姓氏等信息。

Android Apk反编译、签名_第8张图片

更多相关文章

  1. Android 获取本地音乐文件
  2. Android播放在线音乐文件
  3. 文件读写
  4. Android读取Txt文件
  5. android 工程,点击图片,在屏幕显示
  6. Android文件递归遍历
  7. android 不使用布局文件,完全由代码控制布局实例
  8. Android ListView(Selector 背景图片)

随机推荐

  1. MySQL索引失效的几种情况详析
  2. mybatis-plus分页传入参数后sql where条
  3. 浅析MySQL - MVCC
  4. MySQL制作具有千万条测试数据的测试库的
  5. Mysql普通索引与唯一索引的选择详析
  6. MYSQL数据库GTID实现主从复制实现(超级方
  7. 详解DBeaver连接MySQL8以上版本以及解决
  8. 详解如何在阿里云服务器安装Mysql数据库
  9. 聊聊MySQL的COUNT(*)的性能
  10. 详解MySQL拼接函数CONCAT的使用心得