我开始直接hook的linker 的 __dl__Z9do_dlopenPKciPK17android_dlextinfoPKv 函数,发现加载了好几个so:
libexec.so
libdvm.so
libexecmain.so
libmthook.so
看见这个libdvm.so 吓傻了,不会是
4.4
的dvm虚拟机给整上了吧,但是在本地中我没法libdvm.so,然后我想dump出来看看,也没有,看了下加载路径,没有后缀直接“libdvm.so”,我想了下,这不会是加载下dvm试试吧,通过dvm判断虚拟机啊,反正,我手机上没有。
算了直接写结果了。hook __dl__Z9do_dlopenPKciPK17android_dlextinfoPKv 这个函数,只能证明,有人调用过dlopen ,是没有办法,没法定位到具体是init_proc 和init_array 的。我们可以hook掉调用init 函数的具体位置。
android8 liner文件 符号:
__dl__ZL13call_functionPKcPFviPPcS2_ES0_
这样就能找到具体是哪个ini函数调用的,我们还能打印出init函数地址,定位到具体是哪个init_array函数调用了那些系统函数
so_name onEnter:,
/
data
/
user
/
0
/
com.gzlex.hui.guoziwei.travel
/
files
/
libexec.so currentThread
31443
__dl__ZL13call_functionPKcPFviPPcS2_ES0_ currentThread
31443
return
addr:,
0xe8674c71
currentThread
31443
0xe8674c71
currentThread
31443
GetFieldID
is
at ,
0xe4b26f0d
,_ZN3art3JNI10GetFieldIDEP7_JNIEnvP7_jclassPKcS6_ currentThread
31443
AllocObject
is
at ,
0xe4b10b8d
,_ZN3art3JNI11AllocObjectEP7_JNIEnvP7_jclass
........
_ZN3art3JNI21ReleaseStringUTFCharsEP7_JNIEnvP8_jstringPKc currentThread
31443
FindClass
is
at ,
0xe4b0bd81
,_ZN3art3JNI9FindClassEP7_JNIEnvPKc currentThread
31443
linker_call_addr ,
0xc7856d71
currentThread
31443
......
linker_call_addr ,
0xc78895a5
currentThread
31443
linker_call_addr_leave ,
0xc78895a5
currentThread
31443
linker_call_addr ,
0xc788af49
currentThread
31443
linker_call_addr_leave ,
0xc788af49
currentThread
31443
linker_call_addr ,
0xc7805139
currentThread
31443
libc____system_property_get,
0xc7806023
,ro.build.version.sdk currentThread
31443
libc____system_property_get,
0xc7806023
,ro.build.version.sdk currentThread
31443
libc____system_property_get,
0xc780612d
,ro.yunos.version currentThread
31443
libc____system_property_get,
0xc78061bf
,ro.yunos.hardware currentThread
31443
libc____system_property_get,
0xc780542f
,ro.build.
id
currentThread
31443
linker_call_addr_leave ,
0xc7805139
currentThread
31443
linker_call_addr ,
0xc7807729
currentThread
31443
linker_call_addr_leave ,
0xc7807729
currentThread
31443
.....
linker_call_addr ,
0xc781f3e1
currentThread
31443
libc__fopen,
0xc781f76d
,
/
proc
/
31443
/
status currentThread
31443
libc__open,
0xe72e6c33
,
/
proc
/
31443
/
status currentThread
31443
libc__read,
0xe72e6a0f
,
0x1f
currentThread
31443
libc__fgets,TracerPid:
0
currentThread
31443
libc____system_property_get,
0xc780c2cb
,ro.build.version.sdk currentThread
31443
libc____system_property_get,
0xc780c2cb
,ro.build.version.release currentThread
31443
libc____system_property_get,
0xc780c2cb
,ro.build.version.release currentThread
31443
libc____system_property_get,
0xc780c2cb
,ro.build.version.sdk currentThread
31443
libc__fopen,
0xc780a101
,
/
proc
/
self
/
maps currentThread
31443
libc__open,
0xe72e6c33
,
/
proc
/
self
/
maps currentThread
31443
libc__read,
0xe72e6a0f
,
0x1f
currentThread
31443
libc__read,
0xe72e6a0f
,
0x1f
currentThread
31443
在上面我们还通过fopen 函数hook 找到了TracerPid 的位置(fgets函数是后续分析代码所得)