手机:Google Pixel 6我想炫耀,Aosp android13cpu架构:Arm64Frida:16.1.10爱奇艺:15.2.5 这段本事在究诘爱奇艺的一些功能,当用Frida调试时发现存反Frida检测,表象是扩充frida -l index.js -U -f com.qiyi.video时进度重启,底下是对Frida检测的一些分析,并通过hook绕过Frida检测。 用Frida hook do_dlopen函数看加载哪个so时崩溃的,hook之前先获得do_dlopen在linker64中的相对偏移 从恶果不错看出加载的临了一个so是:libmsaoaidsec.so,而且莫得调用onLeave,由此可料定崩溃点在libmsaoaidsec.so中,而且在JNI_OnLoad之前检测的,检测点应该是在init_array开动化函数中。<br/>既然挂上Frida后进度就退出,那么咱们就来分析是调用哪个系统调用退出的,不错通过strace寻查系统调用,但在扩充strace时需要在dlopen加载libmsaoaidsec.so之前让线程sleep 10秒,以便留出strace扩充时机。 我想炫耀 咱们看这一瞥[pid 15576] [000000751926c008] exit_group(0 <unfinished ...>,暴露15576线程是在0x751926c008地址处调用exit_group退出的,通过proc/15534/maps寻查libc.so的地址范畴是0x7509b9c000 - 0x7509c70000,很显著0x751926c008不是libc.so的地址,由此不错料定exit_group的代码是动态开释的。<br/>动态开释代码一定是要操作内存的,接下来咱们用前边接头的逻辑,用strace寻查调用了哪些和内存关联的系统调用<br/>strace -e trace=process,memory -i -f -p 25947瞩目这行:[pid 25990] [0000007509c48ab8] mmap(NULL, 28, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x751926c000<br/>上头这行mmap苦求的内存复返的地址是:0x751926c000,适值匹配后头exit_group前边的地址:000000751926c008<br/>由mmap的地址不错看出mmap是libc.so中的函数,于是咱们不错hook mmap打印一下调用栈 橾p在线观看
责罚有想象即是replace掉这个无复返值的函数 void sub_1B924()<br/>由于这个检测逻辑在.init_函数中,是以得先找到hook时机,寻查Aosp代码发现linker扩充init_array类的函数是call_constructors: 是以径直hook call_constructors函数,在onEnter中replace掉sub_1b924<br/>寻查call_constructors在linker64中的偏移 [瞩目]传递专科常识、拓宽行业东谈主脉——看雪讲师团队等你加入!我想炫耀 上传的附件: strace_android10 (786.68kb,117次下载) strace_android12 (794.04kb,82次下载) strace_android13 (801.84kb,102次下载) strace_android14 (822.27kb,88次下载) libmsaoaidsec.so (676.00kb,90次下载) |