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
  • 1593

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

JNI签名验证
  • venusic
  • venusic
  • 2016年08月28日 19:34
  • 4177

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

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

android jni类型和参数签名

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

Android中使用JNI获得APK签名的哈希值

最近在研究android应用中的安全问题,貌似只有将核心代码写到JNI底层才是最安全的。通过底层来判断签名是否正确,如果正确则继续执行核心代码,否则退出程序。所以这里的关键就是如何在JNI中获得签名。...
  • iloveyoueveryday
  • iloveyoueveryday
  • 2014年02月10日 14:36
  • 8424

Android签名机制之---签名验证过程详解

今天是元旦前夕,也是Single Dog的嚎叫之日,只能写博客来祛除寂寞了,今天我们继续来看一下Android中的签名机制的姊妹篇:Android中是如何验证一个Apk的签名。在前一篇文章中我们介绍了...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年01月01日 09:52
  • 25701

JNI函数签名表

2.4.3 JNI方法签名规则 有了数据类型之间的对应关系,JNI就可以正确识别并转换Java类型。那JNI又是如何识别Java的方法呢? Java支持方法重载,仅靠函数名是无法唯一确定一...
  • u010319687
  • u010319687
  • 2015年05月13日 17:50
  • 3121

android JNI学习-接口-函数-JNI签名类型定义

android中很多Java类都具有native接口,这些接口由本地实现,然后注册到系统中。      主要的JNI代码放在以下的路径中:frameworks/base/core/jni/,这个路径...
  • xunice
  • xunice
  • 2014年06月26日 15:56
  • 693

android 增加自己的应用签名校验

需求:在android原本的签名校验系统中,添加自己的校验过程。Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解Android数字证书,需要先了解以下数字证书的概念和jav...
  • myvest
  • myvest
  • 2016年12月06日 14:35
  • 2631

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
  • 941
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android JNI 验证签名
举报原因:
原因补充:

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