android JNI 验证签名

转载 2017年07月14日 10:38:54

参考文章:

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

}

                

android jni签名验证(一)

jni获取签名一般要传入一个context到jni中,然后通过jni进行签名的相关操作,
  • zhuanshenai
  • zhuanshenai
  • 2015-11-08 16:36:20
  • 1734

Andorid jni本地校验应用签名(MD5/SHA1)

编码环境:android API 19+Android studio功能:打开应用调用os库的init方法校验app是否被篡改! 流程: —>打开应用 —>os库中init方法 —>C层获取...
  • leifengpeng
  • leifengpeng
  • 2016-09-27 15:31:31
  • 1914

Android 使用jni校验应用签名sha1值,防止so文件逆向盗用

在日常开发中,我们会把一些关键的算法与数据使用c++编写,然后打包成so文件使用。下面举一个典型的例子extern "C" JNIEXPORT jstring JNICALL Java_com_aiz...
  • liyi0930
  • liyi0930
  • 2017-08-19 16:21:14
  • 577

Android Studio NDK 入门教程(6)--JNI签名验证防止恶意调用

JNI签名验证
  • venusic
  • venusic
  • 2016-08-28 19:34:16
  • 4780

Andoid NDK编程 2 - JNI签名规则

Andoid NDK编程 2 - JNI签名规则 Posted on 2015-07-02   |   In Android   |   http://zhixinliu.com/2015/0...
  • huangkangying
  • huangkangying
  • 2016-10-20 19:30:03
  • 1128

android jni类型和参数签名

jni中的签名参数是一个很麻烦的东西,稍不注意,应用就gg了。 格式是: (参数1类型标示;参数2类型标示;...参数n类型标示)返回值类型标示。 表1-1是常见的类型标示: 表1-1 ...
  • fwt336
  • fwt336
  • 2017-03-02 16:58:00
  • 619

Android JNI Java类型签名

Android Java 类型签名。JNI提供了Java和native代码相互交互的接口,当我们在底层访问Java类的域(成员变量)或者方法时,需要提供域或者方法描述符,比如,下面代码,...
  • u014088294
  • u014088294
  • 2016-05-24 16:04:47
  • 2110

android JNI调用过程中的方法签名规则

有了数据类型之间的对应关系,JNI就可以正确识别并转换Java类型,但是Java支持方法重载,仅靠函数名是无法唯一确定一个方法的。于是JNI提供了一套签名规则,用一个字符串来唯一确定一个方法。其规则如...
  • l503584896
  • l503584896
  • 2015-01-19 10:38:12
  • 816

android的JNI获得签名及AES加密方法

  • 2014年02月09日 11:31
  • 16KB
  • 下载

Android JNI 获取应用签名

使用Android JNI 获取应用签名。 根据获取的签名来生成自己的密码,这样可以防止别人反编译自己的源码后查找密码。 jstring Java_com_masonsdk_jni_JNIUtil_g...
  • u014077888
  • u014077888
  • 2014-06-02 10:54:43
  • 2904
收藏助手
不良信息举报
您举报文章:android JNI 验证签名
举报原因:
原因补充:

(最多只允许输入30个字)