android JNI 验证签名

参考文章:

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);

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值