能力值:
( LV1,RANK:0 )
|
-
-
51 楼
很清晰
|
能力值:
( LV1,RANK:0 )
|
-
-
52 楼
66666
|
能力值:
( LV1,RANK:0 )
|
-
-
53 楼
6666
|
能力值:
( LV1,RANK:0 )
|
-
-
54 楼
谢谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
666
|
能力值:
( LV1,RANK:0 )
|
-
-
56 楼
看看内容
|
能力值:
( LV3,RANK:30 )
|
-
-
57 楼
666
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
666
|
能力值:
( LV1,RANK:0 )
|
-
-
59 楼
666
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
66
|
能力值:
( LV9,RANK:235 )
|
-
-
61 楼
hook so入口点可以用一套模板代码 get_so_name = (const char *(*)(void *soinfo)) (linker64_base + get_sym_addr("/apex/com.android.runtime/bin/linker64", "__dl__ZNK6soinfo10get_sonameEv")); if (get_so_name == nullptr) { LOGE("failed to get get_so_name address"); return; } else { LOGD("get_so_name address: %p", (void *) get_so_name); }
static void *call_constructors_addr = (void *) (linker64_base + get_sym_addr("/apex/com.android.runtime/bin/linker64", "__dl__ZN6soinfo17call_constructorsEv")); if (call_constructors_addr == nullptr) { LOGE("failed to get call_constructors address"); return; } else { LOGD("call_constructors address: %p", call_constructors_addr); }
DobbyInstrument(call_constructors_addr, [](void *address, DobbyRegisterContext *ctx) { const char *soname = (const char *) get_so_name((void *) ctx->general.x[0]); // hook到了so的加载点, 此时还未调用init_array if (soname && strstr(soname, "libmetasec_ml.so")) {
|
能力值:
( LV1,RANK:0 )
|
-
-
62 楼
谢谢
|
能力值:
( LV1,RANK:0 )
|
-
-
63 楼
666
|
能力值:
( LV1,RANK:0 )
|
-
-
64 楼
666666666
|
能力值:
( LV1,RANK:0 )
|
-
-
65 楼
666
|
能力值:
( LV1,RANK:0 )
|
-
-
66 楼
666
|
能力值:
( LV2,RANK:10 )
|
-
-
67 楼
666
|
能力值:
( LV3,RANK:30 )
|
-
-
68 楼
666
|
能力值:
( LV1,RANK:0 )
|
-
-
69 楼
666
|
能力值:
( LV1,RANK:0 )
|
-
-
70 楼
学习一下
|
|
|