В целях безопасности я хочу, чтобы любой посторонний человек не видел и не прикреплял отладчик к своему приложению и мог просматривать журналы приложения.Чтобы предотвратить это, я наткнулся на JNI-скрипт , который фактически убивает приложение, если кто-то пытается подключить отладчик в выпуске приложения.
static int child_pid;
void *monitor_pid(void *arg) {
int status;
//waitpid(child_pid, &status, 0);
/* Child status should never change. */
//_exit(0);
}
jboolean anti_debug() {
child_pid=fork();
if(child_pid==0)
{
int ppid = getppid();
int status;
if(ptrace(PTRACE_ATTACH,ppid,NULL,NULL) ==0)
{
waitpid(ppid, &status,0);
ptrace(PTRACE_CONT,ppid,NULL,NULL);
while(waitpid(ppid, &status,0)) {
if(WIFSTOPPED(status)) {
ptrace(PTRACE_CONT,ppid,NULL,NULL);
} else{
// Process has exited
//_exit(0);
//ptrace(PTRACE_DETACH,ppid,NULL,NULL);
return JNI_TRUE;
}
}
}
} else{
pthread_t t;
//ptrace(PTRACE_DETACH,getppid(),NULL,NULL);
/* Start the monitoring thread */
pthread_create(&t, NULL, monitor_pid, (void *)NULL);
}
return JNI_FALSE;
}
extern "C" JNIEXPORT jboolean JNICALL Java_com_utilities_Global_checkPtrace(
JNIEnv *env, jobject instance) {
return anti_debug();
}
Теперь моя проблема в том, что он работает для отладочной сборки.в первый раз, когда я открываю приложение во второй раз, оно вылетает, и ниже появляются ошибки, которые я получаю.
Любая помощь будет оценена
A/DEBUG: #00 pc 0000965c /data/app/com.dev-uvtomKbV4Z3rmhQFiqJ81Q==/lib/x86/libapp.so (monitor_pid(void*)+12)
2019-05-16 16:40:24.646 12904-12904/? A/DEBUG: #01 pc 0008f065 /system/lib/libc.so (__pthread_start(void*)+53)
2019-05-16 16:40:24.646 12904-12904/? A/DEBUG: #02 pc 0002485b /system/lib/libc.so (__start_thread+75)