Android通过NDK获取Keystore签名值
16lz
2021-01-26
防止别人反编译自已的游戏再修改然后发布,我们可以用在so文件中用Keystore签名值来加密一些参数。
这里只提供NDK获取Keystore签名值代码
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);}
#include #include#include #include extern "C"JNIEXPORT jstring JNICALL Java_com_boyaa_ndk_RegionGames_signData(JNIEnv *env, jclass jcl,jobject context_object) {jclass context_class = env->GetObjectClass(context_object);//context.getPackageManager()jmethodID methodId = env->GetMethodID(context_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");jobject package_manager_object = env->CallObjectMethod(context_object, methodId); if (package_manager_object == NULL) { __android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageManager() Failed!"); return NULL; } //context.getPackageName() methodId = env->GetMethodID(context_class, "getPackageName", "()Ljava/lang/String;");jstring package_name_string = (jstring)env->CallObjectMethod(context_object, methodId);if (package_name_string == NULL) {__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageName() Failed!");return NULL;}env->DeleteLocalRef(context_class);//PackageManager.getPackageInfo(Sting, int)jclass pack_manager_class = env->GetObjectClass(package_manager_object);methodId = env->GetMethodID(pack_manager_class, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");env->DeleteLocalRef(pack_manager_class);jobject package_info_object = env->CallObjectMethod(package_manager_object, methodId, package_name_string, 64);if (package_info_object == NULL) {__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageInfo() Failed!");return NULL;}env->DeleteLocalRef(package_manager_object);//PackageInfo.signatures[0]jclass package_info_class = env->GetObjectClass(package_info_object);jfieldID fieldId = env->GetFieldID(package_info_class, "signatures", "[Landroid/content/pm/Signature;");env->DeleteLocalRef(package_info_class);jobjectArray signature_object_array = (jobjectArray)env->GetObjectField(package_info_object, fieldId);if (signature_object_array == NULL) {__android_log_print(ANDROID_LOG_INFO, "JNITag","PackageInfo.signatures[] is null");return NULL;}jobject signature_object = env->GetObjectArrayElement(signature_object_array, 0);env->DeleteLocalRef(package_info_object);//Signature.toCharsString()jclass signature_class = env->GetObjectClass(signature_object);methodId = env->GetMethodID(signature_class, "toCharsString", "()Ljava/lang/String;");env->DeleteLocalRef(signature_class);jstring signature_string = (jstring) env->CallObjectMethod(signature_object, methodId);return signature_string;}
更多相关文章
- android中生成keystore
- Google Map无法显示:Error contacting Google servers. XXX authe
- Android(安卓)Studio 配置签名
- QQ android 登录模块简单分析
- [置顶] 实现android应用程序自动打包(Ant+proguard+签名)
- Android自带的signapk.jar + .x509.pem + .pk8签名应用程序
- 05. Android多渠道打包(友盟)
- 获取数字签名(.keystore)SHA1、MD5值
- 使用javah和javap得到JNI接口的签名