android 防止反编译重签名,C实现代码
16lz
2022-04-17
#include <string.h>#include <android/log.h>#include <assert.h>#include <stdlib.h>#include "com_example_myapp_JniTest.h" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,"com.example.myapp", __VA_ARGS__)const jint apksign = -344438290;JNIEXPORT jstring JNICALL Java_com_example_myapp_JniTest_getKey(JNIEnv *env, jclass j){ return (*env)->NewStringUTF(env, "Hello from JNI !");}jint getSignHashCode(JNIEnv *env) { //get application context. jclass activityThread = (*env)->FindClass(env,"android/app/ActivityThread"); jmethodID currentActivityThread = (*env)->GetStaticMethodID(env,activityThread, "currentActivityThread","()Landroid/app/ActivityThread;"); jobject at = (*env)->CallStaticObjectMethod(env,activityThread, currentActivityThread); jmethodID getApplication = (*env)->GetMethodID(env,activityThread, "getApplication", "()Landroid/app/Application;"); jobject context = (*env)->CallObjectMethod(env,at, getApplication);// // //get Context class jclass context_clazz = (*env)->GetObjectClass(env,context);// // //getPackageManager method ID jmethodID methodID_getPackageManager = (*env)->GetMethodID(env,context_clazz, "getPackageManager", "()Landroid/content/pm/PackageManager;");// //get PackageManager object jobject packageManager = (*env)->CallObjectMethod(env,context, methodID_getPackageManager);// //get PackageManager class jclass pm_clazz = (*env)->GetObjectClass(env,packageManager);// // //getPackageInfo method ID jmethodID methodID_pm = (*env)->GetMethodID(env,pm_clazz, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");// //getPackageName method ID. jmethodID methodID_pack = (*env)->GetMethodID(env,context_clazz, "getPackageName", "()Ljava/lang/String;");// // //get package name. jstring application_package = (jstring) (*env)->CallObjectMethod(env,context, methodID_pack); const char *str = (*env)->GetStringUTFChars(env,application_package, 0);// // //get PackageInfo object. jobject packageInfo = (*env)->CallObjectMethod(env,packageManager, methodID_pm, application_package, 64);// //get PackageInfo class. jclass packageinfo_clazz = (*env)->GetObjectClass(env,packageInfo); jfieldID fieldID_signatures = (*env)->GetFieldID(env,packageinfo_clazz, "signatures", "[Landroid/content/pm/Signature;");// //get signatures array. jobjectArray signature_arr = (jobjectArray) (*env)->GetObjectField(env,packageInfo, fieldID_signatures);// //get Signature element 0. jobject signature = (*env)->GetObjectArrayElement(env,signature_arr, 0);// // //get signature hashcode jclass signature_clazz = (*env)->GetObjectClass(env,signature); jmethodID methodID_hashcode = (*env)->GetMethodID(env,signature_clazz, "hashCode", "()I"); jint hashCode = (*env)->CallIntMethod(env,signature, methodID_hashcode);// // //compare hashcode. if (hashCode != apksign) { LOGI(" %d != %d\n", hashCode, apksign); exit(0); } else { LOGI(" %d == %d\n", hashCode, apksign); } return hashCode;}JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env = NULL; if ((*vm)->GetEnv(vm,(void **) &env, JNI_VERSION_1_6) != JNI_OK) {// if (vm->GetEnv((void **) &env, JNI_VERSION_1_6) != JNI_OK) { LOGI("load library error 1"); return JNI_ERR; } assert(env != NULL); getSignHashCode(env); LOGI(" %d != %d\n", 1000, 100); return JNI_VERSION_1_6;}
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer