• 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


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

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

  • 相关阅读:
    Android studio USB连接失败
    BZOJ 1013 [JSOI2008]球形空间产生器sphere
    UVA1025
    noip2016天天爱跑步
    noip2015运输计划
    noip2012借教室
    BZOJ 1597: [Usaco2008 Mar]土地购买
    BZOJ1010: [HNOI2008]玩具装箱toy
    BZOJ1026: [SCOI2009]windy数
    BZOJ1801:[Ahoi2009]chess 中国象棋
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4636420.html
Copyright © 2020-2023  润新知