[安卓逆向]使用 strace 排查 Android 模拟器应用闪退问题(七)

[安卓逆向]使用 strace 排查 Android 模拟器应用闪退问题(七) 概述当应用在模拟器上安装后闪退时通过系统调用追踪strace可以捕获应用启动过程中的异常行为从而定位根本原因。本文介绍如何利用strace获取应用崩溃前的系统调用日志并基于日志分析常见闪退场景。适用场景应用在模拟器中启动后立即崩溃或运行后异常退出怀疑存在模拟器检测、反调试或系统环境不兼容等问题。一、确定应用包名和主启动类在开始追踪之前需要明确应用的唯一标识包名以及点击图标时最先启动的 Activity主启动类1.1 查找app包名1.2 查找主类以np管理器为例dumpsys package player.normal.np|grep-A5android.intent.action.MAIN雷电客户端执行PS D:\leidian\LDPlayer9./adb shell HWALN:/ $suHWALN:/#HWALN:/#1|HWALN:/# dumpsys package player.normal.np | grep -A 5 android.intent.action.MAINandroid.intent.action.MAIN: f6a6bd1 player.normal.np/.activity.GuideActivity filter 64ddc0 Action:android.intent.action.MAINCategory:android.intent.category.LAUNCHERMIME Typed Actions: android.intent.action.EDIT: 653a25b player.normal.np/.activity.EditActivity filter e208a3e HWALN:/#二、获取 root 并修改系统设置解决 ptrace 权限进入 adb shell 并切换到 rootadb shellsu提示符应变为#临时关闭 SELinuxsetenforce0允许所有进程被 ptraceecho0/proc/sys/kernel/yama/ptrace_scope然后再执行抓取循环在 root 下运行while:;dopid$(ps-A|grepplayer.normal.np|awk{print $2})if[-n$pid];thenecho抓到 PID:$pidstrace-f-p$pid-o/sdcard/strace.logbreakfisleep0.22/dev/null||usleep2000002/dev/null||sleep1done在另一个终端启动应用或直接点击图标。adb shell am start-n包名/主启动类应用闪退后CtrlC终止循环然后拉取日志exit# 退出 root shellexit# 退出 adb shell#日志拉取到本地可选adb pull /sdcard/strace.log​ 如果崩溃后生成了 tombstone可以拉取查看adb shellls-l/data/tombstones/ adb pull /data/tombstones/tombstone_XX#查询一般应用崩溃日志在这里head-n80/data/tombstones/tombstone_05grep-A30backtrace/data/tombstones/tombstone_05三、提取关键信息拿到strace.log后直接查看日志尾部tail-n200strace.logHWALN:/sdcard# tail -n 10 strace.log6680 killed by SIGABRT 6708... mmap resumed)0x763917ad60006707rt_sigaction(SIGBUS,{sa_handler0x763917b8a8e1,sa_mask~[RTMIN RT_1 RT_2 RT_3],sa_flagsSA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer0x763917c3d390},unfinished...6651 killed by SIGABRT 6707... rt_sigaction resumedNULL,8)06707rt_sigaction(SIGFPE,{sa_handler0x763917b8a8e1,sa_mask~[RTMIN RT_1 RT_2 RT_3],sa_flagsSA_RESTORER|SA_ONSTACK|SA_RESTART|SA_SIGINFO, sa_restorer0x763917c3d390},unfinished...6707 killed by SIGKILL 6703... rt_sigsuspend resumed)?6703 killed by SIGKILL 6708 killed by SIGKILL HWALN:/sdcard#重点看exit_group/kill自杀信号openat尝试打开特征文件失败connect网络连接行为futex等待异常syscall_983045(binder) 调用失败四、常见闪退原因及日后对策检测到模拟器文件如/dev/qemu_pipe可通过修改内核或预加载 so 隐藏。系统属性含qemu/goldfish需 Native Hook__system_property_get伪造。CPU 信息暴露虚拟化伪造/proc/cpuinfo。拒绝网络连接模拟器无法访问某些服务器导致connect超时后自杀。反调试ptrace被绕过加固检测到自身被 trace 后退出需用魔改 Frida 或提前解除限制。