Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android JNI 獲取應用簽名

Android JNI 獲取應用簽名

編輯:關於Android編程

使用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_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(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(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


【 聲明:版權所有,歡迎轉載,請勿用於商業用途。 --天盟】

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved