-
-
Save Laymer/816546bf4d4b96d22e4174b63c913052 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bool checkCert(JNIEnv *env, jobject contextObject) { | |
jclass contextTemp = env->FindClass("android/content/Context"); | |
jclass contextClass = (jclass) env->NewGlobalRef(contextTemp); | |
jmethodID getPackageManager = env->GetMethodID(contextClass, | |
"getPackageManager", | |
"()Landroid/content/pm/PackageManager;"); | |
jobject share = (jobject) env->CallObjectMethod(contextObject, getPackageManager); | |
jmethodID getPackageName = env->GetMethodID(contextClass, "getPackageName", | |
"()Ljava/lang/String;"); | |
jstring packageName = (jstring) env->CallObjectMethod(contextObject, getPackageName); | |
jclass clazz = env->FindClass("android/content/pm/PackageManager"); | |
jfieldID GET_SIGNATURESfid = env->GetStaticFieldID(clazz, "GET_SIGNATURES", "I"); | |
jint GET_SIGNATURES = env->GetStaticIntField(clazz, GET_SIGNATURESfid); | |
jclass PackageManagerObj = (jclass) env->NewGlobalRef(clazz); | |
jmethodID getPackageInfoId = env->GetMethodID(PackageManagerObj, "getPackageInfo", | |
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"); | |
jobject getPackageInfoObject = (jobject) env->CallObjectMethod(share, getPackageInfoId, | |
packageName, GET_SIGNATURES); | |
jclass packageInfoClass = env->FindClass("android/content/pm/PackageInfo"); | |
jfieldID signatures = env->GetFieldID(packageInfoClass, "signatures", | |
"[Landroid/content/pm/Signature;"); | |
jobjectArray rows = reinterpret_cast<jobjectArray>( | |
env->GetObjectField(getPackageInfoObject, signatures)); | |
int size = env->GetArrayLength(rows); | |
jclass signaturesClass = env->FindClass("android/content/pm/Signature"); | |
jclass mEssage = env->FindClass("java/security/MessageDigest"); | |
jclass MessageDigestClass = (jclass) env->NewGlobalRef(mEssage); | |
jmethodID mGetInstance = env->GetStaticMethodID(MessageDigestClass, "getInstance", | |
"(Ljava/lang/String;)Ljava/security/MessageDigest;"); | |
jmethodID updateMethod = env->GetMethodID(MessageDigestClass, "update", "([B)V"); | |
jmethodID toByteArrayMethod = env->GetMethodID(signaturesClass, "toByteArray", "()[B"); | |
jclass tempBase64 = env->FindClass("android/util/Base64"); | |
jclass Base64Class = (jclass) env->NewGlobalRef(tempBase64); | |
jmethodID encodeToStringID = env->GetStaticMethodID(Base64Class, "encodeToString", | |
"([BI)Ljava/lang/String;"); | |
jmethodID digest = env->GetMethodID(MessageDigestClass, "digest", "()[B"); | |
for (int i = 0; i < size; i++) { | |
jobject messageDigest = env->CallStaticObjectMethod(MessageDigestClass, mGetInstance, | |
env->NewStringUTF("SHA")); | |
jobject signature = env->GetObjectArrayElement(rows, i); | |
env->CallVoidMethod(messageDigest, updateMethod, | |
(jbyteArray) env->CallObjectMethod(signature, toByteArrayMethod)); | |
jstring signedCert = (jstring) env->CallStaticObjectMethod(Base64Class, encodeToStringID, | |
env->CallObjectMethod(messageDigest, digest), | |
(jint) 0); | |
std::string signedCertStr = jstring2string(env, signedCert); | |
std::string referenceCert = "yourReleaseSigningCertificate"; | |
return signedCertStr == referenceCert; | |
} | |
return false; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment