Android通过NDK获取Keystore签名值 .
来源:互联网 发布:js before 编辑:程序博客网 时间:2024/05/20 23:31
防止别人反编译自已的游戏再修改然后发布,我们可以用在so文件中用Keystore签名值来加密一些参数。
这里只提供NDK获取Keystore签名值代码
CSDN里有这文章,我收藏老提示我网络错误,就给转过来了。
原地址:http://blog.csdn.net/chenfeng0104/article/details/21641427
- 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);
- }
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 <jni.h>
- #include<android/log.h>
- #include <string.h>
- #include <unistd.h>
- 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;
- }
0 0
- Android通过NDK获取Keystore签名值
- Android通过NDK获取Keystore签名值
- Android通过NDK获取Keystore签名值 .
- 获取keystore.keystore 签名
- Android之Keystore文件签名(获取查看apk签名)
- Android之Keystore文件签名(获取查看apk签名)
- Android之Keystore文件签名(获取查看apk签名)
- Android之Keystore文件签名(获取查看apk签名)
- Android签名生成keystore
- Android 签名keystore
- Android KeyStore签名生成
- Android studio 上获取应用签名文件(keystore文件)的MD5值
- android 使用keystore 签名apk
- Mac Android签名生成keystore
- 查看Android keystore签名信息
- 修改android签名证书keystore
- Android KeyStore理解及签名
- Mac Android签名生成keystore
- 再谈高级面向对象编程之抽象类和方法
- 冒泡排序算法
- 初识Hadoop
- 按照范围过滤所使用的类是Lucene的RangeFilter
- mp4 文件格式系列
- Android通过NDK获取Keystore签名值 .
- [转载]Ogre中的内存泄露
- Hibernate,JPA 对象关系映射之关联关系映射策略
- gvim下的常识性知识
- Kinect V2 开发专题(3)设备信息获取与音频功能探索
- JavaScript与.Net MVC的一次纠结之旅
- Android 自定义Adapter的ListView
- ASP.NET的SqlBulkCopy用法
- 【网络组件】接受连接Acceptor