Android通过NDK获取Keystore签名值 .

本文介绍了如何在游戏开发中利用NDK获取Keystore签名进行参数加密,防止他人反编译修改并发布。通过优快云文章整理,详细解释了从上下文中加载库、获取签名等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

原地址:http://blog.youkuaiyun.com/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. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值