frida的CModule是一个极其强大的模块,本文将使用CModule来完成init_array的信息输出
CModule
init_array
简单来说,就是借助CModule对soinfo结构体进行解析
soinfo
经过对比分析历代soinfo结构体的定义,可以确定从Android 8 ~ 14,结构体中init_array的位置都很稳定
于是通过下面的头文件中提取必要的内容,在CModule中定义一个soinfo结构体,这样frida就能自动完成相关偏移的处理
接着定义一个函数,接受一个soinfo指针参数和一个callback函数,优雅地输出init_array信息
void
tell_init_info(soinfo* ptr,
(*cb)(
int
,
*,
*)) {
cb(ptr->init_array_count_, ptr->init_array_, ptr->init_func_);
}
那么哪里最早能获取到soinfo指针呢?答案是soinfo->call_constructors,这个函数符号一直很稳定
soinfo->call_constructors
为了获取soname,则选择主动调用soinfo->get_soname,这个函数符号同样很稳定
soinfo->get_soname
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
misskings [em_13]再来个样本就好了
强大,我这里有一个apk ,init_array 里面有个thread_create的方法,经过测试,的确可以解析出来.