参考文章:
http://blog.csdn.net/venusic/article/details/52347316/
http://blog.csdn.net/lzj_lzj2014/article/details/73872670
把关键数据使用C来保存增加破译难度
代码如下:
Java_com_adrotation_utils_JNIUtils_getPublicKey(JNIEnv *env, jobject, jobject contextObject,
jint signHashCode) {
jclass native_class = env->GetObjectClass(contextObject);
jmethodID pm_id = env->GetMethodID(native_class, "getPackageManager",
"()Landroid/content/pm/PackageManager;");
jobject pm_obj = env->CallObjectMethod(contextObject, pm_id);
jclass pm_clazz = env->GetObjectClass(pm_obj);
// getPackageInfo ID
jmethodID package_info_id = env->GetMethodID(pm_clazz, "getPackageInfo",
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
jclass native_classs = env->GetObjectClass(contextObject);
jmethodID mId = env->GetMethodID(native_classs, "getPackageName", "()Ljava/lang/String;");
jstring pkg_str = static_cast<jstring>(env->CallObjectMethod(contextObject, mId));
// package info
jobject pi_obj = env->CallObjectMethod(pm_obj, package_info_id, pkg_str, 64);
// PackageInfo calss
jclass pi_clazz = env->GetObjectClass(pi_obj);
// signature ID
jfieldID signatures_fieldId = env->GetFieldID(pi_clazz, "signatures",
"[Landroid/content/pm/Signature;");
jobject signatures_obj = env->GetObjectField(pi_obj, signatures_fieldId);
jobjectArray signaturesArray = (jobjectArray) signatures_obj;
//jsize size = env->GetArrayLength(signaturesArray);
jobject signature_obj = env->GetObjectArrayElement(signaturesArray, 0);
jclass signature_clazz = env->GetObjectClass(signature_obj);
//check out hashCode
jmethodID string_id = env->GetMethodID(signature_clazz, "toCharsString",
"()Ljava/lang/String;");
jstring str = static_cast<jstring>(env->CallObjectMethod(signature_obj, string_id));
char *c_msg = (char *) env->GetStringUTFChars(str, 0);
if (strcmp(c_msg, RELEASE_SIGN) == 0)//
{
char *str = "key";
jstring PUBLIC_KEY = env->NewStringUTF(str);
return PUBLIC_KEY;
} else {
return NULL;
}
别忘了加载
static {
System.loadLibrary("native-lib");
}
Java_com_adrotation_utils_JNIUtils_getPublicKey方法名 记得和java中的 包名类名方法名对应ok的会有标记点击可切换
package com.adrotation.utils; /** * Created by SeanZ on 2016/12/16. */ public class JNIUtils { public static native String getPublicKey(Object obj); }