JNIKeyProtection icon indicating copy to clipboard operation
JNIKeyProtection copied to clipboard

方法调用问题

Open zmmzhaomaomao opened this issue 5 years ago • 1 comments

博主您好: 感谢您的分享,让我有机会接触JNI层的代码保护实现。

在查阅Key.cpp代码实现过程中,发现代码76,77两行,两次调用了签名转换为字符串的方法,似乎有点多余了,我对JNI还在摸索阶段,故此,提问。 jstring signatureStr = (jstring) env->CallObjectMethod(signatureObject, toCharsString); const char *signature = env->GetStringUTFChars((jstring) env->CallObjectMethod(signatureObject, toCharsString), NULL); 两次调用 env->CallObjectMethod(signatureObject, toCharsString);

zmmzhaomaomao avatar Dec 28 '19 07:12 zmmzhaomaomao

还有两段代码有疑问,分别如下: if (runningPackageName) {// 正在运行应用的包名 const char *charPackageName = env->GetStringUTFChars(runningPackageName, 0); if (strcmp(charPackageName, APP_PACKAGE_NAME) != 0) { return JNI_FALSE; } env->ReleaseStringUTFChars(runningPackageName, charPackageName); } else { return JNI_FALSE; } if (strcmp(signature, SIGNATURE_KEY) == 0) { LOGE("verification passed"); env->ReleaseStringUTFChars(signatureStr, signature); auth = JNI_TRUE; return JNI_TRUE; } else { LOGE("verification failed"); auth = JNI_FALSE; return JNI_FALSE; }

主要疑问点在于,ReleaseStringUTFChars函数调用的时机。 当charPackageName 与 APP_PACKAGE_NAME 值不相等的时候,直接返回了JNI_FALSE,而没有调用ReleaseStringUTFChars函数。
比较signature与SIGNATURE_KEY时,同样也是值不相等,就直接返回了JNI_FALSE. 故此,询问是否有必要都调用在返回之前调用ReleaseStringUTFChars

zmmzhaomaomao avatar Dec 28 '19 07:12 zmmzhaomaomao