Android通过NDK获取Keystore签名值 .

防止别人反编译自已的游戏再修改然后发布,我们可以用在so文件中用Keystore签名值来加密一些参数。

这里只提供NDK获取Keystore签名值代码

CSDN里有这文章,我收藏老提示我网络错误,就给转过来了。

原地址:http://blog.csdn.net/chenfeng0104/article/details/21641427

  1. package com.boyaa.ndk;  
  2.   
  3. import android.content.Context;  
  4.   
  5. public class RegionGames {  
  6.     static {  
  7.         try {  
  8.             System.loadLibrary("boyaaregiongames");  
  9.         } catch (Throwable e) {  
  10.             e.printStackTrace();  
  11.         }  
  12.     }  
  13.   
  14.     public static native String getSign(Context ctx);  
  15. }  
package com.boyaa.ndk;

import android.content.Context;

public class RegionGames {
	static {
		try {
			System.loadLibrary("boyaaregiongames");
		} catch (Throwable e) {
			e.printStackTrace();
		}
	}

	public static native String getSign(Context ctx);
}


 

  1. #include <jni.h>   
  2. #include<android/log.h>   
  3. #include <string.h>   
  4. #include <unistd.h>   
  5.   
  6. extern "C"  
  7. JNIEXPORT jstring JNICALL Java_com_boyaa_ndk_RegionGames_signData(JNIEnv *env, jclass jcl,  
  8.         jobject context_object) {  
  9.     jclass context_class = env->GetObjectClass(context_object);  
  10.   
  11.         //context.getPackageManager()   
  12.         jmethodID methodId = env->GetMethodID(context_class, "getPackageManager""()Landroid/content/pm/PackageManager;");  
  13.         jobject package_manager_object = env->CallObjectMethod(context_object, methodId);  
  14.         if (package_manager_object == NULL) {  
  15.             __android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageManager() Failed!");  
  16.             return NULL;  
  17.         }  
  18.   
  19.         //context.getPackageName()   
  20.         methodId = env->GetMethodID(context_class, "getPackageName""()Ljava/lang/String;");  
  21.         jstring package_name_string = (jstring)env->CallObjectMethod(context_object, methodId);  
  22.         if (package_name_string == NULL) {  
  23.             __android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageName() Failed!");  
  24.             return NULL;  
  25.         }  
  26.   
  27.         env->DeleteLocalRef(context_class);  
  28.   
  29.         //PackageManager.getPackageInfo(Sting, int)   
  30.         jclass pack_manager_class = env->GetObjectClass(package_manager_object);  
  31.         methodId = env->GetMethodID(pack_manager_class, "getPackageInfo""(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");  
  32.         env->DeleteLocalRef(pack_manager_class);  
  33.         jobject package_info_object = env->CallObjectMethod(package_manager_object, methodId, package_name_string, 64);  
  34.         if (package_info_object == NULL) {  
  35.             __android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageInfo() Failed!");  
  36.             return NULL;  
  37.         }  
  38.   
  39.         env->DeleteLocalRef(package_manager_object);  
  40.   
  41.         //PackageInfo.signatures[0]   
  42.         jclass package_info_class = env->GetObjectClass(package_info_object);  
  43.         jfieldID fieldId = env->GetFieldID(package_info_class, "signatures""[Landroid/content/pm/Signature;");  
  44.         env->DeleteLocalRef(package_info_class);  
  45.         jobjectArray signature_object_array = (jobjectArray)env->GetObjectField(package_info_object, fieldId);  
  46.         if (signature_object_array == NULL) {  
  47.             __android_log_print(ANDROID_LOG_INFO, "JNITag","PackageInfo.signatures[] is null");  
  48.             return NULL;  
  49.         }  
  50.         jobject signature_object = env->GetObjectArrayElement(signature_object_array, 0);  
  51.   
  52.         env->DeleteLocalRef(package_info_object);  
  53.   
  54.         //Signature.toCharsString()   
  55.         jclass signature_class = env->GetObjectClass(signature_object);  
  56.         methodId = env->GetMethodID(signature_class, "toCharsString""()Ljava/lang/String;");  
  57.         env->DeleteLocalRef(signature_class);  
  58.         jstring signature_string = (jstring) env->CallObjectMethod(signature_object, methodId);  
  59.   
  60.         return signature_string;  
  61. }  

猜你喜欢

转载自blog.csdn.net/fghydx/article/details/44856735