赞
踩
1、下载apktool_2.4.1。
2、将要修改的apk放在同一目录。执行命令如下: (解包)
java -jar apktool_2.4.1.jar d xxxx.apk
会生成一个新的文件夹:
3、修改AndroidManifest.xml中的包名,
将package后面的包名com.tencent.xxx改为你想要的新包名,我改为了com.aaa.tencentweb
将涉及原包名的com.tencent.xxx的相关activity的声明中的包名均改为新包名com.aaa.tencentweb
至于intent-filter里面的action名中包含原包名的,则可以不改,如果改的话,代码中也要相应的改变
另外,如果有provider,provider的authorities也得改,这个在同一手机上必须唯一,否则安装会失败
4、修改资源
如果只是修改apk相应的资源,例如图片,比较好办,在res文件夹下找到相应的文件替换就可以。
修改代码比较麻烦,因为反编译出来的结果中只有smali文件,即Java虚拟机支持的汇编语言。
如果确实需要修改代码,就得对照smali文件和从classes.dex反编译出来的源码了,按照smali的规范来改动即可。相当于写汇 编这个难度比较大。
5、重新打包
既然资源文件已经顺利的反编译出来了,那我们就可以适当的修改点东西了,例如换个图标啥的、改下布局文件等,执行命令:
apktool b xxxx -o ccc.apk
6、签名的意义(我在Kali Linux 签名的)
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
apk文件签名主要分为三个步骤,证书的创建-->签名生成-->优化(可选)
- keytool -genkey -v alias KeyName -keyalg RSA -keysize 2048 -validity 10000 -keystore KeyFileName.keystore
-
- keytool -genkey -v -alias 1 -keyalg RSA -keysize 2048 -validity 10000 -keystore 2
这行命令中一些重要的参数值说明如下:
KeyName:表示证书的别名
KeyFileName.keystore: 证书保存的文件名
10000: 表示证书的有效期,单位(天)
RSA:证书的加密类型,一般默认为RSA
其次在创建的过程中要填写一些基本的信息,证书密码等相关的信息。
证书生成后的查看
- keytool -list -alias KeyName -keystore KeyFileName.keystore
-
- keytool -list -keystore 2
对APK进行签名
- jarsigner -verbose -keystore KeyFileName.keystore sign_apk_file.apk KeyName
-
- jarsigner -verbose -keystore 2 xxx.apk 1
参数解释:
KeyFileName.keystore 已经生成号的证书
sign_apk_file.apk 需要签名的apk文件
KeyName 证书的别名
待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。
如果不想创建过程输出太多信息,可以删除“-verbose” 。
上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signed.apk,
只需将 signed.apk 改为
-signedjar signed.apk sign_old.akp
即可。
签名后可以使用如下命令验证是否签名成功:
jarsigner -verify signed.apk
如果需要查看更详细的验证信息,可修改为:
jarsigner -certs -verbose -verify signed.apk
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。