利用簽名機制進行程式自檢——Android防破解

來源:互聯網
上載者:User

利用簽名機制進行程式自檢——Android防破解

自檢程式寫在so裡

主要代碼

在檔案頭中匯入

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include #include#include #include #endif

然後在cpp中寫入Java調用c的介面

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)extern "C"{JNIEXPORT jint JNICALL Java_org_cocos2dx_cpp_AppActivity_checkAPK(JNIEnv *env, jclass jcl,jobject context_object) {jclass context_class = env->GetObjectClass(context_object);//context.getPackageManager()jmethodID methodId = env->GetMethodID(context_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");jobject package_manager_object = env->CallObjectMethod(context_object, methodId);if (package_manager_object == NULL) {__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageManager() Failed!");return NULL;}//context.getPackageName()methodId = env->GetMethodID(context_class, "getPackageName", "()Ljava/lang/String;");jstring package_name_string = (jstring)env->CallObjectMethod(context_object, methodId);if (package_name_string == NULL) {__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageName() Failed!");return NULL;}env->DeleteLocalRef(context_class);//PackageManager.getPackageInfo(Sting, int)jclass pack_manager_class = env->GetObjectClass(package_manager_object);methodId = env->GetMethodID(pack_manager_class, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");env->DeleteLocalRef(pack_manager_class);jobject package_info_object = env->CallObjectMethod(package_manager_object, methodId, package_name_string, 64);if (package_info_object == NULL) {__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageInfo() Failed!");return NULL;}env->DeleteLocalRef(package_manager_object);//PackageInfo.signatures[0]jclass package_info_class = env->GetObjectClass(package_info_object);jfieldID fieldId = env->GetFieldID(package_info_class, "signatures", "[Landroid/content/pm/Signature;");env->DeleteLocalRef(package_info_class);jobjectArray signature_object_array = (jobjectArray)env->GetObjectField(package_info_object, fieldId);if (signature_object_array == NULL) {__android_log_print(ANDROID_LOG_INFO, "JNITag","PackageInfo.signatures[] is null");return NULL;}jobject signature_object = env->GetObjectArrayElement(signature_object_array, 0);env->DeleteLocalRef(package_info_object);//Signature.toCharsString()jclass signature_class = env->GetObjectClass(signature_object);methodId = env->GetMethodID(signature_class, "hashCode", "()I");env->DeleteLocalRef(signature_class);int signature_string = env->CallIntMethod(signature_object, methodId);HelloWorld::hashCode = signature_string;return signature_string;}}#endif


HelloWorld中的hashCode就是我們自檢的結果,程式運行時檢測hashCode是否與簽名時的一致即可

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.