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

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

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

时间: 2024-10-12 14:14:27

Android JNI 获取应用程序签名的相关文章

Android JNI 获取应用签名

使用Android JNI 获取应用签名. 根据获取的签名来生成自己的密码,这样可以防止别人反编译自己的源码后查找密码. jstring Java_com_masonsdk_jni_JNIUtil_getPWD(JNIEnv* env, jobject thizz ,jobject thiz ){ jclass native_clazz = env->GetObjectClass(thiz); // 得到 getPackageManager 方法的 ID jmethodID methodID_f

Android中获取应用程序(包)的大小-----PackageManager的使用(二)

通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识. 本部分的内容是如何获取安装包得大小,包括缓存大小(cachesize).数据大小(datasize).应用程序大小(codesize). 本部分的知识点涉及到AIDL.Java反射机制.理解起来也不是很难. 关于安装包得大小信息封装在Packag

Android中获取应用程序(包)的信息----PackageManager

本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:   第一部分: 获取应用程序的packagename.label.icon等 :             第二部分:获取应用程序的占用大小,包括:缓存大小(cachsize).数据大小(datasize). 每部分都为您准备了简单丰富的实例,您一定不会错过. Android系统为我们提供了很多服务管理的类,包括ActivityManager.Po

Android中获取应用程序(包)的信息-----PackageManager的使用(一)

本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:  第一部分: 获取应用程序的packagename.label.icon等 :             第二部分:获取应用程序的占用大小,包括:缓存大小(cachsize).数据大小(datasize). 每部分都为您准备了简单丰富的实例,您一定不会错过. Android系统为我们提供了很多服务管理的类,包括ActivityManager.Pow

Android实现获取应用程序相关信息列表的方法

本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性.大小和应用程序路径.应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程序,同时在获取到应用信息的时候,判断是不是系统的应用程序,这是一个应用管理器所必需具备的功能. 具体实现代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Android中获取应用程序(包)的信息

本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:  第一部分: 获取应用程序的packagename.label.icon等 :             第二部分:获取应用程序的占用大小,包括:缓存大小(cachsize).数据大小(datasize). 每部分都为您准备了简单丰富的实例,您一定不会错过. Android系统为我们提供了很多服务管理的类,包括ActivityManager.Pow

【Android】获取应用程序的版本号

主要是对PackageManager的运用,但是要注意的一点是不要忘记catch一下NameNotFoundException. 代码: //获取到当前应用程序的版本号 public int getAppVersion(Context context){ try{ PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); return info.versionCode;

Android JNI 增强应用程序性能

JNI全称Java Native Interface. 它为托管代码(使用Java编程语言编写)与本地代码(使用C/C++编写)提供了一种交互方式.它是与厂商无关的(vendor-neutral),支持从动态共享库中加载代码,虽然这样会稍显麻烦,但有时这是相当有效的. 如果你对JNI还不是太熟悉,可以先通读Java Native Interface Specification这篇文章(http://docs.oracle.com/javase/7/docs/technotes/guides/jn

android应用程序签名(转)

概述 Android系统要求,所有的程序经过数字签名后才能安装.Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系.证书不是用于用户控制哪些程序可以安装.证书不需要授权中心来签名:Android应用程序上使用自己签名的证书是完全允许且普遍的. 理解Android应用程序签名有以下几个重要点: 所有的应用程序都必须签名.系统不会安装任何一个不签名的程序. 你可以使用自己的证书来签名.不需要任何授权中心. 当你要为最终用户发布你的应用程序的时候,你必须签入一个合适的密钥.你