android检测签名代码,用JNI的方式来检测Android Service Hook爆破签名校验

int isHookPMS(JNIEnv *env){

jobject cPMSO = getCurrentPMSObject(env);

jclass cPMSC = (*env)->GetObjectClass(env, cPMSO);

jclass cPMSFC =(*env)->GetSuperclass(env,cPMSC);

jclass proxyClass = (*env)->FindClass(env,"java/lang/reflect/Proxy");

if((*env)->IsAssignableFrom(env,  cPMSFC,proxyClass)){

//PMS被Hook

(*env)->DeleteLocalRef(env, cPMSO);

(*env)->DeleteLocalRef(env, cPMSC);

(*env)->DeleteLocalRef(env, cPMSFC);

(*env)->DeleteLocalRef(env, proxyClass);

return 1;

}else{

(*env)->DeleteLocalRef(env, cPMSO);

(*env)->DeleteLocalRef(env, cPMSC);

(*env)->DeleteLocalRef(env, cPMSFC);

(*env)->DeleteLocalRef(env, proxyClass);

return 0;

}

}

jobject getCurrentPMSObject(JNIEnv *env){

jclass activityThreadClass = (*env)->FindClass(env,"android/app/ActivityThread");

jmethodID currentActivityThreadMethod = (*env)->

GetStaticMethodID(env,activityThreadClass,"currentActivityThread","()Landroid/app/ActivityThread;");

jobject currentActivityThread = (*env)->CallStaticObjectMethod(env,activityThreadClass,currentActivityThreadMethod);

jfieldID sPackageManagerFieldId = (*env)->GetStaticFieldID(env,activityThreadClass,"sPackageManager","Landroid/content/pm/IPackageManager;");

jobject sPackageManager = (*env)->GetStaticObjectField(env,currentActivityThread,sPackageManagerFieldId);

(*env)->DeleteLocalRef(env, activityThreadClass);

(*env)->DeleteLocalRef(env, currentActivityThreadMethod);

(*env)->DeleteLocalRef(env, currentActivityThread);

return sPackageManager;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值