最近研究了一下关于apk的反编译过程,发现如果应用不加混淆,通过简单的逆向就可以进行更改源代码,包名等。所以大家在开发过程注意将新的混淆加进去,不然到后期再加会很麻烦。好了,下面跟着我们来重打包一个apk吧!
首先找一个没有混淆过的apk应用,准备使用工具apktool.jar,这里我使用的是apktools,当然网上有很多工具,这里只是使用一种比较简单的方式。好了,接着将下面的命令复制到新建的text文本中,然后命名成为apktool.bat。然后我们就可以使用了。
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %*
打开Dos命令窗口,输入apktool d xxx.apk,然后按回车键,apk就会解压出所有的资源文件,这些资源文件如非必要我们不要做任何的修改。然后我们就能看到下面的这些文件
当我们做完需要修改的文件之后, 在执行回编译命令 apktool b xxx.apk,注意回编译执行结束之后, 会在apk文件夹中多一个dist文件夹,这个文件夹中就是未签名的apk。我们只要在对其进行签名就可以安装使用了,未签名的话无法安装哦^_^
来说一下apk的签名,使用我们准备好的签名就可以,签名方式也很简单,可以通过360签名助手进行签名。或者通过JDK进行签名。二者签名出来的apk包是一样的。360签名助手大家自己从网上搜即可,下面重点说说借助JDK进行的签名方式。我这里使用的是JDK1.7,注意JDK版本不一致请注意签名命令不一样哦,同时介绍一个JDK1.8的签名命令。
如果你已经在path下配置好了JDK环境,直接启动Dos窗口,否则你需要在你的jdk安装位置打开jdk ->bin目录下打开Dos窗口,按住shift 右键即可找到打开在当前位置打开Dos窗口。
好了,看下jdk1.7的命令
D:\Java\jdk1.7.0_80\bin>jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore xxx.keystore【是你的密钥】 -storepass xxx【你的key密码】 -signedjar F:\xxx\mi-signed.apk F:\xxx\dist\xxx-unsign.apk xxx【你的keystore别名】
下面是JDK1.8的
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 【你的key】 -storepass 【密码】-signedjar D:\apk\xxx-signed.apk D:\xxx\dist\xxx-unsign.apk 【key别名】
打完之后,你可以输入jarsigner -verify xxx.apk进行测试,如果显示