所需工具
- dex2jar
- jd-gui
- apktool
- jre / jdk 1.6/1.7
- keytool
- 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
这条命令会在当前目录生成一个以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。之后重新签名就可以安装了。
那么如何得到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开发者一般都会使用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开发者,那么不用多说,直接用Android Studio生成就行了。
打开Android Studio,任一打开一个项目,Build,Generated Signed Bundle / Apk,选择Apk,Next,Create new,按照提示填写信息就好了。
如果不是的话,可以使用命令行进行创建。
keytool -genkey -v -keystore key.keystore -alias key0 -keyalg RSA -validity 20000
该条命令的意思为,创建一个别名为key0,有效期有20000天的,RS加密方式的签名文件。回车后,会提示输入签名文件的密码、名字姓氏等信息。