jarsigner 错误: java.lang.RuntimeException: 密钥库加载: Keystore was tampered with, or password was incorrect

字面上的意思就是keystore被篡改或者密码错误!这个报错源于jarsigner的暴力破解,一般情况下如果破解时候有提示你keystore的相关数据,就表示你是单纯的密码错误而不是keystore被篡改

首先恶补下几个命令,在之前的文章中有提到过的,一般是操作打空包标签时候会出现这个提示

jarsigner -verbose -keystore apknickname.keystore -signedjar TestSigned.apk TestSign.apk apknickname
上面的命令是打空包的命令《Android使用jarsigner配合keystore进行APK空包签名》详细见该文章

遇到这种提示后说明你的密码错了,这个时候你需要暴力破解《Android keystore 忘记密码怎么办?》文章中详细介绍了破解方式,而本文呢不是为了累赘重复之前的文章,而且把我自己成功的方法分享下,之前文章提到官方推荐的方法3用智能列表破解法,而我本次遇到这个问题是在apicloud环境中,说这个的主要原因是我忘记密码后apicloud至少能提供一个有效的限定,就是密码长度



大家注意去数这个, 这个跟你密码的长度是一致的,这种情况下我就不推荐智能方法了,而是推荐方法二就是字典法,而你要做的就是生成字典,我用了一个非常土的写法,大家可以参考下,举个例子你如果经常用aaaa123456bbb

aaaabbb123456、aaaaa12345678,这种格式配上大小写,如果你基本能确认头尾字符和整个密码词的构造,你可以自己编写一个算法去生成这个结构的所有密码,前提是aaaa bbb你能大概猜出来

<?php
$myfile = fopen("aabb1234list.txt", "w") or die("Unable to open file!");
for($a=0;$a<2;$a++){
	$atxt = $a==0?"a":"A";
	for($b=0;$b<2;$b++){
		$btxt = $atxt.($b==0?"a":"A");
		for($c=0;$c<2;$c++){
			$ctxt = $btxt.($c==0?"b":"B");
			for($d=0;$d<2;$d++){
				$dtxt = $ctxt.($d==0?"b":"B");
				
				for($h=0;$h<10000;$h++){
					if($h<10){
						$htxt = $dtxt."000".$h;
					}
					else if($h<100){
						$htxt = $gtxt."00".$h;
					}
					else if($h<1000){
						$htxt = $gtxt."0".$h;
					}
					else{
						$htxt = $gtxt.$h;
					}
					fwrite($myfile, $htxt."\n");
				}	
			}
		}
	}	
}	
fclose($myfile);
没时间优化算法,只是提供下解决思路,有遇到这类问题的朋友可以自己好好优化算法哈

Android使用jarsign...

操作APK认领时候需要进行APK的空包签名,这个时候就需要用到你之前发布版本的keystore文件,签名的命令不难,只要你有JDK的环境,并且将bin配置...

阅读全文