⑴ APK重新签名或者更换APK签名版本
在某些特殊情况下,需要对已经生成的apk进行重新签名,或者对已经生成的apk更换签名版本(v1/v2/v3/v4)。如何实现呢? 可以通过命令行对已生成的apk进行处理。
apksigner.jar通常包含在android SDK中可。路径一般是在Android SDK/build-tools/ {SDK版本} /lib/apksigner.jar
不同的SDK版本中均有一个,取最新版本的就好了。
使用压缩软件打开apk,删除包内 /META-INF/ 文件夹及文件夹内所有文件,并重新压缩文件。
准备好签名证书及相关密码和需要刚处理过得apk文件
示例:
执行命令
接着输入证书保护密码及别名密码。
可以从此命令的输出中看出当前生成的apk签名情况。
可以通过如下命令行参数进行控制
--v1-signing-enabled true
--v2-signing-enabled true
--v3-signing-enabled false
使用的签名版本还跟apk编译时使用的最低SDK版本有关, 即min-sdk-version的值。如果设置的值大于等于26,即使添加--v1-signing-enabled true 也无法通过上述步骤签V1版本的签名--仅有V2签名(Android Studio也是)。
可以对最后生成的apk通过执行如下命令尝试:
⑵ deodex化apk后需要签名吗
需要重新签名,因为deodex后apk文件中又增加了一个classes.dex文件,所以要重新签名。
⑶ 安卓APP在应用市场加固之后怎么重新签名
可以使用jarsigner对未签名的加固包进行签名。
建议使用之前对APP签名时使用的keystore对加固包进行签名
jarsigner -digestalg SHA1 -sigalg MD5withRSA -verbose -keystore [your_key_store_path] -signedjar
[signed_apk_name] [usigned_apk_name] [your_key_store_alias]
your_key_store_path:密钥所在位置的绝对路径
signed_apk_name:签名后安装包名称
usigned_apk_name:未签名的安装包名称
your_key_store_alias:密钥的别名 就是你自己创建的 .keystore文件
⑷ 怎么给修改后的apk重新签名
1、首先我们要对apk文件进行改名与后缀,将其连同后缀一起改掉,如1.zip。
2、这时文件就变成一个zip压缩包了,可提取解压这个压缩包,打开这个解压的文件,会看到里面构成程序文件的很多东西,然后根据网上教程对程序进行简要修改。
(当然如果要反编译的话就不是这样子了,不过直接解压也是可以修改很多东西的),这里修改操作建议在电脑端完成比较方便,修改后重新将这些文件压缩成zip格式。
3、下载安装ZipSigner手机签名工具,并打开。
4、点击输入,浏览文件目录找到刚修改好并重新压缩的zip文件,在输出选项可以修改其名称,然后点击签名,模式为auto-testkey就可以了,等一会就签名未完成了。
apk文件结构:
1、META-INF(注:Jar文件中常可以看到)。
2、res(注:存放资源文件的目录)。
3、AndroidManifest.xml(注:程序全局配置文件)。
4、classes.dex(注:Dalvik字节码)。
5、resources.arsc(注:编译后的二进制资源文件)。
⑸ 对未签名的 APK 重签名
在对某个 APP 进行逆向时,最后一步将修改应用到 APK 中往往会生成未签名的 APK,而 Android 要求每个 APK 都必须要有签名才能被安装,因此我们需要对未签名的 APK 进行签名
在 keytool 所在的文件夹下(通常是 C:\Program Files\Java\jdk1.8.0_101\bin 之类的)以管理员身份执行如下命令
-keystore reverse_engineer.keystore 表示生成的数字证书的文件名为 "reverse_engineer.keystore";
-alias rekeystore 表示证书的别名为 "rekeystore",可以与 keystore 一样;
-keyalg RSA 表示生成密钥文件所采用的算法为 RSA;
-validity 10000 表示该数字证书的有效期为10000天,意味着10000天之后该证书将失效;
然后根据提示输入密钥、地区等信息。最终,这条命令将生成名为 reverse_engineer.keystore 的数字证书
将数字证书拷贝到需要签名的 apk 的目录下,在 jarsigner 所在的文件夹下(通常是 C:\Program Files\Java\jdk1.8.0_101\bin 之类的)以管理员身份执行如下命令执行如下命令
-keystore 表示使用当前目录中的 reverse_engineer.keystore 签名证书文件;
-storepass 密钥口令;
-signedjar crackme02_release.apk表示签名后生成的APK名称;
crackme02.apk 表示未签名的APK;
rekeystore 表示 reverse_engineer.keystore 的别名
如果你不是被逆向的 APP 的作者,那么你重签名时使用的私钥在绝大多数情况下不会和逆向前的 APP 相同。在 Android 的安全策略下,这样的 APP 是不能被安装的,因此需要将之前的 APP 卸载掉,才能将重新打包后的 APK 重新安装到 Android 设备上
参考文章:
Android反编译(三)之重签名
⑹ APP老是需要重签
iOS企业签名最大的弊端就是会掉签,需要重签。
ios App掉签后,必须要重新签名,用户重新下载安装后,才能继续使用。打开手机浏览器,搜索微导流,进入微导流手机网站,点击右上角进行登录或注册。点击企业签名,创建企业签名。
软件掉签的意思就是iOS签名失效,iOS签名失效后,也就是说明已经下载应用的用户就不能继续使用了,软件无法打开。
⑺ 怎样修改apk不需要重新签名 【直接在安装包里面改 拖文件进去时跳出的窗口怎么选⊙▽⊙】
直接在安装包里修改后的APK文件是不能正确安装的!!想修改的话,通过反编译APK文件,再修改,回编译,重新签名打包成APK文件安装
⑻ apk重新签名其他人还需要签名吗
apk重新签名其他人不需要重新签名。apk是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。
⑼ 安卓开发 导出apk文件 一定要设置签名吗
不需要签名的
生成apk最懒惰的方法是:
只要你运行过android项目,到工作目录的bin文件夹下就能找到与项目同名的apk文件,这种apk默认是已经使用debug用户签名的。
如果想要自己给apk签名:
签名的意义
为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
2.签名的步骤
a.创建key
b.使用步骤a中产生的key对apk签名
3.具体操作
方法一: 命令行下对apk签名(原理)
创建key,需要用到keytool.exe (位于jdk1.6.0_24jrein目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于jdk1.6.0_24in目录下),把上两个软件所在的目录添加到环境变量path后,打开cmd输入
D:>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore/*说明:-genkey 产生密钥 -alias demo.keystore 别名 demo.keystore -keyalg RSA 使用RSA算法对签名加密 -validity 40000 有效期限4000天 -keystore demo.keystore */D:>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore/*说明:-verbose 输出签名的详细信息 -keystoredemo.keystore 密钥库位置 -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore.*/
注意事项:android工程的bin目录下的demo.apk默认是已经使用debug用户签名的,所以不能使用上述步骤对此文件再次签名。正确步骤应该是:在工程点击右键->Anroid Tools-Export Unsigned Application Package导出的apk采用上述步骤签名。
方法二:使用Eclipse导出带签名的apk
Eclipse直接能导出带签名的最终apk,非常方便,推荐使用,步骤如下:
第一步:导出。
第六步:Next,Next,结束!
方法三:使用IntelliJ IDEA导出带签名的apk
方法步骤基本和Eclipse相同,大概操作路径是:菜单Tools->Andrdoid->Export signed apk。
4.签名之后,用zipalign(压缩对齐)优化你的APK文件。
未签名的apk不能使用,也不能优化。签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows ools目录下)工具对其优化:
D:>zipalign -v 4 demo_signed.apk final.apk
如上,zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值),这样android系统就可以使用mmap()(请自行查阅这个函数的用途)函数读取文件,可以在读取资源上获得较高的性能,
PS:1.在4个字节边界上对齐的意思就是,一般来说,是指编译器吧4个字节作为一个单位来进行读取的结果,这样的话,CPU能够对变量进行高效、快速的访问(较之前不对齐)。
2.对齐的根源:android系统中的Davlik虚拟机使用自己专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,可以进一步用"对齐"进一步优化,但是大小一般会有所增加。
5.签名对你的App的影响。
你不可能只做一个APP,你可能有一个宏伟的战略工程,想要在生活,服务,游戏,系统各个领域都想插足的话,你不可能只做一个APP,谷歌建议你把你所有的APP都使用同一个签名证书。
使用你自己的同一个签名证书,就没有人能够覆盖你的应用程序,即使包名相同,所以影响有:
1) App升级。 使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。
2) App模块化。android系统允许具有相同的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路。
3) 允许代码和数据共享。android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享,如下:
AndroidManifest.xml:<permission android:protectionLevel="normal" />
其中protectionLevel标签有4种值:normal(缺省值),dangerous, signature,signatureOrSystem。简单来说,normal是低风险的,所有的App不能访问和共享此App。dangerous是高风险的,所有的App都能访问和共享此App。signature是指具有相同签名的App可以访问和共享此App。signatureOrSystem是指系统image中App和具有相同签名的App可以访问和共享此App,谷歌建议不要使用这个选项,因为签名就足够了,一般这个许可会被用在在一个image中需要共享一些特定的功能的情况下。
⑽ 在android系统中,怎么反编译系统APK文件而不破坏以前的签名就是不需要在重新编译后签名。
ApkDec-Release-0.1 试试这个工具