Android反编译apk,修改资源,打包,签名全过程

最近因为项目需要,需要将Android的手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的APK,下面我来介绍一下我的实现过程。

准备工作

1.系统配置好Java JDK环境变量
2.需要root权限的手机(针对系统自带apk,其他软件免root)

开始反编译

本文拿Android的系统里面的Settings.apk做演示,具体如何将APK获取出来在此就不过多介绍了,直接进入主题:
按键win + R输入cmd,打开命令窗口,并将路径切换到需要反编译的apk文件Settings.apk所在的路径,输入命令行 
apktool d -r Settings.apk
即可在该目录下生成一个设置文件夹,如图:


文件夹的变化如下图:

重新打包

此时反编译完成,我们可以打开设置文件夹,在里面对应的文件夹中修改或是替换里面的内容如文字或图片等,替换称自己的即可(如果需要改代码,则可打开对应的smali文件,找到对应的地方,把对应的汇编语言修改成自己的中文即可,因为这个是汇编语言,小编不会汇编,所以不敢误人子弟),替换完成之后,将路径切换到apktool下执行命令:   
apktool.bat b -o   < output.apk >   < input_dir >  
其中<output.apk>就是编译打包输出的新的apk文件如Settings_new.apk,而 <input_dir> 则是反编译得到的文件夹,如Settings,(注意这两个地方实际是文件所在路径,因为小编这个是在apktool的目录下直接操作的,故这样写,如果不在该根目录下的则需要替换成路径,且接下来的命令也要切换到apktool.bat所在的根目录下执行),如小编现在执行命令:
apktool.bat b -o Settings_new.apk Settings

执行完该命令之后会在该路径下生成一个Settings_new.apk文件,此文件就是新打包得到的apk文件,如图:


签名

签名的方式在这里我介绍两种方式:
方式一:
将编译打包新生成的Settings_new.apk文件复制到auto-sign的根目录下,然后将路径切换到auto-sign根目录并执行命令:
java -jar signapk.jar testkey.x509.pem testkey.pk8 Settings_new.apk Settings.apk

在auto-sign根目录下会生成一个Settings.apk文件,如图所示:
接下来则可将该文件夹替换掉刷机包里面原来的那个即可。

方式二:
       (1)  生成keystore文,首先,签名需要keystore文件,可以使用keytool工具生成,一般Java环境都带有keytool命令,可以在命令行测试。在任意路径下执行命令(小编还是在apktool根目录下):
keytool -genkey -alias settings.keystore -keyalg RSA -validity 40000 -keystore settings.keystore


命令执行完之后会在该目录下生成一个settings.keystore文件

各个参数解释如下:

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

(2)开始签名

输入并执行以下命令则可进行签名:

jarsigner -verbose -keystore settings.keystore Settings_new.apk settings.keystore

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

如下如所示

待签名命令执行完成之后,则签名完成,此时的Settings_new.apk就是签名过的,然后将其重命名之后复制替换系统刷机包原来的即可。
至此,整个流程已经完成了。

查看源码

如果我们想看某个应用里面的某个东西具体实现的代码,我们可以反编译进行查看他的源码,不过大多数的应用都是经过混淆,加固的,反编译出来的可能代码已经变得面目全非了,但是我们还是要掌握这个过程。
需要用到两个工具 dex2jar jadx-gui (用于代码查看),这两个工具都在apktool压缩包中。
(1)将需要反编译的应用文件的后缀名.apk换成.rar,然后解压到一个文件夹中,在文件夹中得到一个classes.dex文件
(2)将classes.dex复制到解压后的dex2jar-0.0.9.15文件夹中,并在命令窗口中切换路径到该根目录下,并执行命令:
d2j-dex2jar .bat  类.dex
在该目录下生成由classes.dex反编译得到的JAR文件,类-dex2jar.jar,然后运行jadx桂中仓下的jadx-gui.bat,打开类 - dex2jar.jar文件,即可查看源码,如图:

compile-反 并不是窃取人家的劳动成果,一个而是 资源共享,学习相互 的过 程。 偷笑

猜你喜欢

转载自blog.csdn.net/qwl755/article/details/80806325