Android отключить отладку ptrace для безопасности - PullRequest
0 голосов
/ 17 мая 2019

В целях безопасности я хочу, чтобы любой посторонний человек не видел и не прикреплял отладчик к своему приложению и мог просматривать журналы приложения.Чтобы предотвратить это, я наткнулся на 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)

1 Ответ

0 голосов
/ 08 июня 2019

Вы зависаете, потому что monitor_pid - это функция, которая возвращает void * и не имеет оператора возврата, поэтому компилятор по умолчанию помещает туда код операции trap.

void *monitor_pid(void *arg) {

    int status;

    //waitpid(child_pid, &status, 0);

    /* Child status should never change. */

    //_exit(0);

}

Я должен упомянуть пару вещей:

  1. Невозможно полностью остановить страстного исследователя в отладке вашего приложения, они также могут выполнить обратный инжиниринг вашего кода, чтобы устранить ваши усилия по устранению неполадок.

  2. Вы закомментировали большую часть своего кода, который был в опубликованном вами URL. Как вы ожидали, что это сработает?

  3. Я не JNI-скрипт , это собственный код, скомпилированный с вашим приложением.

...