• 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


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

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

  • 相关阅读:
    Github访问失败如何解决
    持续交付发布可靠软件的系统方法
    windows上tomcat部署
    软件测试总结
    CentOS cannot find a valid baseurl for repo base/7/x86_64
    姜碧野写给纪中信息学学弟学妹的信
    2022 纪中集训 7.6
    2022 纪中集训7.7
    2022 纪中集训 7.8
    2022 纪中集训 7.11 笔记
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4871236.html
Copyright © 2020-2023  润新知