让App吐出自己的Crash信息

某App启动后Native层就会Crash,但是由于它集成了google_breakpad,将Native层的异常全部捕获并处理了,所以看不到任何的异常信息,只有这么一段:

06-24 14:22:45.165   570   570 I Zygote  : Process 7047 exited due to signal (11)

通过分析它是集成了google_breakpad,于是找到google_breakpad::ExceptionHandler()函数:

让App吐出自己的Crash信息_第1张图片

 

Hook此函数:


HOOK_DEF(void *, _ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi, void *p,void *p2,void *p3,void *p4,
         bool b,int i) {
    ALOGE("1111111111 enter ExceptionHandler()....");
    return NULL;
}

AntiMethodInfo antiMethodsInfo[] = {
        {"_ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi",
                (void *) new__ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi,
                (void *) orig__ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi}
};

void disableGoogleBreakpad(const char *name) {
    void *handle = fake_dlopen(name, 0);
    for (int i = 0; i < sizeof(antiMethodsInfo) / sizeof(antiMethodsInfo[0]); i++) {
        void *symbol = fake_dlsym(handle, antiMethodsInfo[i].name);
        if (symbol) {
            MSHookFunction(symbol,
                           (void *) antiMethodsInfo[i].newFunc), (void **) &(antiMethodsInfo[i].origFunc);
        }
    }
}

 

于是终于可以看到此APP的Crash信息:

让App吐出自己的Crash信息_第2张图片

你可能感兴趣的:(Android,Android,NDK,Android逆向)