各路大神的签名校验合集
内置7种签名校验方法,5种在java层,2种在so层
都非常简单,不需要IDA,不需要调试
1.普通的签名校验(MD5计算)
2.校验Application(检查是否被动态代{过}{滤}理)
3.提早检测(在调用attachBaseContext之前检测签名)
4.检测PM代{过}{滤}理(检查IPackageManager有没有被动态代{过}{滤}理)
5.较新的API检测(用API28以上的新API去获取)
6.普通校验sha1值(so层,不过这个延迟3秒退出程序)
7.普通签名校验(so层)
MT一键去签名校验无法完美通过,过60加固签名校验方法也无法完美通过
总共涉及3个MD5,通用方法生成的,我把工具类放出来,也可以把自己的签名转换md5替换我的,也可以达到过签名校验
成功条件,修改红框文本,并过签名校验,让所有都显示通过
(核心破解以及只改显示字符串不算)
仅简单混淆了一下,再加一个乐固版本
练手之作,大神勿喷
[Asm] 纯文本查看 复制代码 //生成大写的MD5
public static String MD5(String str) {
char hexDigits[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
'e', 'f' };
try {
byte[] strTemp = str.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte tmp[] = mdTemp.digest();
char strs[] = new char[16 * 2];
int k = 0;
for (int i = 0; i < 16; i++) {
byte byte0 = tmp[i];
strs[k++] = hexDigits[byte0 >>> 4 & 0xf];
strs[k++] = hexDigits[byte0 & 0xf];
}
return new String(strs).toUpperCase();
} catch (Exception e) {
return null;
}
}
[Asm] 纯文本查看 复制代码 //生成小写的MD5
public static String MD55(String sourceStr) {
String result = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(sourceStr.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
result = buf.toString();
} catch (NoSuchAlgorithmException e) {
System.out.println(e);
}
return result;
}
[Asm] 纯文本查看 复制代码 //其中MyApplication类中的是sign转base64转换过的
public class Base64Util {
/**
* 二进制数组 编码成 二进制数组
* [url=home.php?mod=space&uid=952169]@Param[/url] input
* @return
*/
public static byte[] encodeToBytes(byte[] input) {
return Base64.encode(input, Base64.NO_WRAP);
}
/**
* 二进制数组 编码成 字符串
* @param input
* @return
*/
public static String encodeToString(byte[] input) {
return Base64.encodeToString(input, Base64.NO_WRAP);
}
/**
* 二进制数组 解码成 二进制数组
* @param input
* @return
*/
public static byte[] decode(byte[] input) {
return Base64.decode(input, Base64.NO_WRAP);
}
/**
* 字符串 解码成 二进制数组
* @return
*/
public static byte[] decode(String str) {
return Base64.decode(str, Base64.NO_WRAP);
}
}
|