• Android JNI 获取应用程序签名


    采用Android JNI 获取应用程序签名。

    获取基础上生成自己的签名password,这可以防止别人反编译你自己的源代码查询password。

    jstring Java_com_masonsdk_jni_JNIUtil_getPWD(JNIEnv* env, jobject thizz
    		,jobject thiz
    		){
    
    
    		jclass native_clazz = env->GetObjectClass(thiz);
    
    	    // 得到 getPackageManager 方法的 ID
    	    jmethodID methodID_func =env->GetMethodID(native_clazz,"getPackageManager", "()Landroid/content/pm/PackageManager;");
    
    	    // 获得应用包的管理器
    	    jobject package_manager = env->CallObjectMethod(thiz, methodID_func);
    
    	    // 获得 PackageManager 类
    	    jclass pm_clazz = env->GetObjectClass(package_manager);
    
    	    // 得到 getPackageInfo 方法的 ID
    	    jmethodID methodID_pm = env->GetMethodID( pm_clazz,
    	            "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
    
    	    //获取包名
    	    jmethodID methodID_packagename =env->GetMethodID(native_clazz,"getPackageName", "()Ljava/lang/String;");
    	    jstring name_str = static_cast<jstring>(env->CallObjectMethod(thiz, methodID_packagename));
    
    
    
    	    // 获得应用包的信息
    	    jobject package_info = env->CallObjectMethod(package_manager,
    	            methodID_pm, name_str, 64);//env->NewStringUTF("com.example.contasdf")
    
    	    // 获得 PackageInfo 类
    	    jclass pi_clazz = env->GetObjectClass( package_info);
    
    	    // 获得签名数组属性的 ID
    	    jfieldID fieldID_signatures = env->GetFieldID( pi_clazz,
    	            "signatures", "[Landroid/content/pm/Signature;");
    
    	    // 得到签名数组,待改动
    	    jobject signatur = env->GetObjectField(package_info, fieldID_signatures);
    	    jobjectArray  signatures = reinterpret_cast<jobjectArray>(signatur);
    	    // 得到签名
    	    jobject signature = env->GetObjectArrayElement(signatures, 0);
    
    	    // 获得 Signature 类。待改动
    	    jclass s_clazz = env->GetObjectClass(signature);
    
    	    // 得到 hashCode 方法的 ID
    	    jmethodID methodID_hc = env->GetMethodID(s_clazz, "hashCode", "()I");
    
    	    // 获得应用包的管理器。待改动
    	    int hash_code = env->CallIntMethod(signature, methodID_hc);
    
    	    char str[100];
    
    	    sprintf(str, "%u", hash_code);
    	    return env->NewStringUTF(str);
    
    
    
    
    }

    源代码:

    https://github.com/mentor811/AndroidUltimateEncrypt


    【 声明:版权全部,欢迎转载,请勿用于商业用途。  --天盟】

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    笔记(二) C#sql语句
    [叩响C#之门]写给初学者:多线程系列(七)——互锁(Interlocked类)
    C# Async与Await的使用
    C#线程锁使用全功略
    一个C#的加锁解锁示例
    【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
    Control.BeginInvoke()和delegate的BeginInvoke()的区别
    crm04 action操作 和 多级过滤
    VIM和sed 替换字符串方法
    解决Centos关闭You have new mail in /var/spool/mail/root提示(转)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4871236.html
Copyright © 2020-2023  润新知