Last active
November 3, 2019 09:09
-
-
Save b8x/0e9e33d933803ca5bbe7655ca9f46314 to your computer and use it in GitHub Desktop.
Android native get signature (cpp)
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
#include <jni.h> | |
#include <string> | |
extern "C" | |
JNIEXPORT jstring JNICALL | |
Java_me_axaygadekar_security_NativeSecurity_getSignatureFromJNI(JNIEnv *env, jclass nativeSecurityClass, | |
jobject context) { | |
// --------------- PackageManager | |
// context object class | |
jclass contextClass = env->GetObjectClass(context); | |
// package manager method id | |
jmethodID getPackageManagerMethodId = env->GetMethodID(contextClass, "getPackageManager", | |
"()Landroid/content/pm/PackageManager;"); | |
// package manager object | |
jobject packageManagerObject = env->CallObjectMethod(context, getPackageManagerMethodId); | |
// --------------- getting package name | |
// get package name method id | |
jmethodID getPackageNameMethodId = env->GetMethodID(contextClass, "getPackageName", | |
"()Ljava/lang/String;"); | |
// get package name | |
jstring packageName = (jstring) env->CallObjectMethod(context, getPackageNameMethodId); | |
// --------------- getting package info | |
// package manager class | |
jclass packageManagerClass = env->GetObjectClass(packageManagerObject); | |
// get package info method id | |
jmethodID getPackageInfoMethodId = env->GetMethodID(packageManagerClass, "getPackageInfo", | |
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"); | |
jint flags = 0x00000040; | |
jobject packageInfo = env->CallObjectMethod(packageManagerObject, getPackageInfoMethodId, | |
packageName, flags); | |
// --------------- getting signatures | |
// get package info class | |
jclass packageInfoClass = env->GetObjectClass(packageInfo); | |
// get field id | |
jfieldID signaturesFieldId = env->GetFieldID(packageInfoClass, "signatures", | |
"[Landroid/content/pm/Signature;"); | |
// get signatures objects | |
jobject signaturesObject = env->GetObjectField(packageInfo, signaturesFieldId); | |
jobjectArray signatures = reinterpret_cast<jobjectArray>(signaturesObject); | |
// --------------- getting signatures 0 | |
// get signature | |
jobject signature = env->GetObjectArrayElement(signatures, 0); | |
jclass signatureClass = env->GetObjectClass(signature); | |
jmethodID toCharsStringMethodId = env->GetMethodID(signatureClass, "toCharsString", | |
"()Ljava/lang/String;"); | |
jobject ts = env->CallObjectMethod(signature, toCharsStringMethodId); | |
return reinterpret_cast<jstring>(ts); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment